왜 chown
명령이 루트 전용입니까? 루트가 아닌 사용자가 chown을 사용하여 소유 한 파일을 제공 할 수없는 이유는 무엇입니까?
chown
을 제공 하는 데 사용할 수 없는가하는 것 입니다. (파일 시스템 구성에 따라 가능한 시스템을 보았습니다.)
왜 chown
명령이 루트 전용입니까? 루트가 아닌 사용자가 chown을 사용하여 소유 한 파일을 제공 할 수없는 이유는 무엇입니까?
chown
을 제공 하는 데 사용할 수 없는가하는 것 입니다. (파일 시스템 구성에 따라 가능한 시스템을 보았습니다.)
답변:
대부분의 유닉스 시스템은 사용자가 파일을 "주지"못하게합니다. 즉 chown
, 대상 사용자 및 그룹 권한이있는 사용자 만 실행할 수 있습니다 . 사용 chown
하려면 파일을 소유하거나 루트가되어야 하므로 (사용자는 다른 사용자의 파일을 적절하게 사용할 수 없음) 루트 만 실행 chown
하여 파일 소유자를 다른 사용자로 변경할 수 있습니다 .
이 제한의 이유는 다른 사용자에게 파일을 제공하면 흔하지는 않지만 여전히 중요한 상황에서 나쁜 일이 발생할 수 있기 때문입니다. 예를 들면 다음과 같습니다.
chown
을 만든 다음 다른 사람이 해당 세계 기록 가능한 파일에 액세스 할 수 없으므로 다른 사용자 Bill이 해당 파일을 소유하도록 실행할 수 있습니다. 그러면 Alice 만 파일을 사용할 수 있지만 파일은 Bill의 디스크 할당량으로 계산됩니다./bin/bash
하여 설정 한 다음 chown
원하는 사람에게 배포 할 수 있다는 것입니다. 이제 그들은 그 사람으로서 쉘 액세스 권한을 갖습니다.
chown
항상 setuid 및 setgid 비트를 지 웁니다.
drwxr-xr-x ring0 ring0 .
) 어떤 루트 (일반 파일이 -rw-r--r-- root root file
) 내가 할 수없는 이유, chown ring0 file
그것 때문에 어쨌든로, 할 수있다 ring0
, cp file x ; rm file ; mv x file
(일부 옵션 touch sometime file
...)?
Linux에서는 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으로
명령을 실행할 수 있지만 루트가 아닌 경우 작동하지 않습니다. 쉽다 : 소프트웨어를 루트 사용자로 변경할 수있는 사용자를 상상해보십시오. 그것은 setuid 비트를 추가 할 수 있으며, 그 사람은 루트입니다! 따라서 사용하면 chmod를 사용하여 비트를 추가 할 수 있지만 파일 소유자를 변경할 수는 없습니다.