安全与加密之su与sudo使用详解
本章目录
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/bin User 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.sh dir1 key.pem pubkey.pem usr
2.指定某用户只具有管理用户功能
[root@centos7 ~]# visudo zh 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 - lisi Password: [lisi@centos7 ~]$ whoami lisi # 此时就面临一个问题,这个用户是不是就可以更改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 root Changing password for user root. # 指定修改root密码也可以 New password: Retype new password: passwd: all authentication tokens updated successfully. [zh@centos7 ~]$ su - root Password: Last login: Thu Dec 29 10:24:12 CST 2016 from 192.168.1.104 on pts/1 [root@centos7 ~]# whoami root #此时该如何解决呢? [root@centos7 ~]# visudo 99 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 passwd Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7. [zh@centos7 ~]$ sudo passwd root Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7. [zh@centos7 ~]$ sudo passwd lisi Changing 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 zh uid=1008(zh) gid=1020(zh) groups=1020(zh),1021(user1) # 编辑sudo配置文件 [root@centos7 ~]# visudo %user1 ALL=(ALL) NOPASSWD: ALL # 测试 [zh@centos7 ~]$ sudo ls /root a.sh dir1 key.pem pubkey.pem usr [zh@centos7 ~]$ sudo -k [zh@centos7 ~]$ sudo ls /root a.sh dir1 key.pem pubkey.pem usr [zh@centos7 ~]$ exit logout [root@centos7 ~]# su - user1 [user1@centos7 ~]$ sudo ls /root a.sh dir1 key.pem pubkey.pem usr
4.通过别名设置sudo
别名具有以下四种类型
Host_Alias:定义主机别名
User_Alias:定义用户别名,别名成员可以为用户,也可以为用户组(前面加%)
Runas_Alias:定义runas别名,这个别名为“目的用户”,即sudo允许切换至的用户;
Cmnd_Alias:定义命令别名
[root@centos7 ~]# visudo User_Alias USERADMIN = zh,user1 Cmnd_Alias ADMINCMD = !/usr/bin/passwd,/usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwd root USERADMIN ALL=(root) ADMINCMD #测试 [root@centos7 ~]# su - zh Last login: Tue Jan 3 11:37:05 CST 2017 on pts/0 [zh@centos7 ~]$ sudo ls /root Sorry, user zh is not allowed to execute '/bin/ls /root' as root on centos7. [zh@centos7 ~]$ sudo passwd Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7. [zh@centos7 ~]$ sudo passwd root Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7. [zh@centos7 ~]$ sudo passwd lisi Changing password for user lisi. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@centos7 ~]# su - user1 Last 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 root Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on centos7. [user1@centos7 ~]$ sudo passwd lisi Changing 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,user1 USERADMIN 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 ~]# ls a.sh dir1 key.pem pubkey.pem usr [root@centos7 ~]# exit logout [zh@centos7 ~]$ exit logout [root@centos7 ~]#
转载于:https://blog.51cto.com/groot/1888914