sudo命令

"不以%号开头的表示"将要授权的用户",比如root;以%号开头的表示"将要授权的组", 比如%wheel组 和 %sudo组

让普通用户能以root身份执行命令

echo 'passwd' | sudo -S cd /root/

限制用户只能使用指定命令

vi /etc/sudoers # 或者直接执行visudo命令编辑
root ALL=(ALL:ALL) ALL
username ALL=/usr/bin/ls

# 表示user1用户可以在本地以root的身份去执行kill命令,多条命令用逗号分隔
# 注意: 命令必须是完整的路径
user1 localhost=(root)  /bin/kill,/bin/id


# NOPASSWD后面带有冒号:。该配置表示执行sudo时可以不需要输入密码。
test ALL=(ALL) NOPASSWD: /bin/useradd

# 用户可以执行passwd程序,但是不能修改root密码,在命令前面加上叹号表示不能执行该程序。
user01 localhost=(root) NOPASSWD:/usr/bin/passwd,!/usr/bin/passwd root

# 允许user以sudo不输入密码的方式执行pqsswd,svn,但禁用使用sudo rm 删除任何文件
user ALL=(ALL) NOPASSWD:/usr/bin/passwd,/usr/bin/svn, !/usr/bin/rm *

# 用户可以在本机上无密码执行/usr/local/bin/python,有密码执行kill命令
user01  localhost=(root)  NOPASSWD:/bin/more PASSWD:/bin/less

test ALL=(ALL:ALL) NOPASSWD: /bin/useradd 在sudoers文件中,ALL=(ALL)指定了执行命令的权限范围和身份验证的类型。 第一个ALL表示允许用户在任何主机上执行命令。 (ALL)指定了用户可以使用sudo来切换到任何用户。第一个ALL表示可以切换到任何用户,第二个ALL表示可以切换到任何组。 因此,test ALL=(ALL)意味着用户test可以在任何主机上以任何用户身份执行sudo命令。

title: "指定任何主机和不可以指定主机的区别"
假设你有三台主机:A、B和C。

现在考虑下面两种情况:

test ALL=(ALL:ALL):
这个规则允许用户"test"在任何主机上以任何用户的身份执行任何命令。假设"test"想要在主机B上执行ls命令。这是被允许的。但是如果你想要限制"test"只能在主机B上执行,而不能在A和C上执行,这个规则就不适合你,因为它允许在任何主机上执行。

test ALL=(ALL):
这个规则允许用户"test"以任何用户的身份执行任何命令,但不指定特定的主机。如果"test"想要在主机B上执行ls命令,这同样是被允许的。而且,"test"也可以在主机A和C上执行相同的命令,因为这个规则没有限制特定的主机。

所以,如果你希望限制用户只能在特定的主机上执行命令,你应该使用test ALL=(ALL:ALL);如果你允许用户在任何主机上执行命令,那么你可以使用test ALL=(ALL)。

最后更新于