사용자 A가 B를 대신하여 B의 파일을 삭제하도록 하는 방법은 무엇입니까?

사용자 A가 B를 대신하여 B의 파일을 삭제하도록 하는 방법은 무엇입니까?

A와 B는 모두 동일한 그룹의 루트가 아닌 사용자입니다. B가 회귀를 실행한 후 B가 소유한 일부 정크 파일이 디렉터리에 생성되지만(또한 B가 생성하고 소유함) B의 회귀가 종료되고 정리가 제대로 수행될 수 없는 경우 정리 작업을 수행하려면 A가 필요하다고 가정합니다.

내가 아는 가장 쉬운 방법은 회귀 전에 B를 umask 0002로 설정하는 것이지만 불행히도 회귀 도구는 어떻게든 이 설정을 무시하고 B만 쓸 수 있는 가비지 파일을 생성합니다.

그래서 이 문제를 해결하기 위해 suid 함수를 사용해 보았습니다.

데모 디렉토리는 다음과 같습니다

/proj/ttt> ll
total 0
-rw-r--r-- 1 B users  0 Mar 16 00:50 garbage.file

정크 파일을 정리하기 위해 B가 소유한 스크립트(정리)를 생성하려고 합니다.

#!/bin/bash
# cleanup
echo EUID=$EUID UID=$UID
rm -f garbage.file

그런 다음 "chmod ug+s cleanup"을 사용하여 스크립트에 suid를 추가했습니다. 디렉토리는 다음과 같습니다.

/proj/ttt> ll
total 0
-rwsr-sr-x 1 B users 57 Mar 16 00:50 cleanup
-rw-r--r-- 1 B users  0 Mar 16 00:50 garbage.file

또한 상위 디렉토리에 "s" 비트를 추가했습니다.

drwsr-sr-x 2 B users 4096 Mar 16 00:57 ttt

그런데 이 스크립트를 A로 실행하면 's' 비트가 작동하지 않아 A가 정크 파일을 삭제할 수 없는 것 같습니다.

/proj/ttt> ./cleanup   # executed by A
EUID=25264 UID=25264   # user B's uid is 25220, user A's uid is 25264
rm: cannot remove `garbage.file': Permission denied

내 시도에 어떤 문제가 있는지, 아니면 이 접근 방식이 궁극적으로 효과가 있을지 확신할 수 없나요?

아니면 이 작업을 수행하는 다른 더 좋은 방법이 있습니까?

답변1

표준 접근 방식은 새 그룹을 만들고 해당 그룹의 A와 B 구성원을 모두 만든 다음 문제의 모든 파일(또는 삭제하려는 경우 최소한 디렉터리)이 해당 그룹에 속하고 있는지 확인하는 것입니다. 적절한 권한. 그룹 권한.

그룹을 권한 집합의 "규칙"으로 생각하십시오. 각 특수 규칙에는 일반적으로 그룹을 생성해야 합니다.

올바른 그룹 소유권을 적용하는 한 가지 방법은 해당 그룹에 속하는 적절한 디렉터리에 setgid(그룹) 비트를 설정하는 것입니다. 그러면 이 디렉터리에 생성된 모든 파일이 자동으로 해당 그룹에도 속하게 됩니다. 당신은 이렇게 하려고 노력하지만, 그것이 당신의 의도인지는 잘 모르겠습니다. 디렉토리에는 setuid(사용자) 비트를 설정할 수 없습니다.

절대적으로 필요한 경우가 아니면 setuid 실행 파일의 사용은 일반적으로 권장되지 않습니다. 이 경로로 가고 싶다면 일부 sudoer항목이 더 나을 수도 있습니다.

관련 정보