浏览器中调用PHP在执行linux sudo指令时报sudo: sorry, you must have a tty to run sudo

时间:2023-03-08 22:26:43

在php程序中使用了exec函数调用sudo指令,在浏览器中访问后,报sudo: sorry, you must have a tty to run sudo错误。

按照网上搜到的方法,修改/etc/sudoers文件,注释如下行:

#Defaults    requiretty

在浏览器中访问结果依旧。

http://blog.****.net/chinalinuxzend/article/details/3747299中看到,指定账号还需要在sudoers中作如下设置:

用sudo是最好的办法,针对你的问题,在/etc/sudoers文件中做如下修改:
(1)注释掉:Defaults    requiretty所在的行。即:

#Defaults    requiretty

(2)你的允许执行lvscan命令的内容类似下面(即加上NOPASSWD,在使用sudo执行该命令时可以不用密码):

bearzhang       ALL=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo

如果只允许在某台主机上使用该命令则将ALL换成允许的主机即可,例如:

bearzhang       www.koorka.com=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo

由于是从浏览器中执行,不同的浏览器在执行linux指令时,所具有的身份不同,因此在sudoers中添加如下三行,完美解决问题:

apache ALL=(ALL) NOPASSWD: ALL
www  ALL=(ALL) NOPASSWD: ALL
nginx  ALL=(ALL) NOPASSWD: ALL