linux中su和sudo的区别

linux中su和sudo的区别:
su/sudo-----<>是用来进行用户身份的切换
使用一般帐号进行日常的操作是一个好的习惯
用较低权限启动系统服务
软件本身的限制
1.su
su - root/other user
需要知道root/user的密码方可
su 是最简单的身份切换命令.他可以进行任何身份的切换.
su [-lm] [-c命令] [username]
su - 以login-shell的变量文件读取方式进入系统.
如果没有加上用户名,则是切换到root用户
-l 与-类似,也是login-shell切换用户
-m 与-p是一样的,表示使用当前的环境配置,而不读取新的用户配置.
-c 仅进行一次命令,-c后面可以加上命令.

-和没有-有很大区别,因为这是login-shell和non-login shell的变量读取方式.

例如:
$sun:--->su
passwd

$root--->id
输出root的用户,用户组信息

$root -> env | grep sun
输出用户sun的环境配置,然后exit退出sun的环境

单纯的使用su来进行用户的切换使用的是non-login shell的方式.这种方式下很多原来的变量不会发生改变.尤其使我们谈到的PATH环境变量.比如/sbin /usr/sbin等目录没有被包含进来.因此root惯使用的命令只能通过绝对路径使用.
如果要离开的话,请使用exit进行离开.
如果我要使用使用一个只要root才能使用的命令,执行完毕后恢复身份,可以使用-c
例如:
$sun : head -n 3 /etc/shadow
提示我没有权限
$sun: su - -c "head -n 3 /etc/shadow"
然后输入sun的密码就可以查看了.

总之:
如果要切换到用户的工作环境,必须使用"su - username"或"su -l username"才会联通"PATH/USER/MAIL"等变量切换到新的环境中.
如果仅想使用一次root的命令可以使用"su - -c"
root切换到其他用户的时候可以不用使用密码
su切换很方便,但是n多人的时候容易暴漏root的密码
-------------------------------------------------------------------------------------------
2.sudo
sudo 是用来执行root的命令串
多人公用一台主机的时候,sudo要比su来得快.起码root密码不会泄露.
仅仅是/etc/sudoers用户的才能使用sudo命令.

命令语法:
1.开始的时候只要root用户才能执行sudo命令
sudo [-b] [-u 新用户帐号]
2.sudo可以让你切换用户身份来进行任务

执行的流程:
1.当用户使用sudo命令的时候,系统在/etc/sudoers中查找是否有这个用户是否具有执行sudo的权限
2.当确认后,还要输入用户的密码
3.密码正确后才进行后续的命令,root不需要密码
4.如果切换身份与执行身份相同则不需要密码

我们可以使用visudo去修改/etc/sudoers
之所以使用visudo去修改是因为怕修改出现语法错误,当然不建议直接使用vi进行修改.

$sun: head -n -3 /etc/shadow
提示用户木有权限
把sun用户加入到/etc/sudoers中然后使用
$sun: sudo head -n 3 /etc/shadow
输入密码就可以进行查看了

建议对使用sudo命令的用户请加入一个用户组里面

-------------------------------------------------------------------------------------------

posted @ 2012-12-26 09:15  sgsheg  阅读(244)  评论(0编辑  收藏  举报