Назад | Перейти на главную страницу

Есть ли способ разрешить команду в sudo на основе текущего рабочего каталога?

Я хочу, чтобы sudo позволял мне запускать команду, когда мой текущий рабочий каталог, например, / tmp. Пример использования - удаление файлов из каталога / tmp, поэтому я нахожусь в / tmp ($ PWD оболочки == / tmp), тогда я могу запустить rm -v someuseless.bin (someuseless.bin, конечно, не принадлежит мне, поэтому Я не могу его удалить). Если это невозможно (я не могу найти ссылки в руководствах по sudo), то почему? Может быть, есть нарушение безопасности, которого я здесь не заметил. Спасибо.

Вы определенно можете встроить $cwd в sudoers, чтобы позволить кому-то удалить файл только в определенном каталоге, но вы ошибаетесь в этом. Способ делать то, что вы хотите, - использовать абсолютные пути в sudoers, например

orc       ALL=(ALL) /bin/rm /tmp/someuseless.bin

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

/usr/local/bin/cwddostuff.sh:

#!/bin/sh

if [ "$CWD" != "/tmp" ]; then
   exit 1
fi

echo do your stuff

/ etc / sudoers:

user       ALL=(ALL) /usr/local/bin/cwddostuff.sh

Но остерегайтесь делать это опасно, так как теперь вам нужно также проверить, все ли аргументы в порядке (например, пользователь может находиться в / tmp, но запустить 'rm -rf /').

Лучший способ - это сделать, как сказал MadHatter, явно добавить пути, которые пользователю разрешено удалять, или, как предложил Квайо, установить ACL для каталогов.