изменено право собственности на папки пользователем, определенным в файле sudoers

Вопрос или проблема

У меня есть следующий простой скрипт, который меняет владельца на папках:

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. Несмотря на предоставление этому пользователю прав суперпользователя, операция изменения прав доступа сталкивается с проблемами, связанными с ограничением операционной системой.

Причины и решения

Почему возникают проблемы с правами доступа:

  1. Контекст прав доступа: Права, указанные в /etc/sudoers для super_hola, предполагают, что пользователь может выполнять команды от имени суперпользователя без необходимости вводить пароль. Однако, если вы запускаете скрипт как su super_hola и затем пытаетесь использовать sudo -u super_hola, вы на самом деле не передаете права root, необходимые для изменения системного уровня владельца и разрешений на файлы, которые не принадлежат super_hola.

  2. Атрибуты файлов: Некоторые файлы могут иметь атрибуты, которые запрещают изменение прав доступа, даже если скрипт запускается с достаточными привилегиями.

Решение проблемы:

  1. Запуск скрипта от имени root:

    • Запустите скрипт непосредственно от имени root без переключения на super_hola:
      sudo ./hola_config.sh
    • Это гарантирует выполнение всех команд скрипта с полным доступом root, что необходимо для изменения владельцев и разрешений на любые файлы и каталоги.
  2. Убедиться в отсутствии ограничений на файлы:

    • Проверьте и удалите любые специфические атрибуты, которые могут помешать изменению прав:
      sudo chattr -i /home/darna/linux.cvg
  3. Изоляция окружения sudo:

    • Поскольку вы используете super_hola для выполнения скрипта с правами root, убедитесь, что скрипт запускается именно через sudo и не через комбинацию su:
      sudo -u root ./hola_config.sh
  4. Логи и диагностика:

    • Проверьте системные логи для определения конкретных ошибок или ограничений, связанных с неудачной попыткой смены прав:
      dmesg | tail

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...