1、su命令
su/su - username:切换用户,如果从root用户切换到切换用户,不需要其他用户的密码;username为空,默认为root用户,从普通用户切换到root用户,需要输入root用户的密码
login shell和non-login shell:
login shell是说在取得bash时需要完整的登陆流程,每个用户登陆取得bash的时候都会读取这个文件etc/profile
non-login shell就是取得bash不需要重复登录,就像你在桌面视图中用ctrl+alt+T启动的shell输入窗口就是non-login shell。还有就是你在shell窗口直接su切换的用户,都属于non-login shell。
su/su-后的区别:
1、如果直接su的话,不会读取/etc/profile的,所以你的环境变量PATH,MAIL、pwd等是不会改 变的,此时是non-login shell,
2、如果想读取/etc/profile的话我们需要用su -,相当于以新用户重新启动,是login shell执行命令会查找新用户的环境变量
2、sudo命令
每次需要切换到root用户下执行命令时,都需要输入密码,不太安全;并且每次需要在root用户执行命令时,都需要先切换到root用户再执行命令,有时候可能只需要执行一次命令,解决方法:sudo
sudo:可以切换到其他用户执行命令,执行完之后自动切回原用户,并且不需要root用户的密码,只需要当前用户的密码
但是并不是所有用户都有运行sudo的权限,想要运行sudo,需要配置/etc/sudoers文件
[lxx2@172-16-8-141 /home/lxx2]
$sudo su -
[sudo] password for lxx2:
lxx2 is not in the sudoers file. This incident will be reported.
etc/sudoers文件可读但不可修改,因为sudoe这个文件是由语法构成的,仅能通过root用户下执行visudo命令修改
1、对单个用户配置sudo权限
只需要在/etc/sudoers中添加一行:Oracle ALL=(ALL) ALL
第一列表示需要开启sudo权限的用户;第二列表示该用户的主机名;第三列表示sudo默认切换到哪个用户上执行命令,只能切换到root用户;第四列表示sudo可运行的命令,就是限定该用户的执行权限
2、对多个用户配置sudo权限
1、可以照方面的方法,一行行配置;
2、也可以用用户组,将需要运行sudo的用户都添加到一个组里,可以添加到已经存在的组,如%wheel,也可以自定义,一个组里用户运行sudo可执行的命令时一样的
自定义:
3、通过别名设置
在sudoers文件里有一些别名,User_Alias表示具有sudo权限的用户列表,就是第一列參数。Host_Alias表示主机的列表。就是第二列參数。Cmnd_Alias表示同意运行命令的列表,就是第四列參数。还有个Runas_Alias。我初始的sudoers里是没有的,这个表示用户以什么身份登录。也就是第三列參数。
User_Alias LUXXUSERS = 1, manager2, manager3
Cmnd_Alias QUANXIAN = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
LXXUSERS ALL=(root) QUANXIAN
权限:有时不需要当前用户切换到其他用户执行所有命令,可以限定执行的命令
ALL表示有切换到的用户的所有权限
如/usr/bin/passwd ,就是有修改用户密码的权限,
!usr/bin/passwd root就是没有修改root密码的权限,
/bin/su - 表示有切换到除原用户外其他所有用户并且不返回原用户的权限,相当于切换到到root用户执行su -/su - username
总结;sudo 能保护目标用户的密码不外流。帮root管理系统时,su是把root全部权利交给用户,sudo可以对用户赋予root用户的一部分权利,使系统更安全,并且分工明确