2016-09-08 3 views
0

this 구조 다음에 YAML 파일을 쓰고 있습니다.YAML 파일 내부에서 유닉스 명령을 실행할 수 있습니까?

내 정확한 코드는 이것이다 :

# This is an appspec.yml template file for use with AWS CodeDeploy. 
# The lines in this template starting with the hashtag symbol are 
# instructional comments and can be safely left in the file or 
# ignored. 
# For help completing this file, see the "AppSpec File Reference" in the 
# "AWS CodeDeploy User Guide" at 
# http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html 
version: 0.0 
# Specify "os: linux" if this revision targets Amazon Linux, 
# Red Hat Enterprise Linux (RHEL), or Ubuntu Server 
# instances. 
# Specify "os: windows" if this revision targets Windows Server instances. 
# (You cannot specify both "os: linux" and "os: windows".) 
os: linux 

hooks: 
    AfterInstall: 
    - location: StartUIServices.sh 
    timeout: 180 
    runas: root 

문제 난에 하나 cd 인 유닉스 명령을 실행해야 할 또 다른 디렉토리 또는 위치 스크립트가되기 전에 (종료 유닉스 라인에 파일을 변환) sed -i 's/\r$//' file1* 도망 갔다. 그렇게하려면 어떻게해야합니까?

답변

1

YAML 파일 내부에서 명령을 실행할 수 있는지 여부는 다릅니다. YAML 명세에 그렇게 할 조항이 없다.
물론 YAML 파서도이 기능을 구현할 수 있습니다. 또는 프로그램이 YAML 파서의 데이터를 해석하고 해당 내용을 기반으로 명령을 실행할 수 있습니다. 프로그램이 안전하지 않은 경우 태그가 지정된 YAML을로드 할 수 있으며이 경우 생성되는 객체의 인스턴스에 대한 유일한 제한은 파서 또는 프로그램의 구현 언어 내에 있습니다.

AWS가 보안 상 위험한 위와 같은 안전하지 않은로드를 수행하는 경우,이를 악용하는 사람에 대해 들었을 것입니다.

AWS 인스턴스는 YAML 데이터의 안전한로드를 수행하고로드 된 데이터를 해석합니다. 설치 전에 스크립트를 실행하는 기능을 내장하고 있습니다 (BeforeInstall 훅 포함). 이러한 스크립트 중 첫 번째는 UNIX 라인 끝 변환을 DOS에서 다른 모든 스크립트로 수행해야하지만 당연히 그렇게 할 수는 없습니다. 그리고 아마도 DOS에서 스크립트를 발견했을 때 줄 끝이 잘 돌아 가지 않습니다. 첫 번째 스크립트를 다른 방법으로 변환해야하며 더 이상 변경하지 않아야합니다. 이 스크립트는 나중에 또는 다른 후크로 실행되는 다른 스크립트를 변환하여 Windows 호스트에서 다른 스크립트를 제공 할 수있는 단순한 스크립트 여야합니다.