Linux中su和sudo的用法

su -
#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,而且从新读取用户环境相关配置文件,具体的来讲就是执行下用户家目录下.bash_profile和.bashrc文件,这个咱们成为全切换
su
#su oldboy //执行这个命令的时候系统不读取以上两个文件,因此咱们通常称它为半切换,这样切换过去以后,oldboy用户使用的依旧是此前用户的环境配置信息
sudo
#sudo这个命令设计初的主要目的是为了使某些用户具备特定用户的一些特殊的权限,举例说明:好比A,B两我的,A是技术部经理,具备公司服务器上的root权限,B技术还不够成熟,只具备通常用户权限,由于项目缘由,B须要具备添加用户的权限,这个时候该怎么办呢?给B管理员权限?那安全性能获得保证吗!对,这时候sudo就派上用场了…
1)sudo这个命令的定义在/etc/sudoers文件里面,这个文件内容的格式以下:
User     MACHINE=    COMMANDS
root     ALL=(ALL)      ALL
oldboy ALL=(ALL)     /user/sbin/useradd
用户     机器=(受权哪一个角色的权利) /user/sbin/useradd
%用户组 机器=(受权哪一个角色的权利) /user/sbin/useraddlinux

2)咱们能够用vim来打开/etc/sudoers这个文件,可是由于这个文件对系统来讲至关重要,因此有一个专门的命令visudo来对这个文件进行编辑,当有一个管理员对这个文件进行编辑的时候,这个文件会被系统加上一个“锁”,意思就是不容许多个管理员同时对其进行编辑,这也是为了系统安全着想shell

3)举例:好比咱们须要oldboy用户能够执行passwd命令,那么咱们须要做以下配置:
1)#visudo //打开/etc/sudoers配置文件
2)在配置文件里添加以下行
oldboy ALL=(root) /usr/sbin/useradd
3)#su - oldboy //切换到oldboy用户
4)#sudo /usr/sbin/useradd jack //普通用户oldboy添加用户jack
固然sudoers文件不是这么容易就能玩转的,假设以下状况,当咱们想把好多个命令都给oldboy用户使用权限(同理当咱们想给不少个用户一个命令的使用权限或者让一个用户在不一样的主机上登陆时均可以拥有这么命令的使用权限),那么咱们改怎么办呢?一行一行的写下去,那岂不是显得咱们的linux太笨拙了……
这时候咱们能够看一下sudoers的man文档,咱们会发现这个真的很牛掰,牛掰到咱们能够定义某个用户只能使用某个命令的某一个选项……linux解决上述问题用到了别名

1)下面是对多个用户的格式定义:
User_Alias NAME = gentoo, suse, ubuntu, %mygrp, USENAME //能够加进去一个组,能够加进去另外一个用户别名,这里若是是想把组加进去记得要在前面加“%”,不要问为何,就是这样定义的
2)下面是对多个主机的格式定义:
Host_Alias NAME = 主机名, IP, network/mask, NAME //这里是说后面能够是主机名、IP地址、网段、另一个别名
3)下面是对以哪一个用户的身份运行(多个)的格式定义:
Runas_Alias NAME = 用户, 组, #用户ID, NAME //这里是说后面能够是用户名,组名,用户ID(前面必须加“#”),另一个别名
4)下面是对多个命令的格式定义:
Cmnd_Alias NAME = 命令, 目录(目录中的全部命令),NAME //这里是说后面能够跟命令,目录下的命令集合,另一个别名ubuntu


当不加任何参数执行su命令时,表示要切换到root用户,但这样执行,会遇到一些问题。由于虽然是切换到root用户了,但并无改变为root用户登陆环境,用户默认的登陆环境,能够在/etc/passwd 中查获得,包括家目录,shell类型等。比较规范的操做方法是”su -“。见下面的实例。vim

实例1:由普通用户oldboy切换到root用户安全

[oldboy@oldboy ~]$ whoami #→确认当前用户为oldboy
oldboy
[oldboy@oldboy ~]$ su #→不加用户就表示切到root用户。固然也可使用su root。
Password: #→这里固然就是root用户的密码了。
[root@oldboy oldboy]# env
HOSTNAME=oldboy
USER=oldboy
MAIL=/var/spool/mail/oldboy
PWD=/home/oldboy
HOME=/root
LOGNAME=oldboy
...省略部分无关内容...
#→细心的读者应该已经看到了,若是使用su而不加上“-”这个参数,那么,切换前的用户的相关信息还会存在,这会引发不少麻烦,甚至会出现意想不到的结果。所以,切换用户时,最好是 “su - 用户名”。这是生产场景中标准的切换用户的操做方法。
[root@oldboy oldboy]# exit #→退出当前用户,这个命令也能够用ctrl+d快捷键命令替代。
[oldboy@oldboy ~]$ su - #→带上“-”参数作切换,也可用su - root命令。这是生产场景中的标准操做方法。
Password:
[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME" #→切换后的环境变量信息结果。使用egrep过滤包含想查看的字符串的行。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
#→此次和上次就不一样了,全部的环境变量信息都切换到了root下。所以,请你们在切换用户时必定要加上“su - 用户名”,这里提醒下,不光是切到root呦,切换到其余用户也是同样,呵呵。bash

su命令总结:
1)普通用户切换到root用户,可以使用su -或su - root。必须输入root密码才能完成切换。
2)root用户切换到普通用户,可以使用“su普通用户名”的写法。不须要输入任何密码就能完成切换。切换到普通用户后,在执行一些命令如ifconfig时,可能会遭遇到环境变量PATH路径问题而找不到某些系统命令(通常是/sbin,/usr/sbin等下面的命令),这时就须要将普通用户的PATH,配置成root的PATH内容。
3)若是仅但愿在某用户下执行命令,而不直接切换到该用户下操做,可使用 su - 用户名 -c "命令"的方式。服务器

相关文章
相关标签/搜索