![파일 소유권을 한 사용자에서 첫 번째 사용자가 제어하는 다른 사용자로 변경합니다.](https://linux55.com/image/74555/%ED%8C%8C%EC%9D%BC%20%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84%20%ED%95%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90%EC%84%9C%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EC%A0%9C%EC%96%B4%ED%95%98%EB%8A%94%20%E2%80%8B%E2%80%8B%EB%8B%A4%EB%A5%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EB%8B%A4..png)
나는 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
. 여기서는 확인과 작업이 동일한 파일 핸들에서 수행되므로 파일 대체의 위험이 없습니다.