安全与加密之su与sudo使用详解

2017-01-05 11:05:39来源:作者:I'm Groot人点击

本章目录

su命令的使用

sudo命令

sudo配置说明

sudo别名和示例

前言

在工作生产环境中尽量不要去使用root用户,因为root权限过大,一旦操作失误后将面临十分严重的后果。但许多的系统管理命令和服务为了安全只有超级用户才有权限使用,因此这也无疑让普通用户受到更多的权限束缚,而su命令则是用于便捷的变更使用者的身份,能够让使用者在不注销的情况下顺畅的切换至其他用户。

1.su命令的使用

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户账号和密码。

语法

su (选项)(参数)

选项

-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;

-f 或--fast:适用于csh与tsch,使用shell不用去读取启动文件;

-l或--login:改变身份时,也同时变更工作目录。以及HOME,SHELL,USER,LOGNAME,PATH变量等;

-m,-p或--preserve-environment:变更身份时,不要变更环境变量;

-s或--shell=:指定要执行的shell;

--help:显示帮助;

--version;显示版本信息

参数

用户:指定要切换身份的目标用户。

示例

变更账号为root查看root家目录后退回当前用户

[zh@zheng ~]$ su -l root -c ls密码:anaconda-ks.cfg gpgtest initial-setup-ks.cfg [zh@zheng ~]$ 小结

若要完整的切换到新使用者的环境,必须使用su - username 或 su -l username,才会彻底转换为新用户;

如果仅想运行一次root的命令,可以使用su -c 'command'的方式来实现;

使用root切换为任何使用者时,不需要输入新用户的口令。

当多人管理时,若大家都是用su来切换为root时,就面临着所有用户都需要知道root口令,这将很不安全,这时就需要用到sudo命令

2.sudo命令

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

语法

sudo (选项)(参数)

选项

-b:在后台执行指令;

-h:显示帮助; -H:将HOME环境变量设为新身份的HOME环境变量;

-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 -l:列出目前用户可执行与无法执行的指令;

-p:改变询问密码的提示符号; -s:执行指定的shell; -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;

-v:延长密码有效期限5分钟;

-V :显示版本信息。

参数

指令:需要运行的指令和对应的参数。

sudo命令特性:

sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员

sudo可以提供日志,记录每个用户使用sudo操作

sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

通过visudo命令编辑配置文件,具有语法检查功能

示例

以zh用户的身份,在tmp目录下创建一个名为mytest的文件

[root@zheng ~]# sudo -u zh touch /tmp/mytest[root@zheng ~]# ll /tmp/mytest-rw-r--r--. 1 zh zh 0 12月 5 22:34 /tmp/mytest 思考

sudo为什么默认仅有root能使用

当用户运行sudo时,系统与/etc/sudoers文件中搜寻该使用者是否有运行sudo的权限

若使用者具有可运行sudo的权限后,便让使用者输入用户自己的口令来确认

若口令输入成功,便开始进行sudo后续命令(root运行sudo时不需要输入口令)

若切换的身份与运行者身份相同,也不需要输入口令

注意:

sudo运行的重点在于,/etc/sudoers文件中是否有执行者的相关配置,所以能否使用sudo与/etc/sudoers有关,编辑sudoers文件,不能直接使用vim去修改,这个文件内容有一定的语法格式,应使用visudo命令;visudo会调用vi编辑器来修改配置文件,,若存在语法错误,则会报错。

只有超级用户才可以使用visudo命令编辑sudo配置文件(/etc/sudoers);visudo命令优势:1、可以防止多个用户同时修改sudo配置文件;2、对sudo程序配置文件的语法检查;

visudo 语法格式

使用者账号 登录者的来源主机名=(可切换的身份) 可下达的命令 root ALL=(ALL) ALL

这四个组件的意义

使用者账号:系统的哪个账号可以使用sudo这个命令,默认为root

登录者的来源主机名:登录账号由哪部主机链接到本主机,这个配置值可以指定客户端主机,默认值root可来自任何一部网络主机

可切换的身份:这个账号可以切换成什么身份来下达后面的命令,默认root可以切换成任何人

可下达的命令:可用该身份下达什么命令,这个命令请务必使用绝对路径,默认root可以切换任何身份执行任何命令

示例

1. 允许用户切换任何身份,执行所有命令

[root@centos7 ~]# visudo zh ALL=(ALL) ALL[root@centos7 ~]# su - zh[zh@centos7 ~]$ sudo -l #查看zh用户可以使用sudo执行哪些命令[sudo] password for zh: #输入zh用户明码Matching Defaults entries for zh on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin/:/bin/:/usr/sbin/:/usr/binUser zh may run the following commands on this host: (ALL) ALL # 可以使用所有命令[zh@centos7 ~]$ ls /root #直接查看root目录,被阻止ls: cannot open directory /root: Permission denied[zh@centos7 ~]$ sudo ls /root #使用sudo可以查看a.shdir1 key.pem pubkey.pem usr

2. 指定某用户只具有管理用户功能

[root@centos7 ~]# visudozh ALL=(root) /usr/bin/passwd[root@centos7 ~]# su - zh[zh@centos7 ~]$ sudo passwd lisi[sudo] password for zh: Changing password for user lisi.New password: Retype new password: passwd: all authentication tokens updated successfully.[zh@centos7 ~]$ su - lisiPassword: [lisi@centos7 ~]$ whoamilisi# 此时就面临一个问题,这个用户是不是就可以更改root用户的密码呢?[zh@centos7 ~]$ sudo passwd Changing password for user root. # 修改的为root的密码New password: Retype new password: passwd: all authentication tokens updated successfully.[zh@centos7 ~]$ sudo passwd rootChanging password for user root. # 指定修改root密码也可以New password: Retype new password: passwd: all authentication tokens updated successfully.[zh@centos7 ~]$ su - rootPassword: Last login: Thu Dec 29 10:24:12 CST 2016 from 192.168.1.104 on pts/1[root@centos7 ~]# whoamiroot#此时该如何解决呢?[root@centos7 ~]# visudo99 zh ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root# 加上!,代表不可运行的意思。因此定义为:可以运行passwd+除root以为的任意字符。[root@centos7 ~]# su - zh[zh@centos7 ~]$ sudo passwdSorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.[zh@centos7 ~]$ sudo passwd rootSorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.[zh@centos7 ~]$ sudo passwd lisiChanging password for user lisi.New password: Retype new password: passwd: all authentication tokens updated successfully.

3. 使用群组免口令功能

# 新建一个user1组,将zh用户加入user1[root@centos7 ~]# useradd user1[root@centos7 ~]# usermod -G user1 zh[root@centos7 ~]# id zhuid=1008(zh) gid=1020(zh) groups=1020(zh),1021(user1)# 编辑sudo配置文件[root@centos7 ~]# visudo%user1 ALL=(ALL) NOPASSWD: ALL# 测试[zh@centos7 ~]$ sudo ls /roota.shdir1 key.pem pubkey.pem usr[zh@centos7 ~]$ sudo -k [zh@centos7 ~]$ sudo ls /roota.shdir1 key.pem pubkey.pem usr[zh@centos7 ~]$ exitlogout[root@centos7 ~]# su - user1[user1@centos7 ~]$ sudo ls /roota.shdir1 key.pem pubkey.pem usr

4. 通过别名设置sudo

别名具有以下四种类型

Host_Alias:定义主机别名

User_Alias:定义用户别名,别名成员可以为用户,也可以为用户组(前面加%)

Runas_Alias:定义runas别名,这个别名为“目的用户”,即sudo允许切换至的用户;

Cmnd_Alias:定义命令别名

[root@centos7 ~]# visudo User_Alias USERADMIN = zh,user1Cmnd_Alias ADMINCMD = !/usr/bin/passwd,/usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwd root USERADMIN ALL=(root) ADMINCMD#测试[root@centos7 ~]# su - zhLast login: Tue Jan 3 11:37:05 CST 2017 on pts/0[zh@centos7 ~]$ sudo ls /rootSorry, user zh is not allowed to execute '/bin/ls /root' as root on centos7.[zh@centos7 ~]$ sudo passwdSorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.[zh@centos7 ~]$ sudo passwd rootSorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.[zh@centos7 ~]$ sudo passwd lisiChanging password for user lisi.New password: Retype new password: passwd: all authentication tokens updated successfully.[root@centos7 ~]# su - user1Last login: Tue Jan 3 11:41:34 CST 2017 on pts/0[user1@centos7 ~]$ sudo ls /root/Sorry, user user1 is not allowed to execute '/bin/ls /root/' as root on centos7.[user1@centos7 ~]$ sudo passwd Sorry, user user1 is not allowed to execute '/bin/passwd' as root on centos7.[user1@centos7 ~]$ sudo passwd rootSorry, user user1 is not allowed to execute '/bin/passwd root' as root on centos7.[user1@centos7 ~]$ sudo passwd lisiChanging password for user lisi.New password: Retype new password: passwd: all authentication tokens updated successfully.

sudo搭配su的使用方法:

很多时候我们需要大量运行很多root的工作,所以一直使用sudo确实比较麻烦。那么我们可以使用sudo搭配su使用,将身份转为root,而且还用用户自己的口令变成root。这样一来,可以更加方便的管理系统,而且root密码也不会泄露。

示例

[root@centos7 ~]# visudo User_Alias USERADMIN = zh,user1USERADMIN ALL=(root) /bin/su -[root@centos7 ~]# su - zh[zh@centos7 ~]$ sudo su - [sudo] password for zh: Last login: Tue Jan 3 10:11:55 CST 2017 from 192.168.1.104 on pts/0[root@centos7 ~]# lsa.sh dir1 key.pem pubkey.pem usr[root@centos7 ~]# exitlogout[zh@centos7 ~]$ exitlogout[root@centos7 ~]#

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台