왜입니까? 기본적으로 경로에 없습니까?


63

수년 동안 UNIX와 비슷한 시스템 (가장 나에게 Linux와 관련이 있음)에서 .(현재 dir)이 $PATH기본적으로 절대 존재하지 않는다는 것을 알았습니다 . 왜 이런거야?

나는 몇 년 전에 읽은 것이 보안 문제라는 것을 기억하지만, 읽은 기사에서는 문제가 무엇인지 정확히 설명하지 못했습니다. 누군가가 악의적 인 버전의 디렉토리 lscp디렉토리에 남을 수 있기 때문에 그 파일이 존재한다는 사실을 알지 못하고 실행하게 될까요?


6
대화 형 사용자 보호는 다른 프로그램을 실행하는 다른 프로그램 (및 스크립트)만큼 중요하지 않습니다. 일부 정통한 사용자조차도 랜덤 디렉토리에 ls있을 때 /usr/bin/ls./ls없을 때를 알고 싶어 합니다. .경로 끝에 추가하는 방법을 알고 있다면 어쩌면 당신이하고있는 일이 무엇인지 알 수 있습니다. 루트해야 결코 없다 .경로에 많은 시스템도 더 이상 루트 로그를하지 않습니다.
msw

답변:


41

당신은 자신의 질문에 정확하게 대답했습니다. 그것이 바로 도트가 길에 있지 않은 이유
입니다. 유치한 바이러스 또는 정직한 실수로부터 보호하십시오.

물론 이것은 매우 불충분하고 쓸모없는 바이러스 백신 조치이며 경로에 점을 추가하는 것을 막는 것은 없습니다.


13
그러나 당신은 이것으로부터 보호되지만 -rf디렉토리 의 고독한 파일 은 아닙니다 ( rm *흥미 롭습니다) ;-)
Joey

유닉스 답변 : 왜 파일 이름을 -rf처음에 지었습니까? ;)
msw

2
@ msw : 또 다른 유닉스 대답은 일반적으로 경로의 점이 관리자 계정에 찌그러 지지만 관리자가 아닌 사람에게는 괜찮다는 것입니다.
harrymc

현재 경로가 마지막 경로 인 경우 프로그램의 모든 일반 위치를 먼저 확인하기 때문에 위험이 크게 감소 합니까?
존 Z

1
@ 존스 : 정말. 그러나 컴퓨터가 바이러스로부터 깨끗하다면 위험은 매우 적습니다. 그리고 컴퓨터가 감염되면 최신 바이러스로 경로가 가장 걱정됩니다.
harrymc 2016 년

4

예. "."를 넣으면 경로에서 현재 디렉토리의 파일에 많은 명령 호출을 보냅니다.

마지막 경우에도 여전히 파일럿 오류가 있습니다. 예를 들어, Solaris 10에는 "top"이 없습니다. "top"이있는 시스템에 있다고 생각하기 때문에 하루 종일 시스템에 "top"을 입력합니다.


1

죄송합니다. 선택한 답변에 대한 의견 양식으로이 질문을하고 싶지만 아직 수퍼 유저에 대한 담당자는 없습니다.

보안 답변은 의미가 있지만 "." 마지막으로 PATH에서 쉘이 실행 파일을 검색 할 때 현재 디렉토리를 마지막으로 보지 않아야하므로 보안 위험을 줄일 수 있습니까? $ PATH를 순서대로 검색하면 ./ls를 찾기 전에 / bin / ls를 찾습니다.

그래서 "."를 넣는 것이 얼마나 안전하지 않은가. $ PATH 환경 변수의 끝에?

내가 제안한대로 작동합니다. 내가 테스트 한 방법은 다음과 같습니다.

먼저 "."를 추가하십시오. PATH 환경 변수의 끝에.

그런 다음 ~ / dir1 / dir2 / test_which.rb와 같은 일부 디렉토리에 다음 파일을 넣으십시오.

#!/your/path/to/ruby

puts "this file is from the current directory"

이 파일을 /usr/bin/test_which.rb에 두십시오.

#!/your/path/to/ruby

puts "this file is at /usr/bin/test_which.rb"

실행 가능하도록 파일을 chmod + x해야합니다.

이제 디렉토리를 ~ / dir1 / dir2로 변경하고 test_which.rb를 실행하면 결과가 나타납니다.

this file is at /usr/bin/test_which.rb

실제로 "어디에서 test_which.rb"를 실행하면보고해야합니다.

/usr/bin/test_which.rb

다음을 입력하여 현재 디렉토리에서 파일을 계속 실행할 수 있습니다.

./test_which.rb

8
아무도 같은, 오타가 이루어지지 dc하거나 sl또는 sduo쉘에서, 그리고 "명령을 찾을 수 없습니다"로 저장되었습니다. 이제까지.
Daniel Beck

1
Daniel과 동의 : 철자가 틀린 명령의 이름을 딴 악성 스크립트를 가질 수 있습니다. 이 답변 도 참조하십시오 .
ignis

@DanielBeck 당신은 mistypings에 별칭을 사용해야합니다. 나는 오타를 완전히 ls없애기 위해 선호하는 (컬러 출력 등) 구성을 가지고 있습니다 l.
Karl Damgaard Asmussen

1
@KarlDamgaardAsmussen kl
deworde

나는 개인적으로 '.'를 추가하지 않습니다. 내 길로. ./run을 입력하거나 로컬 디렉토리에서하고 싶은 것을 입력하는 것은 어렵지 않습니다. 예상치 못한 것들을 집어 들어 몇 번이나 절약했습니다. 토마토 토마토.
Michael Mathews

1

'.'이있는 보안 위험 이상의 것 PATH에서 명령 실행이 의도 한대로 작동하도록하는 것은 거의 불가능합니다. 임의의 이름을 가진 수천 개의 파일을 포함하는 거대한 디렉토리에서 'zip'과 같은 명령을 실행하는 것을 고려하십시오. 그중 하나가 실제로 'zip'이라는 이름의 가능성은 무시할 수 없으며 이해하기 매우 어려운 오류로 이어질 수 있습니다 (실제로는 파일은 실행 가능해야하지만 발생할 수 있음).

특히 이것은 사용자의 PATH 변수를 유지하는 스크립트를 작성할 때 적용됩니다. 잘 작성된 스크립트는 공백이 있거나 이름이 '-'로 시작하는 파일 이름과 같은 모든 경우를 처리해야합니다. 그러나 시스템 명령 대신 현재 디렉토리의 파일이 실행되는 것을 방지하는 것은 실용적이지 않습니다 ...

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