나는 chown을 마음대로 사용할 수 없다는 것을 이미 알고 있습니다.일반 사용자로서user1
하지만 내 경우에는 두 명의 사용자가 있습니다. Sudoers 파일을 사용하면 user2
as에서 sudo를 사용할 수 있습니다.user1
user2
user1
아직도 파일 소유권을 부여하는 데 문제가 있습니까 user2
?
지금까지 내가 생각해낸 최선의 방법은 다음과 같습니다 user1
.
user1@localhost$ sudo --user user2 cp fileOwnedByUser1 /tmp/fileOwnedByUser1
user1@localhost$ rm fileOwnedByUser1
user1@localhost$ sudo --user user2 mv /tmp/fileOwnedByUser1 fileOwnedByUser1
그러나 이는 서투르고 비효율적인 것 같습니다. user1
이를 수행하는 더 좋은 방법이 있습니까 ? 지금까지 내가 생각한 유일한 것은 user1
파일에서 루트로 "chown"을 실행하는 것 입니다 Sudoers
.
답변1
user1이 sudo를 통해 user2로 명령을 실행할 수 있다는 사실은 커널의 하위 수준 파일 권한 결정에 중요하지 않습니다. 루트용으로 예약되어 있습니다 chown
(Linux도 이 기능을 가진 프로세스를 허용 CAP_CHOWN
하지만 프로세스에 이 기능을 제공하는 것은 간접적으로 루트 권한을 부여하는 것과 동일하므로 도움이 되지 않습니다).
chown
user1이 user2에 속한 파일을 호출할 수 있도록 허용하는 sudo 규칙(아마도 작은 래퍼 스크립트 사용)을 작성할 수 있습니다 . 문제는 파일 소유권 확인과 호출 사이에 경쟁 조건이 있기 때문에 이것이 안전하지 않다는 것입니다 chown
. user1(또는 디렉터리 권한에 따라 세 번째 사용자)이 확인과 작업 사이에 다른 파일을 대체할 수 있습니다.
다음을 사용하는 작은 프로그램을 작성할 수 있습니다.fchown
시스템 호출: 파일을 열고, 호출하고 lstat
, 현재 소유권을 확인하고, 모두 정상이면 호출합니다 fchown
. 여기서는 확인과 작업이 동일한 파일 핸들에서 수행되므로 파일 대체의 위험이 없습니다.