일반 사용자가 파일을 "chown"할 수 없는 이유는 무엇입니까?

일반 사용자가 파일을 "chown"할 수 없는 이유는 무엇입니까?

chown명령을 루트 사용자만 사용할 수 있는 이유는 무엇입니까? 루트가 아닌 사용자가 chown을 사용하여 자신이 소유한 파일을 삭제할 수 없는 이유는 무엇입니까?

답변1

대부분의 Unix 시스템은 사용자가 파일을 "유출"하는 것을 방지합니다. 즉, chown대상 사용자 및 그룹의 권한이 있는 경우에만 파일을 실행할 수 있습니다. 사용 chown하려면 파일을 소유하거나 루트여야 하기 때문에 (사용자는 다른 사용자의 파일을 점유할 수 없음) 루트만이 chown파일 소유자를 다른 사용자로 변경할 수 있습니다.

이러한 제한을 적용하는 이유는 파일을 다른 사용자에게 제공하면 드물지만 여전히 중요한 상황에서 나쁜 일이 발생할 수 있기 때문입니다. 예를 들어:

  • 시스템에 디스크 할당량이 활성화되어 있으면 Alice는 자신만 액세스할 수 있는 디렉터리에 누구나 쓰기 가능한 파일을 생성한 다음(다른 사람은 누구나 이 파일에 액세스할 수 없음) 실행하여 chown다른 사용자가 파일을 소유하도록 할 수 있습니다. 청구서. Alice만이 파일을 사용할 수 있더라도 해당 파일은 Bill의 디스크 할당량에 포함됩니다.
  • Alice가 Bill에게 파일을 전달하면 Bill이 파일을 생성하지 않았다는 흔적은 없습니다. 파일에 불법적이거나 유해한 데이터가 포함되어 있으면 문제가 될 수 있습니다.
  • 일부 프로그램에서는 요청을 검증하기 위해 입력 파일이 특정 사용자에게 속해야 합니다(예를 들어, 파일에는 프로그램이 해당 사용자를 대신하여 실행할 일부 지침이 포함되어 있습니다). Bill이 구문적으로 올바른 지침이 포함된 파일을 생성하더라도 이 특정 시간에 해당 명령을 실행할 의도가 없을 수 있으므로 이는 일반적으로 안전한 설계가 아닙니다. 하지만 Alice가 Bill에 대한 입력으로 임의의 콘텐츠가 포함된 파일을 생성하도록 허용하면 상황이 더욱 악화될 뿐입니다.

답변2

Linux에서는 chown을 수행하려면 CAP_CHOWN 기능이 필요합니다. 루트에는 그러한 권한이 부여됩니다. 인용하다: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html 설명을 위해. CAP_CHOWN 기능을 제공하려는 경우 다음과 같이 libcap-ng 또는 libcap을 사용하여 코드를 빌드하십시오. http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html CAP_AUDIT_WRITE를 CAP_CHOWN으로 바꾸면 됩니다.

답변3

명령을 실행할 수 있지만 루트가 아닌 경우에는 작동하지 않습니다. 간단합니다. 소프트웨어를 루트로 변경할 수 있는 사용자를 상상해 보세요. setuid 비트를 추가하면 짜잔, 이 사람이 루트입니다! 따라서 사용자는 chmod를 사용하여 비트를 추가할 수 있지만 파일 소유자를 변경할 기회는 없습니다.

관련 정보