
특정 사용자에게 특정 디렉터리 내의 파일 및 디렉터리에 대한 사용자 및 그룹 소유권을 변경할 수 있는 권한을 부여하려면 어떻게 해야 합니까?
구글 검색을 해보니 이런 내용이 있더군요.setfacl
, 파일 및 디렉터리에 대한 권한을 변경할 수 있는 특정 권한을 사용자에게 부여할 수 있습니다.. 하지만 내가 읽은 바에 따르면 이 명령은 chown 권한 부여를 허용하지 않습니다.
따라서 파일에 다음이 있다고 가정해 보겠습니다.
user1 user1 theFile1
user1 user1 theDirectory1
다음 명령을 실행하면 실패합니다.
[user1@THEcomputer]$ chown user2 theFile
컴퓨터에 대한 루트 액세스 권한이 있습니다. 사용자가 chown
디렉터리 내에서 명령을 실행할 수 있도록 허용하는 방법이 있습니까 ?
업데이트: 그룹에 사용자를 추가하는 방법.
여기는기사datamover
내가 그룹 에 추가했던 것입니다 hts
.
[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$
업데이트(RuiFRibeiro의 주소 설명):
디렉터리의 소유권을 디렉터리로 변경하면 작동하지 않습니다. 스크린샷을 참조하세요.
[datamover@Venus root]$ ls -la
total 311514624
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 .
drwxr-xr-x 4 root root 4096 Aug 20 16:52 ..
-rwxrwxrwx. 1 datamover datamover 674 Aug 31 16:47 create_files.zip
drwxrwxrwx 2 datamover datamover 4096 Oct 17 17:07 dudi
-rwxrwxrwx. 1 datamover datamover 318724299315 Oct 13 15:47 Jmr400.mov
-rwxrwxrwx. 1 datamover datamover 182693854 Aug 31 16:47 Jmr_Commercial_WithSubtitles.mov
-rwxrwxrwx. 1 datamover datamover 80607864 Aug 31 16:47 Jmr_DataMover_Final.mov
drwxrwxrwx. 2 datamover datamover 122880 Aug 23 11:54 ManyFiles
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 Receive
drwxrwxrwx 2 datamover datamover 4096 Oct 14 13:40 sarah
-rwxrwxrwx 1 datamover datamover 3184449 Oct 14 14:05 SourceGrid_4_40_bin.zip
[datamover@Venus root]$ cd ./Receive/
[datamover@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[datamover@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of './Jmr_Commercial_WithSubtitles.mov': Operation not permitted
다음은 파일 소유자로서의 시도입니다.
[hts@Venus Receive]$ chown datamover:datamover Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of 'Jmr_Commercial_WithSubtitles.mov': Operation not permitted
보시다시피 두 가지 가능성 모두 작동하지 않습니다.
업데이트(주소 카운터 모드의 답변)
그룹 소유권은 파일 소유자(및 루트)에 의해 변경될 수 있습니다. 그러나 이는 소유자가 속한 그룹으로 제한됩니다.
예, 먼저 로그아웃해야 합니다. 내 시도의 결과는 다음과 같습니다.
[hts@Venus ~]$ groups hts
hts : hts wireshark datamover
[hts@Venus ~]$ cd /mnt/DataMover/root/Receive/
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown hts:datamover ./Jmr_Commercial_WithSubtitles.mov
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts datamover 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of ‘./Jmr_Commercial_WithSubtitles.mov’: Operation not permitted
[hts@Venus Receive]$
datamover 그룹에 hts를 추가하면 실제로 그룹 부분의 소유권을 변경할 수 있으므로 이제 해당 설명에 대한 부분 답변 및 유효성 검사가 가능합니다.
답변1
루트만이 파일 소유권을 변경할 수 있는 권한을 갖습니다. 합리적으로 최신 버전의 Linux는 이러한 CAP_CHOWN
기능을 제공합니다. 이 기능이 있는 사용자는 임의 파일의 소유권을 변경할 수도 있습니다. CAP_CHOWN
전역적이므로 일단 부여되면 로컬 파일 시스템의 모든 파일에 적용됩니다.
그룹 소유권은 파일 소유자(및 루트)에 의해 변경될 수 있습니다. 그러나 이는 소유자가 속한 그룹으로 제한됩니다. 따라서 사용자 U가 그룹 A, B, C에 속하지만 D에는 속하지 않는 경우, U는 자신이 소유한 파일의 그룹을 A, B, C로 변경할 수 있지만 D로는 변경할 수 없습니다. 임의 변경을 원하는 경우, 그렇다면 CAP_CHOWN
갈 길은 다음과 같습니다.
주의 CAP_CHOWN
보안에 심각한 영향을 미치므로 기능이 있는 셸을 가진 사용자는 CAP_CHOWN
루트 권한을 얻을 수 있습니다. (예를 들어, chown
libc를 자신에게 설치하고 트로이 목마를 패치한 후 chown
다시 루트 프로세스가 이를 가져올 때까지 기다립니다.)
소유권을 특정 디렉터리로 변경하는 기능을 제한하려고 하므로 쉽게 사용할 수 있는 도구 중 어느 것도 도움이 되지 않습니다. 대신 chown
의도한 제한 사항을 처리하는 자신만의 변형을 작성할 수 있습니다 . 이 프로그램에는 CAP_CHOWN
다음과 같은 기능이 있어야 합니다 .
setcap cap_chown+ep /usr/local/bin/my_chown
주의
귀하의 프로그램은 아마도 정품을 모방할 것입니다 chown
.my_chown
user:group filename(s)
. 입력 검증을 매우 신중하게 수행하십시오. 각 파일이 의도한 제한 사항을 충족하는지 확인하십시오. 특히 경계를 벗어나는 소프트 링크를 주의하십시오.
프로그램 액세스를 특정 사용자로 제한하려면 특수 그룹을 만들고, 그룹 소유권을 my_chown
이 그룹으로 설정하고, 권한을 0750으로 설정하고, 이 그룹에 허용된 모든 사용자를 추가할 수 있습니다. 대안으로 적절한 규칙을 사용할 수도 있습니다 sudo
(이 경우에는 능력 마법도 필요하지 않습니다). 더 많은 유연성이 필요하다면 염두에 두고 있는 규칙을 my_chown
.
답변2
나는 이와 동일한 문제를 겪었으며 이미 ACL을 사용하고 있습니다. 이것은 귀하의 상황에 적용되지 않을 수도 있지만 제 경우에는 특정 사용자가 디렉토리 트리에 대한 쓰기 액세스 권한을 갖고 다른 모든 사용자는 읽기 액세스 권한을 갖고 있으므로 내 전략은 호출하는 사용자의 쓰기 액세스를 확인하고 허용하는 작은 setuid 프로그램을 작성하는 것입니다. 읽기 액세스를 다른 사람에게 변경합니다.
이에 대해 논의하는 질문은 다음과 같습니다.