Как я получаю простые сценарии, которые, кажется, должны базироваться priveliges для выполнения через www-пользователя-данных?

Я использую ядро BIGMEM на Debian, сжимают. Я использовал non-BIGMEM ядро прежде также. Я не знаю ни о каких проблемах или глюках, и никакие изменения в системе не необходимы при переключении между BIGMEM и non-BIGMEM ядром. Конечно, только необходимо использовать ядро BIGMEM при выполнении ядра на 32 бита. Если Вы имеете какие-либо определенные проблемы, упоминаете их в вопросе.

2
14.07.2016, 14:04
2 ответа

мой ответ только связан со строкой

sudo jupiter=(ALL)NOPASSWD:/bin/<script>

С этой строкой Вы позволяете пользователю sudo работать /bin/<script> на хосте juptier как любой пользователь без аутентификации. Я не думаю, что Вы хотите это.

Если я понял правильно, что Вы хотите пользователя www-data выполниться /bin/<script> как корень. В этом случае соответствующая строка похожа

www-data jupiter=(root) NOPASSWD:/bin/<script>

Теперь можно выполниться /bin/<script> как www-data с root полномочия путем вызова

www-data:~ $ sudo /bin/<script>

или через shell_exec("sudo /bin/<script>") в Вашем сценарии PHP (я надеюсь, что Вы заботились о проблемах безопасности).

Для получения дальнейшей информации посмотрите на man sudoers или интерактивная версия sudoers.man. Для быстрого понимания я рекомендую смотреть на EXAMPLES раздел.

2
27.01.2020, 22:15
  • 1
    Спасибо за указание на мою ошибку. Я исправил sudoers файл. Однако я теперь получаю сообщение sudo: no tty present and no askpass program specified. BTW: Я забыл % в своем первом сообщении. –  skiddo 11.09.2012, 14:45
  • 2
    Возможно, requiretty установлен в Вашем /etc/sudoers? Для получения дополнительной информации посмотрите man sudoers также. –  user1146332 11.09.2012, 14:55
  • 3
    requiretty не установлен, но был 'символ в моем etc/sudoers, потому что я забыл редактировать его с visudo. Это работает теперь.Спасибо. –  skiddo 11.09.2012, 16:14

Есть несколько способов ...

  • используйте sudo, как уже было описано
  • настройте Apache с функцией suEXEC (может быть, не вариант с php?)
  • используйте небольшую программу setuid, которая затем вызывает ваш код
  • и многое другое ...

Самым простым, вероятно, является использование sudo, и это уже было описано.

Краткое описание параметра sudo:

  1. убедитесь, что в / etc / sudoers нет «Defaults requiretty»
  2. добавьте эту строку в этот файл «apache ALL = NOPASSWD: / path / to / command» , что означает, что «sudo / path / to / command something» будет запускаться от имени пользователя root, если вызывается как apache. (Предполагается, что ваш веб-сервер работает как пользователь apache.)

Однако, если вы это сделаете, позвольте мне указать на опасность всего этого. Любой, кто может получить доступ к вашей странице, может делать все, что он должен делать - поэтому с помощью userdel они могут удалять пользователей (и, возможно, все их файлы), и в зависимости от того, как написан код, они могут обмануть его, позволив им запускать любую произвольную команду от имени root.

(Теперь при правильной настройке sudo может ограничивать их действия, как и правильно написанная программа (хотя написание безопасных setuid, CGI и php (которые используют shell_exec (), как и вы) может быть сложной задачей), но userdel может быть довольно разрушительным само по себе.)

Итак ...если вы это сделаете, по крайней мере убедитесь, что sudo (если вы используете sudo) настроен для запуска только тех команд, которые абсолютно необходимо запустить, и убедитесь, что ваша страница недоступна для всех - заблокируйте ее за пароль в Apache, например, и будьте особенно осторожны, если он находится непосредственно в Интернете, а не за корпоративным брандмауэром (но даже в этом случае - не доверяйте брандмауэру, чтобы он был безопасным). Также убедитесь, что другие люди, которым не доверяют, могут Не добавляйте программы php или CGI на этот хост, потому что они также смогут использовать эту строку в / etc / sudoers.

Поскольку вы используете php shell_exec (), будьте очень осторожны с аргументами, которые ваш код передает этой команде. Если вы позволите пользователю помещать туда все, что он хочет, он может заставить это делать все, что угодно.

Предположим, ваша команда - «userdel $ user» и $ user пришла непосредственно от пользователя этой веб-страницы. Если user = "foo; reboot". Если бы это было запущено от имени root ... ваш компьютер перезагрузился бы. Но даже если он не запускается от имени root, он может запускать код от имени пользователя apache, который может попытаться проникнуть в машину.

Тем не менее, как правильно дезинфицировать вводимые данные - это более длинная тема, чем на самом деле позволяет этот простой ответ - я не пытаюсь охватить эту тему целиком, просто коснусь ее.

0
27.01.2020, 22:15

Теги

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