Мы хотим дать пользователю привилегии root.
Пользователь может запускать команды chown и chmod для определенных файлов или каталогов.
Как это можно допустить?
Вариант № 1
Вы можете использовать групповое владение и setgid каталоги.
Это позволяет каждому члену группы каталогов выполнять запись в каталог [PATH], а файлы, созданные в этом каталоге, будут принадлежать группе [PATH] вместо основной группы пользователя, создавшего файл.
# chgrp [GROUP] [PATH] # chmod g+ws [PATH]
Вариант № 2
1. Настройте списки контроля доступа для файлов в разделе [PATH].
Прежде чем использовать ACL для файла или каталога, раздел, содержащий файл / каталог, должен быть смонтирован с поддержкой ACL.
Например, если это локальная файловая система ext3, ее можно смонтировать с помощью следующей команды:
# mount -t ext3 -o acl [DEVICE] [PATH] 1 2
Где,
– DEVICE: устройство, на котором находится каталог / файл (т.е. /dev/volgroup/logvolume)
– PATH: Путь к нужному каталогу / файлу
2. Если раздел уже указан в файле /etc/fstab, то для доступа к acl можно указать следующее:
# vim /etc/fstab ... LABEL=[PATH] [PATH] ext3 acl 1 2
3. Сделайте все новые файлы в нужном каталоге доступными для группы [GROUP]:
# groupadd [GROUP] # chgrp [GROUP] [PATH]
4. Теперь дайте дополнительные разрешения [PATH], чтобы пользователи могли получать доступ и редактировать файлы в каталоге:
# setfacl -m g:[GROUP]:rwx [PATH]
5. Проверьте права доступа группы:
# getfacl [PATH]
6. Теперь сделайте нужного пользователя членом [GROUP]:
# usermod -a -G [GROUP] [USER]
7. Проверьте права пользователя:
# id [USER]
ПРИМЕЧАНИЕ. Вы можете установить списки ACL для каждого пользователя, но зачастую проще объединить пользователей, которые должны иметь определенные права на часть файловой системы, в группу и установить ACL для этой группы. Например, пользователи в группе [GROUP] должны иметь права на чтение и запись в каталог [PATH]:
# setfacl -d -m group:[groupname]:rwx [PATH] setfacl -m group:[groupname]:rwx [PATH]
Вариант № 3
1. Вы можете ограничить использование команды [USER] всеми аргументами в файле /etc/sudoers.
Это будет сделано с помощью команды visudo.
Например, разрешите [USER] chmod каталогу [PATH], а chmod 755 каталогу [PATH.2]
# visudo [USER] ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] [PATH]*,/bin/chown [USER]:[GROUP] [PATH]*,/bin/chmod 755 [PATH.2]*.txt
2. Также предлагается включить ведение журнала для каждой операции, добавив:
Defaults logfile=/var/log/sudo.log
Пример вывода
# su - [USER] $ sudo /bin/chmod 755 [PATH] $ sudo /bin/chmod 755 [PATH]* $ sudo /bin/chmod 777 [PATH.2]*.txt Sorry, user myuser is not allowed to execute '/bin/chmod 777 [PATH.2]*.txt' as root on myhost.mydomain. $ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt
Вариант № 4
1. Создайте скрипт Bash (или оболочку по вашему выбору), чтобы ограничить изменения, сделанные в конкретном файле или каталоге.
Например, чтобы добавить разрешения rwx в группу: user: other, выполните следующие действия:
$ vi /usr/local/bin/mychmod #!/bin/bash $ chmod 777 [PATH]
2. Затем вы измените файл sudoers, чтобы пользователь мог выполнить /usr/local/bin/mychmod.
Имейте в виду, однако, что разрешить ввод данных пользователем (например, позволить пользователю изменять, какой файл или каталог chmodded) в это пространство чрезвычайно опасно, и вам нужно знать, как отфильтровать атаки с использованием инъекций, если вы хотите сделать что-то подобное.
Злоумышленник может легко выполнить любую команду от имени root таким образом, эффективно нарушая безопасность вашей системы.
ПРЕДУПРЕЖДЕНИЕ. При настройке этих разрешений предполагается, что это доверенный человек. Будьте осторожны с правами доступа к файлам, так как нет прямого способа остановить атаки злонамеренных пользователей sudo.