Вопрос или проблема
У меня есть следующий простой скрипт, который меняет владельца на папках:
more hola_config.sh
#!/bin/bash
chown -R hola:pola /home/darna
chmod -R 775 /home/darna
в /etc/sudoers я добавил следующее (пользователь super_hola как суперпользователь):
super_hola ALL=(ALL) NOPASSWD:ALL
но когда я запускаю скрипт как
su super_hola
whoami
super_hola
sudo -u super_hola ./hola_config.sh
я получаю сообщение “Operation not permitted” от chmod в скрипте
Пример:
chmod: changing permissions of ‘/home/darna/linux.cvg: Operation not permitted
вопрос в том,
почему суперпользователь super_hola
не может изменить права, как пользователь root,
и что нужно исправить в моей конфигурации, чтобы пользователь super_hola
мог это сделать
вот идентификаторы пользователя и группы:
id super_hola
uid=1001(super_hola) gid=1001(pola) groups=1001(pola),982(docker)
grep super_hola /etc/group
docker:x:982:super_hola
id -G super_hola
1001 982
Если вы хотите изменить владельца файлов или права для файлов, которые вам не принадлежат, вам нужно запускать скрипт от имени пользователя root.
Как пользователь root, скрипт должен запускаться с ./hola_config.sh
.
Как пользователь super_hola
, он должен запускаться с sudo ./hola_config.sh
.
Если вы уже root, нет смысла становиться super_hola
.
Нет смысла запускать скрипт как super_hola
с использованием sudo -u super_hola ./hola_config.sh
, так как вы уже являетесь этим пользователем (и этот пользователь не имеет разрешения на внесение необходимых изменений в любом случае).
Ответ или решение
Ваша ситуация связана с использованием скрипта для изменения прав собственности и разрешений на каталоги через пользователя super_hola
, указанного в файле /etc/sudoers
. Несмотря на предоставление этому пользователю прав суперпользователя, операция изменения прав доступа сталкивается с проблемами, связанными с ограничением операционной системой.
Причины и решения
Почему возникают проблемы с правами доступа:
-
Контекст прав доступа: Права, указанные в
/etc/sudoers
дляsuper_hola
, предполагают, что пользователь может выполнять команды от имени суперпользователя без необходимости вводить пароль. Однако, если вы запускаете скрипт какsu super_hola
и затем пытаетесь использоватьsudo -u super_hola
, вы на самом деле не передаете права root, необходимые для изменения системного уровня владельца и разрешений на файлы, которые не принадлежатsuper_hola
. -
Атрибуты файлов: Некоторые файлы могут иметь атрибуты, которые запрещают изменение прав доступа, даже если скрипт запускается с достаточными привилегиями.
Решение проблемы:
-
Запуск скрипта от имени root:
- Запустите скрипт непосредственно от имени root без переключения на
super_hola
:sudo ./hola_config.sh
- Это гарантирует выполнение всех команд скрипта с полным доступом root, что необходимо для изменения владельцев и разрешений на любые файлы и каталоги.
- Запустите скрипт непосредственно от имени root без переключения на
-
Убедиться в отсутствии ограничений на файлы:
- Проверьте и удалите любые специфические атрибуты, которые могут помешать изменению прав:
sudo chattr -i /home/darna/linux.cvg
- Проверьте и удалите любые специфические атрибуты, которые могут помешать изменению прав:
-
Изоляция окружения sudo:
- Поскольку вы используете
super_hola
для выполнения скрипта с правами root, убедитесь, что скрипт запускается именно черезsudo
и не через комбинациюsu
:sudo -u root ./hola_config.sh
- Поскольку вы используете
-
Логи и диагностика:
- Проверьте системные логи для определения конкретных ошибок или ограничений, связанных с неудачной попыткой смены прав:
dmesg | tail
- Проверьте системные логи для определения конкретных ошибок или ограничений, связанных с неудачной попыткой смены прав:
Заключение
Ваша задача — использовать правильный контекст и уровень привилегий для выполнения задач, связанных с изменением системных файлов. Важно запускать скрипты, требующие таких привилегий, в окружении, обеспечивающем полный доступ к необходимым ресурсам. Всегда проверяйте и корректируйте ваши административные настройки для обеспечения безопасности и функциональности.