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