LINUX.ORG.RU

Как переключиться с www-data на другого пользователя и выполнить скрипт с параметрами?

 , , ,


0

1

Имеется весьма капризная консольная программа linphonec, которая умеет работать только от обычных пользователей. Ей для работы нужен каталог пользователя, она стартует только если есть файлы конфигурации:

~/.linphonerc
~/.linphone-zidcache
~/.config/linphone/linphonerc - (кусок GUI-программы, но без него не работает консольная)


Соответственно, запустить такую программу от системного пользователя www-data не представляется возможным. Видимо потому что у него не предусмотрено каталога пользователя, я в этом плохо разбираюсь. Поэтому нужно переключиться на пользователя, под которым она гарантированно работает, и выполнить ее. В моем случае это пользователь xi.

Точнее, надо выполнить не эту программу, а PHP-скрипт, в котором используются вызовы linphonec. Причем скрипт имеет параметры. И выполнить такой скрипт надо без запроса пароля пользователя xi. Сами вызовы скрипта выглядят примерно так:

php myScript.php sipnet.ru 0045123 notify
php myScript.php siplink.pro 9812345 about


Я поигрался с настройками в /etc/sudoers, и прописал там:

www-data ALL = (xi:xi) NOPASSWD:/usr/bin/php
vasya ALL = (xi:xi) NOPASSWD:/usr/bin/php


Пользователя vasya я завел чтобы тестить запуск. Для теста я работаю под пользователем vasya.

В результате, я могу вызывать саму команду php:

sudo -u xi "php"


И она выполняется без запроса пароля. Но если я задам хоть один параметр, то команда не выполняется, и еще требуется пароль текущего пользователя. Например:

$ sudo -u xi "php --version"
[sudo] пароль для vasya: 
sudo: php --version: command not found


Вместо «php --version» я пробовал писать «/usr/bin/php --version», результат тот же.

Я так понимаю, что это происходит из-за того, что в sudoers можно настроить только вполне конкретные вызовы программ. А если у программ есть параметры, то в sudoers надо прописывать именно с параметрами, чтобы не запрашивался пароль. Но ведь невозможно прописать в sudoers все возможные значения параметров, они же заранее неизвестны.

В связи с чем вопрос: как выполнить скрипт с параметрами, от другого пользователя, не вводя пароль?

★★★★★

$ sudo -u xi «php --version»

кавычки лишние

annerleen ★★★★★ ()

Видимо потому что у него не предусмотрено каталога пользователя

Разве? Разве что /dev/null может быть прописан, но можно и поменять.

Для suid обычно обертки писались. У sudoers были примитивные шаблоны, вроде, но почти всегда они открывают огромную дырень.

boowai ★★★★ ()

Видимо потому что у него не предусмотрено каталога пользователя, я в этом плохо разбираюсь.

Ты серьезно? В /etc/passwd предусмотри ему домашний каталог руками. Звезды нафлудил?

xaTa ★★★ ()

а не проще все это в bash скрипт засунуть и дать право выполнение скрипта без пароля в sudoers?

sanekmihailow ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.