추가해도 안전합니까? 내 경로에? 어떻게 오세요?


49

사람들이 다른 답변. 에서 $PATH환경 변수 에 현재 작업 디렉토리 ( ' ') 를 포함시키는 것은 좋지 않다고 언급 했지만 문제를 구체적으로 다루는 질문을 찾지 못했습니다.

그렇다면 왜 .내 경로에 추가해서는 안 됩니까? 그리고 모든 경고에도 불구하고 어쨌든 그렇게하면 무엇을주의해야합니까? 처음보다 끝에 추가하는 것이 더 안전합니까?


답변:


39

당신이 기계의 유일한 사용자라면, 당신이하고있는 것을 아는 한 괜찮습니다. 일반적인 우려 사항은에 현재 디렉토리가 PATH있으면 명령을 상수 목록으로 볼 수 없다는 것입니다. 현재 디렉토리에서 스크립트 / 프로그램을 실행해야하는 경우 ./이름 앞에 추가 하여 항상 명시 적으로 실행할 수 있습니다 ( "현재 디렉토리에서이 파일을 실행하고 싶습니다"라고 시스템에 알려줍니다).

이제 파일 시스템 전체에이 모든 작은 스크립트가 있습니다. 언젠가는 틀린 것을 확실히 실행할 것입니다. 따라서 PATH사전 정의 된 정적 경로 목록으로 만드는 것은 질서가 있으며 잠재적 인 문제로부터 자신을 구하는 것입니다.

그러나에 추가 .하려는 PATH경우 목록 끝에 추가하는 것이 좋습니다 ( export PATH=$PATH:.). 적어도 이런 식으로 시스템 전체 바이너리를 재정의하지 마십시오.

당신이 시스템의 루트이고, 시스템이 다른 사용자의 계정에 노출 된 경우 필요 .에하는 것은 PATH큰 보안 위험이 : 당신이 할 수 cd당신은 일이나 스크립트를 잘못 입력하기 때문에 일부 사용자의 디렉토리에, 그리고 의도하지 않게 단지가 악성 스크립트를 실행하는 것이 시스템 전체 바이너리와 이름이 같습니다.


1
+ 기본 이론을 받아들이고 시스템의 유일한 사용자 인 경우에도 문제가 여전히 존재할 수 있다고 언급합니다. 두 가지 답변 모두 훌륭한 포인트를 제시합니다. 다른 사용자와 디렉토리를 공유 할 때마다 루트 여부에 관계없이 위험이 증가한다고 덧붙입니다.
Jander

6
신뢰할 수없는 tar를 추출 할 때마다 ls현재 디렉토리에 배치 할 수 있습니다 . 다음으로 ls추출 된 파일을 검사하기 위해 실행하고 이미 악성 코드를 실행했습니다.
lesmana

35

위험은 누군가 현재 디렉토리에있는 악성 실행 파일을 디렉토리에 넣는 것입니다.

최악의 경우는 다음과 같은 경우에 발생합니다.

  • 악의적 인 명령이 무제한 피해를 입었으므로 루트로 로그인
  • .표준 명령은 눈치 채지 않고 (일반적으로 ls목록에서 숨길 수 있음) 표준 명령을 무시할 수 있으므로 PATH의 시작 부분에 있습니다 .

일반 사용자로 로그인하고 .PATH 끝에이지만 여전히 존재 하는 경우 위험이 훨씬 낮 습니다.

  • 누군가가 자주 명령을 잘못 입력하고 일치하는 명령을 설치한다는 것을 알 수 있습니다.
  • 누군가 설치되지 않은 이름으로 가짜 명령을 설치할 수 있습니다.

어쨌든 기계의 유일한 사용자 인 경우에도 위험은 여전히 ​​존재합니다. 예를 들어 손상된 사이트에서 다운로드 한 아카이브를 추출하면 악성 소프트웨어가 설치됩니다.


15
sl포인트 3이 얼마나 자주 발생하는지 보려면 설치 하십시오.
jordanm

또는 alias l=`ls`.
Anko

악성 일 필요는 없습니다. ls디렉토리 목록을 얻을 것으로 예상 하지만 다운로드 한 일부 프로젝트 ls는 루트 프로젝트 폴더에 다른 바로 가기로 스크립트 가있을 수 있습니다 . ls아마도 나쁜 예 일 것입니다.하지만 e편집, d디버그, m제작, b빌드에 대해 확실히 상상할 수 있습니다 . 나는 그들 중 일부를 전 세계적으로 가지고 있습니다. 내가 입력하면 m로컬 스크립트가 아닌 make launch (내 바로 가기) m이 실행됩니다.
gman

@gman 맞아. 악의가없는 명령은 무의식적으로 악영향을 미칠 수 있습니다. 단일 문자 명령 / 별칭은 유닉스 초기부터 오해의 위험이 높기 때문에 눈살을 찌푸 렸습니다. 드문 표준은 w[입니다.
jlliagre

3

당신은 퍼팅, 항상 당신이 입력 한 내용을 매우 조심하더라도 .당신에게 PATH조차 말에, 일부 프로그램은 현재 디렉토리를 변경하기 때문에, 여전히 안전하지 /tmp(세계 쓸 수있는) 또한 실제로 설치되지 않은 유틸리티를 실행하려고 할 수 있습니다, 따라서 기본 값은입니다 /tmp. 이것이 발생하면 이것이 공격의 벡터입니다.

피할 수 많은 단점이없는 것이 주 .에가 PATH있기 때문에, ./사용 (이러한 문자가 연속 키에 있으며 Shift 키를 필요가 없습니다 QWERTY 같은 키보드에 특히) 입력하기 쉬운 ./키 입력을 따라서 잠재적으로, 또한 완성 도움이 될 것입니다 저장 끝에.

현재 디렉토리에서 명령을 입력하고 싶다면 zsh와 같은 최신 쉘 command_not_found_handler이 안전하게 수행 할 수있는 기능을 제공 할 수 있습니다. 즉, 처리기에서 원하는 모든 보안 검사를 추가하기 전에 명령이 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.