Как предоставить пользователю права на изменение владельца файлов/каталогов в каталоге

Как предоставить пользователю права на изменение владельца файлов/каталогов в каталоге

Как предоставить конкретному пользователю право изменять права пользователя и группы на файлы и каталоги внутри определенного каталога?

Я сделал поиск в Google и увидел, что существует такая вещь, какsetfacl, что позволяет предоставлять пользователям определенные права на изменение разрешений для файлов и каталогов. Однако, насколько я понял, эта команда не позволяет предоставлять разрешения chown.

Итак, предположим, что файл имеет

user1 user1 theFile1
user1 user1 theDirectory1

Выполнение следующей команды завершится ошибкой.

[user1@THEcomputer]$ chown user2 theFile

У меня есть root-доступ на компьютере. Есть ли способ предоставить пользователю возможность выполнять 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

Итак, как видите, ни один из вариантов не работает.

ОБНОВЛЕНИЕ (ответ на адрес контррежима)

Групповое владение может быть изменено владельцем файла (и root). Однако это ограничено группами, к которым принадлежит владелец.

Да, сначала нужно выйти из системы. Вот результат моей попытки:

[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]$ 

Добавление hts в группу datamover действительно позволяет мне изменить владельца части группы, так что теперь частичный ответ и проверка утверждения.

решение1

Только root имеет право изменять владельца файлов. Достаточно современные версии Linux предоставляют такую CAP_CHOWN​​возможность; пользователь, имеющий такую ​​возможность, может также изменять владельца произвольных файлов. CAP_CHOWNявляется глобальным, после предоставления применяется к любому файлу в локальной файловой системе.

Группа владения может быть изменена владельцем файла (и root). Однако это ограничено группами, к которым принадлежит владелец. Так что если пользователь U принадлежит к группам A, B и C, но не к D, то U может изменить группу любого файла, которым владеет U, на A, B или C, но не на D. Если вы ищете произвольные изменения, то это CAP_CHOWNвыход.

ОСТОРОЖНОСТЬ CAP_CHOWNимеет серьезные последствия для безопасности, пользователь с оболочкой, которая имеет возможность, CAP_CHOWNможет получить привилегии root. (Например, chownlibc для себя, пропатчите своих троянских коней, chownверните его и ждите, пока процесс root его подхватит.)

Поскольку вы хотите ограничить возможность смены владельца определенными каталогами, ни один из доступных инструментов вам не поможет. Вместо этого вы можете написать свой собственный вариант, который chownзаботится о предполагаемых ограничениях. Эта программа должна иметь возможность, CAP_CHOWNнапример

setcap cap_chown+ep /usr/local/bin/my_chown

ОСТОРОЖНОСТЬ Ваша программа, вероятно, будет имитировать настоящую chown, напримерmy_chownuser:group filename(s). Выполняйте проверку ввода очень тщательно. Проверьте, что каждый файл удовлетворяет предполагаемым ограничениям, в частности, следите за мягкими ссылками, которые указывают за пределы границ.

Если вы хотите ограничить доступ к своей программе для определенных пользователей, вы можете либо создать специальную группу, установить групповое владение для my_chownэтой группы, установить разрешения на 0750 и добавить всех пользователей, которым разрешено входить в эту группу. В качестве альтернативы вы можете использовать sudoс подходящими правилами (в этом случае вам также не нужна магия возможностей). Если вам нужна еще большая гибкость, то вам нужно закодировать правила, которые вы имеете в виду, в my_chown.

решение2

Я столкнулся с этой же проблемой и уже использую ACL. Это может не относиться к вашей ситуации, но в моем случае, у определенного пользователя есть доступ на запись в дереве каталогов, а у всех остальных — на чтение, поэтому моя тактика заключается в написании небольшой программы setuid для проверки доступа на запись вызывающего пользователя и разрешения изменять доступ на чтение для других.

Вопрос по обсуждению этого вопроса можно найти здесь:

Как заставить пользователей устанавливать списки контроля доступа для каталогов, которыми они не владеют?

Связанный контент