平常操做中为了不一些误操做,更加安全的管理系统,一般使用的用户身份都为普通用户,而非root。当须要执行一些管理员命令操做时,再切换成root用户身份去执行。shell
普通用户切换到root用户的方式有:su和sudo。安全
1,su -ide
(su为switch user,即切换用户的简写)spa
格式:su -l USERNAME(-l为login,即登录的简写)3d
-l能够将l省略掉,因此此命令常写为su - USERNAMExml
若是不指定USERNAME(用户名),默认即为root,因此切换到root的身份的命令即为:su -root或是直接 su - blog
实例1:普通用户user1知道root帐户登陆密码,要求用户user1在不注销登陆的前提下查看/etc/shadow文件。事件
以下图,试图查看文件/etc/shadow时,提示拒绝访问,此时使用su - 命令切换成root身份后,便可正常查看。ip
以后,经过命令exit或logout,或者是快捷键Cry+D便可返回原用户身份。ci
2:su - 与su
经过su切换用户还能够直接使用命令su USERNAME,与su - USERNAME的不一样之处以下:
su - USERNAME切换用户后,同时切换到新用户的工做环境中
su USERNAME切换用户后,不改变原用户的工做目录,及其余环境变量目录
以下图,显示两个命令的执行结果:
3,sudo
使用su切换用户时需知晓对应用户的登录密码,即若切换成root用户身份,需知道root用户的登录密码。做为root用户管理员,如何受权其余普通用户,在不须要知晓root密码的状况下,执行root权限的命令操做?此时便可使用sudo。
sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了受权给哪一个用户能够以管理员的身份可以执行什么样的管理命令;
格式:sudo -u USERNAME COMMAND
当普通用户经过sudo以root用户执行命令时,sudo后面的 -uUSERNAME可省略,即sudo COMMAND 即意为sudo以root用户执行
默认状况下,系统只有root用户能够执行sudo命令。须要root用户经过使用visudo命令编辑sudo的配置文件/etc/sudoers,才能够受权其余普通用户执行sudo命令。
以下图,假如使用普通用户账号user4经过sudo以root用户身份执行命令tail /etc/shadow时,即被提示:user4未被定义在sudoers文件中,没法执行此命令。
sudo命令 语法:sudo [-bhHpV][-s ][-u <用户>][指令] 或 sudo [-klv] 参数: -b 在后台执行指令。 -h 显示帮助。 -H 将HOME环境变量设为新身份的HOME环境变量。 -k 结束密码的有效期限,也就是下次再执行sudo时便须要输入密码。 -l 列出目前用户可执行与没法执行的指令。 -p 改变询问密码的提示符号。 -s 执行指定的shell。 -u <用户> 以指定的用户做为新的身份。若不加上此参数,则预设以root做为新的身份。 -v 延长密码有效期限5分钟。 -V 显示版本信息。 -S 从标准输入流替代终端来获取密码
4,sudoers
sudo的配置文件为:/etc/sudoers。
sudoers文件中容许指定用户在不须要知道root用户的登录密码的状况下,能够以root用户身份运行各类命令。此文件必须使用visudo命令编辑配置。(visudo命令能够提供basic sanitychecks和check for parse errors,即提供快速的正确性有效性检查,以及语法检查功能)
查看sudores文件,其中有一行以下图,定义了容许root用户从任何主机登录,使用sudo能够切换成任何用户的身份,执行全部命令。
查看sudoers文件,其中有两行以下图,定义了组可使用sudo命令的配置。
实例2:设置普通用户user4,使其可使用sudo命令以root用户身份修改其余全部用户登陆密码,但不能修改root用户登录密码
未被受权前,user4使用sudo以root用户修改user1的密码时,提示user4未被定义在sudoers文件中,没法执行,而且此事件将被报告给。以下图:
执行visudo命令,编辑sudoers文件,添加一行:用户账号为user4;能够从任何主机登录,执行三条命令(以root身份执行passwd命令后面不加用户名时,即表明修改root用户自己的密码,此即为第一条命令的做用),以下图,便可实现user4能够修改除root用户以外的其余全部用户的登陆密码。
以后,user4经过sudo以root用户身份便可成功修改user1的密码(而不须要知道root的密码,只须要输入本身的密码便可),同时没法修改root的密码,以下图:
实例3:设置组Administrators内全部成员均可以经过sudo以root用户身份执行全部命令,且不须要验证自己的帐户密码。
经过visudo命令编辑sudoers文件,添加以下一行,即完成配置。
以后,成员一user1,便可经过sudo以root用户执行全部命令,且不须要验证自己帐户密码。以下图:
附:man文档中su和sudo的解释:
su - run a shell with substitute user andgroup IDs
以替代的用户运行shell。(即su以后,在当前shell上的用户身份已转变)
sudo - excute a command as another user.
sudo allows a permitted user to execute acommand as the superuser or another user, as specified by security policy.
以其余用户身份执行命令。sudo依照安全策略中指定,容许受权用户以超级用户或是其余用户身份执行命令。(即sudo,只是临时以其余用户身份执行命令,并不会切换身份)
su -c
固然,su也能够在不切换用户身份的状况下,临时以其余用户执行命令。
经过选项-c,便可使用root身份临时执行命令,以下图:
/bin/su -
同时,也能够经过配置sudoers文件,受权其余普通用户,能够切换成其余用户身份去执行命令,而没必要每次都加上sudo。以下图,只需在sudoers文件中定义普通用户user4
以后,用户user4只需执行一次sudo su - 便可切换成root身份了
注:实例环境为Vmware Workstation 九、CentOS 6.4
参考书籍:《鸟哥的私房菜》