我正在尝试理解sudo
的文档Debian 维基。对此,它使用了下面的两个示例。但是我不明白它们之间的区别。与 root 的ALL:ALL
( ) 选项相比,为什么组 sudo 具有 ( ) ALL
?命令的每个部分的作用是什么。
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#Default rule for root.
root ALL=(ALL) ALL
答案1
解释%sudo ALL=(ALL:ALL) ALL
:-
%sudo
- 这团体(命名sudo
)允许使用sudo
。第 一个
ALL
表示允许sudo
从任何终端或任何主机(在任何机器上)(ALL:ALL)
表示命令可以运行为(User:Group)
- 最后
All
表示所有命令都可以执行
解释root ALL=(ALL) ALL
root
- 这用户(root) 允许以任何用户身份在任何机器上执行所有操作
解释(ALL:ALL)
:(运行为(User:Group)
)
第一个“ALL”表示用户(如果是
root
)或组成员(如果是%admin
)可以运行命令和所有用户一样第二个“ALL”表示用户(即
root
)或组成员(即%admin
)可以运行命令和所有团体一样。
如果仅(ALL)
使用,那么它不允许作为另一个组运行,而(ALL:ALL)
说以所有用户和所有组身份运行。
答案2
ALL:ALL
和ALL
in的区别在于RunAs
可以使用的用户和组的组合。例如:
# sudo -u muru -g git id
Sorry, user root is not allowed to execute '/usr/bin/id' as muru:git on muru-laptop.
# sudo -u muru -g muru id
uid=1000(muru) gid=1000(muru) groups=1000(muru),10(wheel),21(locate),102(polkitd),190(systemd-journal)
$ sudo -u muru -g git id
uid=1000(muru) gid=997(git) groups=997(git),10(wheel),21(locate),102(polkitd),190(systemd-journal),1000(muru)
$ id
uid=1000(muru) gid=1000(muru) groups=1000(muru),10(wheel),21(locate),102(polkitd),190(systemd-journal)
前两个命令是root
在我的普通用户下运行的,第三个和第四个命令是(ALL:ALL)
.
对于 only ALL
,-g
只能用于指定用户的主要组 - 这并不比-g
根本不指定好。ALL:ALL
可用于给出有效用户和组的任意组合。
我不知道为什么会有这个(人为的)限制。