답변:
당신이 기계의 유일한 사용자라면, 당신이하고있는 것을 아는 한 괜찮습니다. 일반적인 우려 사항은에 현재 디렉토리가 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이 안전하게 수행 할 수있는 기능을 제공 할 수 있습니다. 즉, 처리기에서 원하는 모든 보안 검사를 추가하기 전에 명령이 실행됩니다.