답변:
당신이 기계의 유일한 사용자라면, 당신이하고있는 것을 아는 한 괜찮습니다. 일반적인 우려 사항은에 현재 디렉토리가 PATH
있으면 명령을 상수 목록으로 볼 수 없다는 것입니다. 현재 디렉토리에서 스크립트 / 프로그램을 실행해야하는 경우 ./
이름 앞에 추가 하여 항상 명시 적으로 실행할 수 있습니다 ( "현재 디렉토리에서이 파일을 실행하고 싶습니다"라고 시스템에 알려줍니다).
이제 파일 시스템 전체에이 모든 작은 스크립트가 있습니다. 언젠가는 틀린 것을 확실히 실행할 것입니다. 따라서 PATH
사전 정의 된 정적 경로 목록으로 만드는 것은 질서가 있으며 잠재적 인 문제로부터 자신을 구하는 것입니다.
그러나에 추가 .
하려는 PATH
경우 목록 끝에 추가하는 것이 좋습니다 ( export PATH=$PATH:.
). 적어도 이런 식으로 시스템 전체 바이너리를 재정의하지 마십시오.
당신이 시스템의 루트이고, 시스템이 다른 사용자의 계정에 노출 된 경우 필요 .
에하는 것은 PATH
큰 보안 위험이 : 당신이 할 수 cd
당신은 일이나 스크립트를 잘못 입력하기 때문에 일부 사용자의 디렉토리에, 그리고 의도하지 않게 단지가 악성 스크립트를 실행하는 것이 시스템 전체 바이너리와 이름이 같습니다.
ls
현재 디렉토리에 배치 할 수 있습니다 . 다음으로 ls
추출 된 파일을 검사하기 위해 실행하고 이미 악성 코드를 실행했습니다.
위험은 누군가 현재 디렉토리에있는 악성 실행 파일을 디렉토리에 넣는 것입니다.
최악의 경우는 다음과 같은 경우에 발생합니다.
.
표준 명령은 눈치 채지 않고 (일반적으로 ls
목록에서 숨길 수 있음) 표준 명령을 무시할 수 있으므로 PATH의 시작 부분에 있습니다 .일반 사용자로 로그인하고 .
PATH 끝에이지만 여전히 존재 하는 경우 위험이 훨씬 낮 습니다.
어쨌든 기계의 유일한 사용자 인 경우에도 위험은 여전히 존재합니다. 예를 들어 손상된 사이트에서 다운로드 한 아카이브를 추출하면 악성 소프트웨어가 설치됩니다.
sl
포인트 3이 얼마나 자주 발생하는지 보려면 설치 하십시오.
alias l=`ls`
.
ls
디렉토리 목록을 얻을 것으로 예상 하지만 다운로드 한 일부 프로젝트 ls
는 루트 프로젝트 폴더에 다른 바로 가기로 스크립트 가있을 수 있습니다 . ls
아마도 나쁜 예 일 것입니다.하지만 e
편집, d
디버그, m
제작, b
빌드에 대해 확실히 상상할 수 있습니다 . 나는 그들 중 일부를 전 세계적으로 가지고 있습니다. 내가 입력하면 m
로컬 스크립트가 아닌 make launch (내 바로 가기) m
이 실행됩니다.
w
및 [
입니다.
당신은 퍼팅, 항상 당신이 입력 한 내용을 매우 조심하더라도 .
당신에게 PATH
조차 말에, 일부 프로그램은 현재 디렉토리를 변경하기 때문에, 여전히 안전하지 /tmp
(세계 쓸 수있는) 또한 실제로 설치되지 않은 유틸리티를 실행하려고 할 수 있습니다, 따라서 기본 값은입니다 /tmp
. 이것이 발생하면 이것이 공격의 벡터입니다.
피할 수 많은 단점이없는 것이 주 .
에가 PATH
있기 때문에, ./
사용 (이러한 문자가 연속 키에 있으며 Shift 키를 필요가 없습니다 QWERTY 같은 키보드에 특히) 입력하기 쉬운 ./
키 입력을 따라서 잠재적으로, 또한 완성 도움이 될 것입니다 저장 끝에.
현재 디렉토리에서 명령을 입력하고 싶다면 zsh와 같은 최신 쉘 command_not_found_handler
이 안전하게 수행 할 수있는 기능을 제공 할 수 있습니다. 즉, 처리기에서 원하는 모든 보안 검사를 추가하기 전에 명령이 실행됩니다.