Мне нужно, чтобы мое веб-приложение перезапустило службу dansguardian (в CentOS), поэтому ему нужно запустить '/ sbin / service dansguardian restart'. У меня есть сценарий оболочки в / home / topological с именем apacherestart.sh, который выполняет следующие действия:
#!/bin/sh
id=`id`
/sbin/service dansguardian restart
r=$?
return $r
Это работает нормально (оператор журнала в сценарии для тестирования вывода в syslog, поэтому я знаю, что он работает) Чтобы запустить его, я помещаю это в / etc / sudoers:
User_Alias APACHE=www
# Cmnd alias specification
Cmnd_Alias HTTPRESTART=/home/topological/apacherestart.sh,/sbin/e-smith/db,/etc/rc7.d/S91dansguardian
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
APACHE ALL=(ALL) NOPASSWD: HTTPRESTART
Все идет нормально. Но сервис не перезагружается. Чтобы проверить это, я создал пользователя david и подставил uid / gid в / etc / passwd, чтобы он совпадал с www:
www:x:102:102:e-smith web server:/home/e-smith:/bin/false
david:x:102:102:David:/home/e-smith/files/users/david:/bin/bash
затем вошел в систему как Дэвид и попытался запустить apacherestart.sh. У меня возникает следующая проблема:
/etc/rc7.d/S91dansguardian: line 51: /sbin/e-smith/db: Permission denied
хотя S91dansguardian и db есть в списке команд sudoers.
Любые идеи?
На основании ответа Джо Х.
chmod a+rx /sbin/e-smith
chmod o+x /sbin/e-smith/db
Что такое скрипт e-smith? Кроме того, почему вы запускаете все это из Cmnd_Alias вместо того, чтобы объединять его в скрипте apacherestart.sh?
Для меня это не похоже на сообщение об ошибке sudo - это похоже на стандартное сообщение о разрешениях.
Какие разрешения на /sbin/e-smith/db
, и какова его строка shebang (и разрешения этой программы), если это сценарий?
Кроме того, как вы вызываете сценарий? Тот факт, что он упоминается в списке sudoers, не означает, что он будет волшебным образом особенным - вам действительно нужно вызвать его через sudo
.