我的 sudoers 文件行以 mukesh 开头的部分已编辑:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
mukesh ALL=(ALL) SOFTWARE,DRIVERS
mukesh ALL=(root) NOPASSWD: /home/mukesh/Desktop/connect.sh
connect.sh的权限
密码
/home/mukesh/Desktop
ls -lrt connect.sh
-rwsr-xr-x. 1 root root 47 Apr 4 20:07 connect.sh
猫连接.sh
#!/bin/bash
sudo pppoe-start
我只想在没有任何提示的情况下以 root 身份运行 connect.sh
编辑 :
[mukesh@centos Desktop]$ ./connect.sh
pppoe-start: You must be root to run this script
[mukesh@centos Desktop]$ sudo ./connect.sh
[sudo] password for mukesh:
[mukesh@centos Desktop]$ su -
Password:
Last login: Mon Apr 4 10:27:09 IST 2016 on pts/0
[root@centos ~]# pwd
/root
[root@centos ~]# cd /home/mukesh
[root@centos mukesh]# cd Desktop
[root@centos Desktop]# ./connect.sh
. Connected!
[root@centos Desktop]#
[mukesh@centos Desktop]$ cat connect.sh
#!/bin/bash
pppoe-start
[mukesh@centos Desktop]$ sudo /home/mukesh/Desktop/connect.sh
[sudo] password for mukesh:
. Connected!
尝试使用 sudo chmod ox connect.sh 删除权限
-rwxr-xr--. 1 root root 97 Apr 5 09:30 connect.sh
[mukesh@centos Desktop]$
[mukesh@centos Desktop]$ sudo /home/mukesh/Desktop/connect.sh
[sudo] password for mukesh:
. Connected!
编辑2:
[mukesh@centos Desktop]$ sestatus
SELinux status: disabled
答案1
您已经NOPASSWD
为脚本设置了/home/mukesh/Desktop/connect.sh
,其中没有任何需要sudo
密码的内容。
您需要使用以下命令运行脚本sudo
:
sudo /home/mukesh/Desktop/connect.sh
然后sudo
从脚本中删除:
#!/bin/bash
pppoe-start
如果它只是一个命令,那么您只需添加该命令即可sudoers
(不需要单独的脚本):
mukesh ALL=(root) NOPASSWD: /path/to/pppoe-start
另请注意,在脚本(解释的可执行文件)上设置 SETUID 位将不起作用。
您还有另一个问题,即您为其他人设置了可执行位,即任何用户都可以执行该文件,因此您会被要求输入sudo
密码,因为一般权限前面将有特殊权限,例如sudo
.
所以你可以删除其他人的执行权限:
sudo chmod o-x /home/mukesh/Desktop/connect.sh
现在sudo
不应该询问密码。