Почему sudoers позволяет мне устанавливать NOPASSWD для ALL?

Моя ситуация такова: я пытаюсь дать пользователю www-данных возможность sudo-выполнять некоторые сценарии оболочки, чтобы на моем веб-сервере была страница, отображающая системную информацию (в PHP с использованием shell_exec () ). С этой целью я отредактировал файл sudoers со следующей строкой

www-data ALL=(ALL:ALL) NOPASSWD: /home/evermind/scripts/*

, чтобы дать Apache возможность запускать сценарии в этом каталоге без необходимости ввода пароля для suoo. К сожалению, это не работает, а также (как проверка работоспособности) не определяет специфический скрипт в этом каталоге. shell_exec не может выполнить команду и выдает следующую ошибку:

sudo: отсутствует tty и не указана программа askpass

Здесь все становится ... странно. Если я заменю спецификацию пути на «ВСЕ», то все работает отлично. Почему это? Есть ли причина, по которой я не могу указать NOPASSWD для отдельных файлов или каталогов?

Из соображений безопасности я крайне сомневаюсь, чтобы разрешить без www-данных свободно управлять всем, даже если веб-приложение чрезвычайно безопасно и существует. неочевидный способ, которым кто-либо может выполнять произвольные команды.

1
задан 12 November 2016 в 22:10

3 ответа

Как насчет того, чтобы добавить просто использование пути к каталогу без подстановочного знака?

www-data ALL=(ALL:ALL) NOPASSWD: /home/evermind/scripts/

Согласно страница справочника sudoers :

A Cmnd_List is a list of one or more
commandnames, directories, and 
other aliases. ... A directory is a fully 
qualified path name ending in a '/'. 
When you specify a directory in a 
Cmnd_List, the user will be able to 
run any file within that directory (but 
not in any subdirectories therein).
2
ответ дан 12 November 2016 в 22:10

Хорошо, после продвижения далеко от проблемы в течение дня и возвращения к нему, я, кажется, более или менее решил свою собственную проблему.

Ранее, терминальная команда я выполнялся через shell_exec (), был

sudo sh <path to my script>

Сегодня, более или менее ради просто попытки что-то , я chmod'd мой сценарий для создания этого исполняемым файлом непосредственно. Затем я изменил shell_exec () строка, чтобы быть

sudo <path to my script>

И voilГ, это начало работать. Логика, казалось бы, предположила бы, что преступник был на самом деле sh служебным объявлением, так как это было ключевым различием в командах. Если кто-либо будет знать то, чем соглашение с этим было, тем не менее, то мне действительно будет интересно знать.

2
ответ дан 12 November 2016 в 22:10

Идеально, если Вы настраиваете, какие команды могут быть выполнены через sudo, необходимо вносить эти изменения в отдельном файле под /etc/sudoers.d/ вместо того, чтобы редактировать sudoers файл непосредственно. Необходимо также всегда использовать visudo для редактирования файла (файлов). Вы никогда не должны предоставлять NOPASSWD на ALL команды.

Пример: sudo visudo -f /etc/sudoers.d/myWebScript

Вставляют Ваш разрешения предоставления строки: www-data ALL= NOPASSWD: /home/evermind/scripts/

способ, которым Вы называли его, если бы Вы хотели ограничить, конкретно к каталогу для sh, Вы использовали бы: www-data ALL= NOPASSWD: /bin/sh /home/evermind/scripts/

я не уверен, почему эти сценарии потребовали бы sudo доступ, обычно Вы могли всего chmod o+x scriptname.sh и удостоверяться, что они были в каталоге, принадлежавшем www-data пользователь.

Затем сохраняют и выходят, и visudo предупредит Вас, если у Вас будут какие-либо синтаксические ошибки.

можно работать sudo -l для наблюдения полномочий, которые предоставили пользователя, если какой-либо пользователь, конкретный NOPASSWD, команды появятся то ПЕРЕД любым %groupyouarein ALL=(ALL) ALL команда в выводе Вам предложат Ваш пароль.

при нахождении большого количества этих sudoers.d файлов затем, возможно, Вы захотите создать их названный на пользователя, таким образом, их будет легче визуализировать. Следует иметь в виду, что упорядочивание ИМЕН ФАЙЛОВ и ПРАВИЛ в файле очень важно, ПОСЛЕДНИЙ загрузил победы, является ли это БОЛЕЕ ИЛИ МЕНЕЕ разрешающим, чем предыдущие записи.

можно управлять упорядочиванием имени файла при помощи префикса 00-99 или aa/bb/cc, хотя также имеют в виду, что, если у Вас есть КАКИЕ-ЛИБО файлы, которые не имеют числового префикса, они загрузятся после пронумерованных файлов, переопределяя настройки. Это вызвано тем, что в зависимости от Ваших настроек языка "лексическая сортировка" оболочки использует числа видов сначала и затем может чередоваться верхний и строчный при сортировке в "возрастающем" порядке.

Попытка, работающая printf '%s\n' {{0..99},{A-Z},{a-z}} | sort и printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort, чтобы видеть, печатает ли Ваш текущий язык AaBbCc и т.д. или ABC затем abc для определения, что лучший "последний" префикс буквы, который будет использовать, был бы.

0
ответ дан 12 November 2016 в 22:10

Другие вопросы по тегам:

Похожие вопросы: