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

Разрешения Visudo для конкретных файлов

Я пытаюсь интегрировать некоторые сценарии bash в админку сайта.

Задний план

Я запускаю apache на сервере Ubuntu. Предоставление прав sudo для apache (www-data) далеко от идеала, поэтому я не собираюсь. Однако можно указать доступ sudo для пользователей, отличных от sudo.

По ряду причин безопасности apache не должен иметь никакого доступа к sudo или, в худшем случае, иметь строго ограниченный доступ к sudo ... Таким образом, подходящим решением будет указать конкретные сценарии, которые www-data могут sudo.

Чтобы контролировать это, я создал и отредактировал etc/sudoers.tmp с помощью visudo.

Я добавил тестовый сценарий в var/www/html/scripts называется sudoscripts.sh.

Это просто:

#!/bin/sh
sudo whoami

Итак, в качестве теста я добавил строку:

www-data ALL=(ALL) NOPASSWD: ALL

Это работает, как ожидалось. Однако это дает доступ ко всем скриптам в любом месте.

Вопрос

Затем я заменил это на:

www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

Это не дает ошибки (в пределах моего исключения приложения):

sudo: no tty present and no askpass program specified

... то есть: нет доступа к sudo.

Может ли кто-нибудь указать на то, что я сделал не так? Я просмотрел несколько примеров / других потоков переполнения стека, и они либо плохо совпадают, либо остаются без ответа.

редактировать для ясности

Вот полный файл:

Defaults        env_reset
Defaults        exempt_group=sudo
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

# Apache using /var/www/html/scripts

# (doesnt work)
www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

# (works)
# www-data ALL=(ALL) NOPASSWD: ALL

Спасибо

Проблема в том, что вы не выполняете команду, введенную в файл sudoers с помощью sudo.

Ты бежишь /var/www/html/scripts/sudoscript.sh прямо с вашего веб-сервера. Затем сценарий вызывает sudo с whoami, но whoami не допускается в вашем файле sudoers. Вам нужно будет установить whoami в sudoers вместо местоположения скрипта.

Конечно, в этом нет особого смысла.

Что имело бы больше смысла:

/var/www/html/scripts/sudoscript.sh

#!/bin/sh
whoami

/ и т.д. / sudoers

www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

А затем запустите сценарий с помощью sudo со своего веб-сервера:

sudo /var/www/html/scripts/sudoscript.sh

закомментируйте requiretty в visudo или поставьте! перед ним вроде:

По умолчанию! Requiretty