su命令
在Linux中,当以某个用户登录后,在不退出系统重新登录的情况下,可以切换成另一个用户,使用su命令来实现。
su 命令语法格式:
su [options] [-] [user [arg]...]
选项 | 说明 |
---|---|
-m, -p | 保留环境变量 |
-g | 指定主要组 |
-G | 指定附属组 |
-,-l,-login | 开启login shell ,如果没指定的用户,默认为root |
-c | 执行命令 |
-s | 运行指定的shell |
-h | 帮助 |
-V | 查看版本 |
[root@localhost ~]# echo $PATH #查看当前用户的环境变量和工作目录
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost root]$ pwd
/root
[root@localhost ~]# su wufujie #su 切换用户
[wufujie@localhost root]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[wufujie@localhost root]$ pwd
/root
[root@localhost ~]# su - wufujie # su - 切换用户
Last login: Mon Dec 23 20:14:25 CST 2019 on pts/3
[wufujie@localhost ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wufujie/.local/bin:/home/wufujie/bin
[wufujie@localhost ~]$ pwd
/home/wufujie
[root@localhost ~]# pstree | grep bash #查看进程树
|-gnome-terminal--+-bash
|-sshd-+-sshd---bash---su---bash-+-grep
| `-sshd---bash---vim
[root@localhost ~]# su wufujie
[wufujie@localhost root]$ pstree | grep bash
|-gnome-terminal--+-bash
|-sshd-+-sshd---bash---su---bash---su---bash-+-grep
| `-sshd---bash---vim
通过上面的例子可以看出在使用su切换用户时,当前工作目录和环境变量保持不变,当使用su - 切换用户时,当前工作目录和环境变量都发生了变化。因此,我们一般将su USER 称为不完全切换,su - USER 称为完全切换。
通过上面的执行过程,所谓的不完全切换只是在原来的shell中又通过su 新开了一个shell。
sudo服务
在使用su命令时,从root切换到普通用户可以直接切换,不用输入密码,而从普通用户切换到root用户,则需要输入密码;此时可以通过sudo技术实现对普通用户的授权,使其可以执行授权过的管理特定的任务。
sudo的配置文件放置在/etc/sudoers。不管sudoers文件放置在哪里,有一个专用命令visudo来编辑该文件。强烈建议使用visudo命令来修改sudoers,因为它会帮助校验文件是否正确,在保存退出时,会提示你哪段配置出错。
sudoers缺省变量如下:
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root 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
root | ALL | = | (ALL) | ALL |
---|---|---|---|---|
用户名 | 主机名 | = | 以什么身份运行 | 要执行的命令 |
例如:① wufujie ALL=(ALL) ALL 这条命令表示wufujie用户可以在任意主机上执行任意权限,即获得了root的所有权限
② wufujie ALL=/bin/chown,/bin/chmod 这条命令表示用户wufujie可以在任意主机名的系统中切换到root用户下执行/bin/chown,/bin/chmod命令。在(ALL)省略的情况下,默认为root.
[wufujie@localhost ~]$ sudo -l #通过sudo -l 或 sudo -ll查看用户被授权情况
User wufujie may run the following commands on localhost:
(root) /bin/chown, /bin/chmod
③ wufujie ALL=(ALL) NOPASSWD:ALL 示例①在执行命令时还需要输入root的密码,NOPASSWD: 定义了用户执行操作时不需要输入密码
④ wufujie ALL=(root)NOPASSWD:/bin/chown,/bin/chmod 这条命令表示用户wufujie可以在任意主机名的系统中切换到root用户下执行/bin/chown,并且不需要密码,能在root用户下执行/bin/chmod命令需要输入密码。
⑤ %wufujie ALL=/bin/chown,/bin/chmod 加上%表示用户组,只要在该用户组下的用户皆可执行该命令的赋予的权限
⑥ wufujie ALL=/usr/sbin/,/sbin/,!/usr/sbin/fdisk 该命令表示wufujie用户可以在
任意主机上运行任意/usr/sbin和/sbin下的所有命令,/usr/sbin/fdisk除外
在sudoers文件中,可以使用别名,对复杂场景下简化授权过程。
User_Alias SYSADER=wufujie,wfj,%wufujie #定义用户别名SYSADER,表示用户wufujie,wfj和组wufujie
Host_Alias SERS=192.168.0.0/24,192.168.0.99 #定义主机别名SERS ,表示指定的网络和主机
Runas_Alias OP=root #定义runas别名OP,表示以root身份执行命令
Cmd_Alias DSKCMD=/sbin/parted,/sbin/fdisk #定义命令别名DSKCMD,表示parted和fdisk
SYSADER SERS=(OP) DSKCMD #引用上面的别名
网友评论