경쟁 조건의 셸 (또는 bash) 명령 목록은 얼마나 안전합니까? 셸 명령 목록의 경쟁 조건
if [ -h "$dir" ]; then
echo 'Directory exists and is a symlink'
exit 1
fi
cd "$dir"
위의 코드
조건을 경주 분명히 경향이있다 : 공격자가 확인 후 심볼릭 링크를 생성하지만, 여전히 그것으로 디렉토리를 변경하기 전에 할 수 있습니다.동일한 내용이 ||
명령 목록에도 적용됩니까? 다른 말로하면 : 아래의 명령은 경쟁 조건에 영향을받지 않습니까? 아니면 위의 규칙과 동일한 규칙이 적용됩니까? 오류 메시지와 함께
[ -h "$dir" ] || cd "$dir"
: 동일한 경쟁 조건에 취약되지 않을 것 ||
를 사용하는 이유
[ -h "$dir" ]
&& { echo 'Directory exists and is a symlink'; exit 1; }
|| cd "$dir"
공격자가 심볼릭 링크로 기존 디렉토리를 바꾸거나 심볼릭 링크를 만들거나 두 가지 모두를 할 우려가 있습니까? –
-h와 관련된 테스트 맨 페이지에서 :이 연산자는이 프로그램의 이전 버전과의 호환성을 위해 유지됩니다. 그 존재에 의지하지 마라. 대신 -L을 사용하십시오. –
@WilliamPursell : 흥미 롭습니다 ... sh (1)의 맨 페이지가 정확히 반대라고 말합니다 :»-L file 파일이 존재하고 심볼릭 링크 인 경우 True입니다. 이 연산자는이 프로그램의 이전 버전과의 호환성을 위해 유지됩니다. 그 존재에 의지하지 마라. 대신에 -h를 사용하십시오.«man bash (1)는 둘 사이의 차이점을 언급하지 않습니다. – knittl