su命令与sudo服务

2019-12-23  本文已影响0人  别把风景搬上天堂

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     #引用上面的别名
上一篇 下一篇

猜你喜欢

热点阅读