在下面的帖子的讨论中提到su和sudo的不同。
[ 已解决 ] 关于普通用户和 root 用户的命令不相同的问题
其中有说道说到sudo与su的命令差别可以更安全,但有人就说:能sudo不就是可以su了么?其实我原来也是这样想的。
我觉得这么不合理的现象不会出现才对。
于是我去研究了一下。发现果然并不是这样的!
具体详细的看下面。
wiki.archlinux.org/index.php/Sudo_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#.E5.AF.86.E7.A0.81.E8.BF.87.E6.9C.9F.E6.97.B6.E9.97.B4
PS0:又一次验证了wiki的强大。
我来简单说一下
用下面命令可以打开配置文件,文件的路径是/etc/sudoers(注意需要root的)
visudo
会看到以下的内容。
Defaults !insults
Uncomment to enable logging of a command’s output, except for
sudoreplay and reboot. Use sudoreplay to play back logged sessions.
Defaults log_output
Defaults!/usr/bin/sudoreplay !log_output
Defaults!/sbin/reboot !log_output
In the default (unconfigured) configuration, sudo asks for the root password.
This allows use of an ordinary user account for administration of a freshly
installed system. When configuring sudo, delete the two
following lines:
Defaults targetpw
ALL ALL = (ALL) ALL
Runas alias specification
User privilege specification
root ALL = (ALL) ALL
看见那个
ALL ALL = (ALL) ALL
了没有,
第一个ALL指所有用户
第二个ALL指所有主机
第三个括号里的ALL指的是以什么样的身份
第四个ALL指的是命令
简单举个例子
aman ALL=(root) /sbin/shutdown
的意思就是说aman用户可以在所有的主机上以root的身份运行/sbin里的shutdown命令
看上面的配置会发现默认所有用户都可以使用sudo
网上还有一种说法是把sudo开放个某个用户后,sudo后只要输入自己的密码就好了。
不知道别的发行版怎么样,反正openSUSE不是这样的。
也就是说你还是要输入root密码的。
那么还不是可以sudo就可以su。
其实细想以下你会发现,那个转化成自己密码的功能其实是多余的!
因为你是可以跳过密码认证的!
如下
aman ALL = (root) NOPASSWD:/sbin/shutdown
那么你就是只把shutdown这一个命令开放给了aman,不需要输入root密码。
就算aman把/sbin加入环境变量也没关系,(加入环境变量不需要root)。他同样只可以使用shutdown这一个命令。而保护了其他的权限。
PS1:顺便说说,关机命令shutdown和/sbin的问题。那么多关机命令到底选那个,理论上是shutdown是最安全的。但是他开放给多个用户就不安全了。
如果是个人使用的话把/sbin加入环境变量我觉得问题不大。其实在多用户的情况下就算不加入其他人也可以找到它的,关键是管理好权限,有了sudo以后,其实问题都可以很好地解决了。
PS2:一般的linux用户还是桌面用户为主,一般会感觉权限管理什么的其实没什么用。我的电脑我一个人用搞什么权限。我的意见是:你既然选择了学习linux这个操蛋的操作系统,干嘛不做得专业一点。
styx
(styx)
2013年05月24日 07:50
2
我记得 su 和 sudo 最大的区别是就 su 之后采用的就是 root 的环境配置,而 sudo 只是提升权限而采用仍是原来用户的环境配置。就好像有些程序 su 后可以运行,但是 sudo 就会报 display 错误之类的~如有错误,勿喷~
对的对的,我也看到这个的资料了。就在我给你那篇本论坛的帖子里貌似也有,本来想写进去。
su 不是可以加一个用户名参数么
用法:su 选项 ]… -] 用户 参数 ]… ]
可以这样的
su aman
然后输入密码(aman 的密码)
就是以 aman 的身份登录了,这个我觉得其实可以理解为以另外的身份登录,是整个和你有关的相关变量都变了(比如你 cd 一下,就是回到 aman 的主目录了,而不是你原来的)。这时在用户参数省缺时默认为 root 账户而已。说白了,root 也就是个账户罢了。
但是很多人在用 sudo 的时候遇到的问题是用 root 密码的而且不知道如何配置,这样所谓的暂时提升权限就没有意义了(从安全性来讲变得和 su 几乎没有差别了)。如果是多用户的话还是会把 root 密码泄露。我主要想讲这个。其实我觉得主要是权限的改变,环境配置什么的还不是很重要,比如 root 账户的 PATH 里有 /sbin ,一般的没有,可以改.bashrc 啊。而且都不需要 root 权限。
还有,谢谢你的评论。
teenvee
(teenvee)
2013年05月25日 06:16
4
In the default (unconfigured) configuration, sudo asks for the root password.
This allows use of an ordinary user account for administration of a freshly
installed system. When configuring sudo, delete the two
following lines:
Defaults targetpw # ask for the password of the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use this together with ‘Defaults targetpw’!
在/etc/sudoers里面可以找到这个.
应该是默认opensuse是开始时(用户没有自行配置sudo)所有的用户都可以用sudo这个命令的不过要求的密码是root的密码
其他的发行版本好像是一般用户是没有sudo的权限的.需要在
User privilege specification
root ALL=(ALL) ALL
这里添加的是个人用户的sudo权限
Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
这里添加的是用户组的sudo权限
添加完之后一般的用户就可以用sudo了.要求的输入是该用户的密码.这样子就可以执行一些超级用户的权限的一些命令
在/etc/sudoers把下面两行删除之后在opensuse下面应该是一般用户都用不了sudo的.必须要在sudoers里面添加之后才可以用sudo.而且要求的是该用户的自己的密码而不是root的密码
Defaults targetpw # ask for the password of the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use this together with ‘Defaults targetpw’!
至于添加用户到sudoer里面的方法和楼主说的一样的
这只是我自己的看书和自己试试之后了解到的一些东西.有错希望指出纠正
首先感谢评论。其实我也是在摸索中学习。大家可以交流一下,哈哈。
不好意思是我不严谨了,其实上面的 wiki 也有,我去试验一下,如果是对的话我就加到主贴里。
谢谢。
teenvee
(teenvee)
2013年05月25日 07:32
6
这是我删除了/etc/sudoers里面
Defaults targetpw # ask for the password of the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
这两句之后运行sodu的结果
teenvee@opensusu:~> sudo /sbin/shutdown
teenvee's password:
teenvee 不在 sudoers 文件中。此事将被报告。
可以看到要求输入的密码不是再是root’s password而变成了该用户的password.
因为并没有把teenvee加到sudoers里面去.所以是无法正常使用sudo来执行一些要求管理员权限的命令的
好像有点不对,我的密码和root密码一样的,所以我又创了一个帐号aman。用了另外的密码。并把它添加进sudo组。
现在的关系是我们有三个帐号,root,nirvana(我的),aman(临时创建的)
我添加下面内容
Defaults targetpw # ask for the password of the target user i.e. root
aman ALL=(ALL) ALL # WARNING! Only use this together with ‘Defaults targetpw’!
(让aman以nirvana的身份运行shutdown命令)
aman@linux-nirvana:/home/nirvana> sudo -unirvana shutdown -k
nirvana’s password:
(省缺-u参数,则默认为以root身份)
aman@linux-nirvana:/home/nirvana> sudo shutdown -k
root’s password:
所以我理解的target user应该是括号里的用户(目标的用户嘛),也就是你暂时需要变成的那个用户。
我又试验了一下改为加入
Defaults rootpw # ask for the password of the target user i.e. root
aman ALL=(nirvana) ALL # WARNING! Only use this together with ‘Defaults targetpw’!
注意我把targetpw改为了rootpw
则会有下面输出
aman@linux-nirvana:/home/nirvana> sudo -unirvana shutdown -k
root’s password:
就是说你以nirvana的身份运行shutdown命令也需要root密码。
sudo也和su一样可以加用户参数。所以它不仅可以下放root的权限,其实还可以下放一些组管理原的权限。
这是我试验的结果。你的不一样么。
teenvee
(teenvee)
2013年05月25日 08:29
8
首先.这里先是指明一个问题
Defaults targetpw # ask for the password of the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
这两行是需要删除掉或是注释掉的.而并不是修改里面的内容
至于把用户添加到sudoers里面是去是在
## User privilege specification
##
root ALL=(ALL) ALL
这个下面添加
像是你这样子的话可以改成这样
1
aman ALL=(ALL) ALL
这样子的话aman这个账号应该是可以用sudo执行任何命令的
而nirvana是无法使用sudo.应该会和我测试的结果一样是显示
你可以试试.
sudo下放的权限是可以由管理员自己限定的
aman ALL=(ALL) “ALL” 双引号的这个字段可以限定出aman这个用户到底可以用sudo执行那些管理员权限命令.
你可以把一些命令写在这个字段授予aman以sudo方式运行
1赞
哦哦,我知道了,是
Defaults 这一行的问题,把这一行注释掉就可以了。
那就是有三种情况了。
Defaults rootpw 是输入 root 密码
Defaults targetpw 是输入转化方的密码
省缺的话就是输入用户自己的密码。
啊,谢谢。