Linux基础学习教程

Linux 基础教程 43-su和sudo命令

2018-08-29  本文已影响4人  Surpassme

    在使用Linux系统中,有时候还需要做身份切换,这是为什么?

    基于以上考虑,在日常应用中都是使用普通账户进行登录和常用操作。如果需要维护系统或安装、更新软件时,则需要切换到root身份进行操作。而常用的方式主要有两个:

su

    su全称为:switch user,其主要功能为进行任何身份的切换,其常用用法如下所示:

基本用法

su [选项] [用户名]
su -c 命令

常用选项如下所示:

选项 解释
-,-l 切换身份的同时初始化HOME/SHELL/USER/LOGNAME/PATH等变量
-c command 仅执行一次指定的命令,而后恢复原来的身份
-m 使用当前的环境设置而不读取新用户的配置文件
-s SHELL 运行指定的SHELL,仅支持/etc/shells中支持的SHELL

su注意事项

用法示例

1、切换到root

[admin@localhost ~]$ su -
密码:
上一次登录:六 8月 18 18:10:46 CST 2018pts/2 上
最后一次失败的登录:六 8月 18 18:17:04 CST 2018从 58.218.92.37ssh:notty 上
最有一次成功登录后有 142 次失败的登录尝试。
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)

root用户的后缀是 # ,而普通用户为 $

2、执行指定命令行后即返回原来的身份

[admin@localhost ~]$ head -n 2  /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够
[admin@localhost ~]$ su - -c "head -n 2  /etc/shadow"
密码:
root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
bin:*:17632:0:99999:7:::

sudo

    su使用起来非常方便,但同样也存在安全隐患。在一台服务器上面,如果有多人使用,在使用su命令切换到root后,则大家都知道了root密码,那么以后其他用户均可以以root用户身份登录和维护服务器,则安全策略形同虚设了。那该如何是好?Linux系统中则提供了另外一个命令sudo

基本用法

    sudo主要功能是以其他用户身份执行命令,而要输入的密码也仅仅是当前用户身身的密码而非root账户密码,类似于Windows系统中的以管理员身份运行。其常用用法如下所示:

sudo [选项] [命令]

常用选项如下所示:

选项 解释
-b 在后台执行指定的命令
-u 以指定用户身份运行,如不指定则默认为root
-e 编辑文件而不是运行命令

执行流程

基本配置

[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL # 系统默认
admin   ALL=(ALL)       ALL # 用户增加

各项解释如下所示:
root/admin:用户账号,指定哪些账号可使用sudo命令
ALL=(ALL):登录者的来源主机名=可切换的身份
  登录者的来源主机名:设置账号可由哪一台网络主机连接过来,即设置可信任主机。
  可切换的身份:账号可以切换成什么身份来执行后续的命令
ALL:可执行的命令:这个路径必须以绝对路径来填写
  ALL是特殊关键字,代表任何身份、任何主机和任何命令的意思。

# 修改用户的属组,只用户属于wheel则可以执行sudo命令
[root@localhost ]# usermod -a -G wheel admin

[root@localhost ~]# visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL # %wheel:代表任何组

# 使用sudo 命令而不需要输入密码
%wheel  ALL=(ALL)       NOPASSWD: ALL
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 该用户仅有执行 ls 的权限,路径必须为绝对路径
admin   ALL=(ALL)       /usr/bin/ls
# 添加用户的执行sudo命令的排除权限,! 表示不可执行
admin   ALL=(ALL)   !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 批量设置命令权限
## Command Aliases
Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum

# 设置sudo的限制命令
ADMINS ALL=(root) SOFTWARE

通过别名进行权限设置均需要使用大写字符

[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 设置sudo的限制命令
ADMINS ALL=(root) /usr/bin/su -
# 使用按以下输入即可,即可直接切换为root用户
[root@localhost ~]# sudo su -

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

MyQRCode.jpg
上一篇 下一篇

猜你喜欢

热点阅读