您的位置:首页 > 其它

su ,su - ,sudo区别(每日一令之十一)

2013-12-14 22:07 363 查看
su和su -
联系:都是切换到root

区别:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。

[root@centosTest wenchao]# pwd
/home/wenchao
[root@centosTest wenchao]# su -
[root@centosTest ~]# su wenchao
[wenchao@centosTest root]$ pwd
/root
[wenchao@centosTest root]$ exit
exit
[root@centosTest ~]# pwd
/root
[root@centosTest ~]# su - wenchao
[wenchao@centosTest ~]$ pwd
/home/wenchao
[wenchao@centosTest ~]$


查看环境变量:

[wenchao@centosTest ~]$ env|egrep "USER|MAIL|LOGNAME|PWD"
USER=wenchao
MAIL=/var/spool/mail/wenchao
PWD=/home/wenchao
LOGNAME=wenchao
[wenchao@centosTest ~]$ su
Password:
[root@centosTest wenchao]# env|egrep "USER|MAIL|LOGNAME|PWD"
USER=wenchao
MAIL=/var/spool/mail/wenchao
PWD=/home/wenchao
LOGNAME=wenchao
[root@centosTest wenchao]#
[root@centosTest wenchao]# exit
exit
[wenchao@centosTest ~]$ su -
Password:
[root@centosTest ~]# env|egrep "USER|MAIL|LOGNAME|PWD"
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
[root@centosTest ~]#


su的优缺点:
su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;

此时sudo诞生了
sudo的优点:
 由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。  通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su; sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

它的特性主要有这样几点:  § sudo能够限制用户只在某台主机上运行某些命令。  § sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。  § sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。  § sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。

sudo的配置文件/etc/sudoer配置说明..
sudo的配置详见《sudo配置文件详解》http://fuwenchao.blog.51cto.com/6008712/1340722
范例:我的机器的文件配置(略)

root    ALL=(ALL)       ALL
wenchao ALL=(ALL)      ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now


实例1:
上面可以看到wenchao用户也是具有root的所有权限的

下面是我的配置步骤
visudo

在root后添加 wenchao ALL=(ALL) ALL

wenchao用户登陆之后,执行 sudo su -,然后输入wenchao的登录密码就可以了

[wenchao@centosTest ~]$ sudo su -
[sudo] password for wenchao:
[root@centosTest ~]#
实例2:
让普通用户support只能在某几台服务器上,执行root能执行的某些命令
首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias

1) 配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允许执行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3) 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置权限
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

配置示例:

############################################################################
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
Host_Alias      EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, /sbin/service, /bin/rm
# Defaults specification
# User privilege specification
root    ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
# Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now
###############################################################


实例3:
普通用户想看只有root权限才可以看到的文件
下面是我的操作步骤
首先:在普通用户下看/etc/sudoers
[wenchao2@centosTest ~]$ more /etc/sudoers
/etc/sudoers: Permission denied
[wenchao2@centosTest ~]$


切换到root下对wenchao2进行授权
[root@centosTest ~]# visudo
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
wenchao ALL=(ALL)      ALL
wenchao2 ALL=/bin/more   #增加的


切换到wenchao2
[root@centosTest ~]# su - wenchao2


看看wenchao2能执行哪些命令
[wenchao2@centosTest ~]$ sudo -l
[sudo] password for wenchao2:
Matching Defaults entries for wenchao2 on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME
LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User wenchao2 may run the following commands on this host:
(root) /bin/more
[wenchao2@centosTest ~]$


检查权限是否赋予成功
[wenchao2@centosTest ~]$ more  ^C
[wenchao2@centosTest ~]$ more /etc/sudoers /etc/sudoers: Permission denied [wenchao2@centosTest ~]$ sudo more /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##


对于wenchao用户查看和读取所有系统文件中,我只想把/etc/shadow 的内容可以让他查看;可以加入下面的一行;  wenchao ALL=/bin/more /etc/shadow  题外话:有的弟兄会说,我通过su 切换到root用户就能看到所有想看的内容了,哈哈,对啊。但咱们现在不是在讲述sudo的用法吗?如果主机上有多个用户并且不知道root用户的密码,但又想查看某些他们看不到的文件,这时就需要管理员授权了;这就是sudo的好处;

实例4:

练习用户组在/etc/sudoers中写法;  如果用户组出现在/etc/sudoers 中,前面要加%号,比如%wenchao ,中间不能有空格;%wenchao ALL=/usr/sbin/*,/sbin/*  如果我们在 /etc/sudoers 中加上如上一行,表示wenchao用户组下的所有成员,在所有可能的出现的主机名下,都能切换到root用户下运行 /usr/sbin和/sbin目录下的所有命令;
实例5:

练习取消某类程序的执行:

  取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
  wenchao ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
  [wenchao@localhost ~]?$ sudo -l
  Password: 注:在这里输入wenchao用户的密码;
  User beinan may run the following commands on this host:(root) /usr/sbin/*(root) /sbin/*(root) !/sbin/fdisk[wenchao@localhost ~]?$ sudo /sbin/fdisk -lSorry, user beinan is not allowed to execute '/sbin/fdisk -l' as root on localhost.
  注:不能切换到root用户下运行fdisk 程序;
如果有sudo 的权限而没有su的权限: sudo su;

本文出自 “从运维到ETL” 博客,请务必保留此出处http://fuwenchao.blog.51cto.com/6008712/1340685
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: