다음 유형의 경로 이름을 사용하는 것이 $PATH
안전하고 좋은 습관입니다 .
경로 이름이 비어 있습니다.
findutils 매뉴얼에는
$PATH
빈 경로 이름을 포함하면 안전하지 않다고 나와 있는데, 그 이유가 무엇인지 궁금합니다.빈 경로 이름은 절대 경로 이름입니까, 아니면 상대 경로 이름입니까?
물결표 또는 파일 이름 확장자가 포함된 경로 이름입니다.
사용자가 유사한 쉘
$PATH
에서 물결표 또는 파일 이름 확장을 일관되게 이해하고 수행 할 수 있습니까?$PATH
PATH
예를 들어 쉘 시작 스크립트에서 값을 설정하면~/.profile
쉘이 시작 파일을 실행한다는 점을 고려하는 것이 중요합니까?물결표 확장과 관련된 항목을 찾았습니다.https://unix.stackexchange.com/a/154290/674
현재 작업 디렉토리. 바라보다추가하세요. 안전한가요? 내 길은? 어떻게요?
감사해요.
답변1
PATH
이 참조에 빈 요소가 있으면 '.'
안전하지 않은 것으로 간주될 수 있습니다.
끝에 점이 있거나 빈 요소가 있어도 크게 안전하지 않습니다 PATH
. 누군가 철자가 틀린 시스템 바이너리 이름을 사용하는 디렉토리에 바이너리를 넣은 경우에만 적중하기 때문입니다.
그 반대도 마찬가지이기 때문에 CDPATH
점이 없거나 빈 요소가 있으면 cd
현재 디렉터리에서 하위 디렉터리를 찾을 수 없습니다.
문자열 내부의 물결표를 PATH
이해할 수 없습니다. 이것이 POSIX 표준이 쉘 매크로를 할당할 때 명령줄에서 콜론 뒤에 물결표 시퀀스를 확장하도록 요구하는 이유입니다.
내 답변 후 질문에 추가된 텍스트와 관련하여 이러한 물결표 문자는 명령을 실행하기 전에 확장됩니다.
답변2
다른 사람들이 Google을 통해 이 정보를 찾았는지 알려주기 위한 것입니다.
경로를 입력하면 .
공격자는 ls
현재 작업 디렉터리에 /bin/ls 앞에 나타나는 경우 실행될 수 있는 파일을 생성합니다. 해당 가짜 ls는 rm -rf
그 안에 포함된 쉘 스크립트일 수 있으며, .
경로에 처음 나타나는 경우 명령을 실행하고 파일을 삭제할 때 자신도 모르게 해당 ls를 실행할 수 있습니다.