Я хотел бы разрешить пользователям sudo удалять определенные файлы в каталоге / tmp. Я добавил Allow_Cmnd /usr/sbin/userdel
для пользователей sudo, но это не удаляет все файлы / tmp, связанные с пользователем.
Итак, как мне настроить sudoers, чтобы они могли удалять определенные файлы только в каталоге / tmp. Я немного погуглил, но узнал, что здесь может быть регулярное выражение. Я попробовал пару настроек, но у меня это не сработало.
Я бы хотел, чтобы у пользователей была возможность выполнять такие команды, как
find /tmp -uid 10002 | grep joeuser | xargs rm -rf
Лучше всего написать сценарий, который сделает то, что вы хотите. Вы можете выполнить тщательную проверку работоспособности, проверить, делает ли пользователь только то, что ему разрешено, и так далее. И затем разрешить запуск этого сценария только из sudo.
В качестве альтернативы вы также можете разрешить им запускать команду, как вы ее описали: /bin/bash -c "find /tmp -uid 10002
| grep joeuser | xargs rm -rf"
, или даже проще find /tmp -uid 10002
-path \*joeuser\* -delete
.
Как уже указывалось, использование xargs
это не лучшая идея. Вы можете использовать find -print0 | xargs -0
, или моя личная рекомендация: find /tmp -uid 10002 -path \*joeuser\* -depth -exec rm -rf {} +
. Если ваша версия find
не поддерживает +
, вы можете использовать \;
вместо.
Я считаю, что хорошо написанный сценарий будет вашим лучшим вариантом. Однако это действительно зависит от общей цели и от того, насколько хорошо спланирован дизайн ... Вы хотите, чтобы файлы в / tmp, принадлежащие пользователю, выполняющему сценарий, были удалены, или сценарий должен принимать параметры для UID и имени пользователя?
Есть очевидные проблемы с безопасностью, и вам нужно быть очень осторожным. Во время вашего тестирования я не стал бы устанавливать фактическое удаление, но регистрировал (выводил) файлы, которые «были бы» удалены, если бы код удаления был на месте. Затем я бы проверил еще 3 раза, чтобы быть уверенным.
Наконец, другой вариант в зависимости от ваших потребностей - это написать более общий сценарий и запланировать его запуск в определенную дату / время через cron для автоматизации процесса.
Кстати:
/ usr / sbin / userdel - НЕ та команда, которую вы хотите. Это для удаления локальных учетных записей пользователей.
-Брендан