全部博文(408)
分类:
2010-08-20 11:14:25
一直以来要用 以 身份执行系统管理工作的问题,就是 PHP 会以 的身份执行,解决方法有安装 suPHP 或 super 这类工具,但个人认为还是 较为。首先要安装 Sudo,据我所知 RHEL, Ubuntu
已经内置,Debian 只要用 apt-get 安装就可以,以下是 的安装方法:
FreeBSD
安装 Sudo
# cd
/usr/ports/security/sudo
# make && make install
当系统有 Sudo 后,基於安全理由,不要直接编辑组态档
/etc/sudoers,改用 visudo 来做编辑。visudo 为防止多个使用者同时修改,它会先锁住
/etc/sudoers,并且确保组态档的文法正确,一旦发现错误会拒绝储存动作。
假如你的
Apache 的执行身份为 apache,而想透过 PHP 重新启动 DNS server,用 root 输入指令 visudo,便会用 vi
开启 /etc/sudoers,在档案最底加上以下一行:
apache ALL=NOPASSWD:/etc/rc.d/init.d/named
储存后可以在 PHP 以
root 身份执行 /etc/rc.d/init.d/named,包括开启、停止及重新启动:
PHP:
php
// 开启 named
$output = shell_exec("/usr/bin/sudo
/etc/rc.d/init.d/named start");
echo $output;
?>
上面的 /usr/bin/sudo 是 sudo
的可执行档,需要根据自己的安装目录进行修改。以上只是个简单的例子,你可以根据你的需要执行其他管理动作,但如果 web server
是多人共用,那麼在使用 Sudo 时要加倍小心。
我的用法:
s1000 系统 asterisk 用户 添加执行 可执行的命令:
1》su asterisk
2》sudo -l (列举asterisk 用户可执行的命令)
3》su root
4》visudo 例如 添加 可执行 sh 命令可执行脚本 asterisk ALL = NOPASSWD: /bin/sh
具体语法格式: ## Allows members
of the users group to shutdown this system
# %users
localhost=/sbin/shutdown -h now
asterisk ALL = NOPASSWD:
/sbin/shutdown
asterisk ALL = NOPASSWD: /usr/bin/nmap
asterisk ALL = NOPASSWD: /usr/bin/yum
asterisk ALL = NOPASSWD:
/bin/touch
asterisk ALL = NOPASSWD: /bin/chmod
asterisk ALL = NOPASSWD: /bin/chown
asterisk ALL = NOPASSWD:
/sbin/service
asterisk ALL = NOPASSWD: /sbin/init
asterisk ALL = NOPASSWD: /sbin/route
asterisk ALL = NOPASSWD:
/bin/hostname
asterisk ALL = NOPASSWD: /usr/sbin/postmap
asterisk ALL = NOPASSWD: /usr/sbin/postfix
asterisk ALL =
NOPASSWD: /usr/sbin/saslpasswd2
asterisk ALL = NOPASSWD:
/bin/date
uucp ALL = NOPASSWD: /bin/chmod
asterisk
ALL = NOPASSWD: /usr/sbin/genzaptelconf
asterisk ALL =
NOPASSWD: /sbin/chkconfig
asterisk ALL = NOPASSWD: /bin/mount
asterisk ALL = NOPASSWD: /bin/umount
asterisk ALL = NOPASSWD:
/bin/cp
asterisk ALL = NOPASSWD: /bin/sh
asterisk ALL =
NOPASSWD: /bin/rm
asterisk之中使用: exec("sudo -u root chmod 757
$this->dirHylafaxConf");
exec("sudo -u root chmod 646
$archivoHylafax");
exec("sudo -u root service iaxmodem restart");
exec("sudo
-u root service hylafax restart");
exec("sudo -u
root init q");
exec("sudo -u root saslpasswd2 -d );