![suid 실행 파일은 시스템 경로에 있는 경우에만 작동합니다.](https://linux55.com/image/103681/suid%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EC%9D%80%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EA%B2%BD%EB%A1%9C%EC%97%90%20%EC%9E%88%EB%8A%94%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
루트 권한이 필요한 실행 파일이 있습니다. 하지만 시스템 경로에 있을 때만 작동하는 것 같습니다. 내가 다음과 같이 실행하면 :
$ ./prog
프로그램이 루트 액세스 권한이 없다고 불평합니다. 이것은 suid 프로그램에 대한 또 다른 보안 제한 사항인 것 같지만 온라인에서 검색해 본 결과 이와 관련된 내용을 찾을 수 없습니다. 왜 그럴까요? PATH에 추가하거나 루트 .
로 호출하는 것 외에 이 프로그램을 테스트할 수 있는 우아한 방법이 있습니까 make
?
편집: 현재 디렉터리가 PATH에 있어도 작동하지 않습니다.
답변1
setuid 비트가 존중되는지 여부에 영향을 미치는 프로그램을 호출하는 데 사용되는 경로 이름에는 특별한 것이 없습니다. 확실히 여기서는 두 가지 중 하나가 일어나고 있습니다. 누구나
prog
현재 디렉토리 에서 발견된 것과 현재 디렉토리에서 발견된 것은 실제로$PATH
동일 하지 않습니다 . 누구세요prog
prog
틀림없이이것만으로도 ?를 통해prog
동일한 복사본을 찾는 것이 가능해졌습니다.prog
$PATH
- (예외: 동일한 inode이기 때문에 동일한 파일일 수 있지만 다른 마운트 지점을 통해 도착하며 그 중 하나에는 있고
nosuid
다른 하나에는 없는 경우가 있을 수 있습니다.)
- (예외: 동일한 inode이기 때문에 동일한 파일일 수 있지만 다른 마운트 지점을 통해 도착하며 그 중 하나에는 있고
prog
자체적으로argv[0]
그것이 어떻게 호출되었는지 알아보기 위해 문의하고, 기대하는 것을 찾지 못하면 고정된 권한에 대한 조치를 거부합니다(또는 포기합니다).