Программа PHP, с которой я работаю (LConf) вызывает скрипт, используя sudo
.
Я разрешил пользователю apache
для запуска скрипта и протестировали с sudo -u apache /usr/local/LConf/lconf_deploy.sh
.
Меня запрашивают пароль, когда lconf_deploy.sh
звонки /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
, но у вас нет проблем с вызовом линий до или после этой линии.
Прочитав много (как на stackexchange, так и в других местах в Интернете) о том, что делать в этой ситуации, я отключил requiretty
и использовал NOPASSWD
за все, что я могу придумать, что влияет на эту ситуацию.
# cat /etc/sudoers | grep -v "#"
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
apache ALL = NOPASSWD: /usr/local/LConf/lconf_deploy.sh
apache ALL = NOPASSWD: /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
apache ALL = NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
icinga ALL = NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
Можно ли переключить контекст пользователя (или еще много чего), используя sudo
, а уже "sudoing
"?
Если нет, как мне решить эту проблему? Обратите внимание, что /usr/local/LConf/LConfExport.pl
должен быть запущен как пользователь icinga
.
Спасибо,
Мэтт
[обновлено со ссылкой на комментарий mdpc ниже]
User_Alias LCONF=apache,icinga
Defaults:LCONF !requiretty
LCONF ALL=(icinga) NOPASSWD: /usr/local/LConf/LconfExport.pl -o /etc/icinga/lconf -v
LCONF ALL= NOPASSWD: /usr/local/LConf/lconf_deploy.sh
Выполнение sudo -u apache /usr/local/LConf/lconf_deploy.sh.
все еще запрашивает пароль
# cat /usr/local/LConf/lconf_deploy.sh
echo start of script
/usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
/etc/init.d/icinga reload
# sudo -u apache /usr/local/LConf/lconf_deploy.sh
start of script
[sudo] password for apache:
Running configuration check.../etc/init.d/icinga: line 111: /var/icinga/icinga.chk: Permission denied
CONFIG ERROR! Reload aborted. See /var/icinga/icinga.chk for details.
Любая помощь приветствуется.
Эта строка:
apache ALL = NOPASSWD: /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
не будет работать. Он будет вызывать sudo как apache, и это неправильно.
Вероятно, вы хотите:
apache ALL=(icinga) NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
Тип
su - apache
затем
/usr/local/LConf/lconf_deploy.sh
Если первая команда не работает, введите:
su - apache -s /bin/bash
== mbrownnyc [266b4002@gateway] has joined ##linux
-ChanServ- [##linux] Welcome to ##Linux! Can't speak? Please see http://linuxassist.net/irc on how to register or identify your nick. By joining this channel you agree to abide by the channel rules and guidelines stated on the official ##Linux website http://www.linuxassist.net/rules .
<loomsen> there are different ways to solve this, but all of them are ugly and discouraged
<loomsen> mbrownnyc, you could add apache to the icinga group, make that script ug+x and set a sticky bit
<nb-ben> mbrownnyc, you should take a look at suEXEC for php
<koala_man> mbrownnyc: works fine: http://pastebin.com/JhefHzCh
<koala_man> mbrownnyc: I still think you're just confusing your users
<koala_man> mbrownnyc: you add permissions for apache to run lconf_deploy as root, and then test using your icinga user
<koala_man> to run it as apache
Решение:
# cat /etc/passwd | grep icinga
icinga:x:499:500:icinga:/var/icinga:/bin/false
# cat /etc/passwd | grep apache
apache:x:48:48:Apache:/var/www:/bin/false
# grep -v "#" /etc/sudoers
Defaults !requiretty
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
User_Alias LCONF=apache,icinga
Defaults:LCONF !requiretty
LCONF ALL=(apache) NOPASSWD: /usr/local/LConf/lconf_deploy.sh
LCONF ALL=(icinga) NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
# cat /usr/local/LConf/lconf_deploy.sh
#!/bin/bash
echo start of script
sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
/etc/init.d/icinga reload