Linux的权限委派
在Linux系统中,权限委派是一种将系统管理权限或特定资源的访问权限从超级用户(root)分配给普通用户或组的机制,以实现更灵活、安全的权限管理。
一、/etc/suders文件介绍
sudo 的权限控制可以在 /etc/sudoers 文件中查看到。一般来说,通过查看 /etc/sudoers 指令来查看该文件,会看到如下的权限代码。[root@centos79-68-81 etc]# grep "^$" /etc/sudoers -v|grep ^# -vDefaults!visiblepwDefaultsalways_set_homeDefaultsmatch_group_by_gidDefaultsalways_query_group_pluginDefaultsenv_resetDefaultsenv_keep ="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"Defaultsenv_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"Defaultsenv_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"Defaultsenv_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"Defaultsenv_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"Defaultssecure_path = /sbin:/bin:/usr/sbin:/usr/binrootALL=(ALL)ALL%wheelALL=(ALL)ALL#/etc/sudoers文件介绍1.介绍该文件采用特定的语法格式来定义规则。每行规则通常包含用户、主机、命令等信息,以空格或制表符分隔。注释行以#开头。2.语法授权用户/组 主机=[(切换到哪些用户或组)][是否需要输入密码验证] 命令1,命令2,...(1)用户定义可以是具体的用户名,如 john;也可以是用户组,以 % 开头,如 %admin 表示 admin 组的所有成员;还可以使用 ALL 表示所有用户。(2)主机指定规则适用的主机,可以是具体的主机名、IP 地址,如 localhost、192.168.1.100,或者使用 ALL 表示所有主机。如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令(3)被授权用户表示用户可以以何种身份执行命令,通常为 root 或其他特定用户,用括号括起来。例如,(root)表示以 root 用户身份执行命令;(user1)表示以 user1 的身份执行命令。如果要允许以多个用户身份执行命令,可以用逗号分隔,如 (root, user2)。(4)命令列表明确用户被允许执行的命令。可以是具体的命令路径,如`/usr/bin/yum`、`/sbin/useradd`;也可以使用 `ALL` 表示拥有所有命令权限。如果有多个命令,同样用逗号分隔。例如,`/usr/bin/yum, /usr/bin/rpm` 表示允许执行这两个命令。3.特殊参数(1)NOPASSWD如果在命令列表前加上`NOPASSWD:`,则表示该用户执行指定命令时无需输入密码。例如,`%admin ALL=(ALL)NOPASSWD: ALL`,表示 admin 组的用户在任何主机上以任何用户身份执行任何命令都无需密码。(2)PASSWD与`NOPASSWD` 相反,使用 `PASSWD:` 明确要求用户执行命令时必须输入密码,这是默认行为,通常可以省略不写。例如,`user1 ALL=(root)PASSWD: /usr/bin/yum`,表示用户 user1 在任何主机上以 root 身份执行 yum 命令时需要输入密码。4.示例user1 ALL=(ALL)ALL表示用户 user1 可以在任何主机上以任何用户的身份执行任何命令,执行命令时需要输入 user1 的密码。%admin ALL=(ALL)NOPASSWD: ALL意味着 admin 组中的所有用户可以在任何主机上以任何用户的身份执行任何命令,并且无需输入密码。user2 localhost=(root)/usr/bin/yum, /usr/bin/rpm表示用户 user2 只能在本地主机(localhost)上以 root 用户的身份执行yum和rpm这两个命令。5.修改sudoers文件在实践中如果想编辑/etc/sudoers文件必须获得root的权限,这是因为/etc/sudoers的内容非常敏感,以至于该文件是只读的。所以,编辑该文件前,请确认清楚你知道自己正在做什么。强烈建议通过visudo命令来修改该文件,通过visudo修改,如果配置出错,会有提示。不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目录下的文件中。如果使用这种方式修改sudoers,需要在/etc/sudoers文件的最后行,加上#includedir /etc/sudoers.d一行(默认已有):#includedir /etc/sudoers.d注意了,这里的指令#includedir是一个整体,前面的#号不能丢,并非注释,也不能在#号后有空格。任何在/etc/sudoers.d/目录下,不以~号结尾的文件和不包含.号的文件,都会被解析成/etc/sudoers的内容。#示例1.基础示例[root@centos79-68-99 ~]# cat /etc/sudoers.d/customot1 ALL=(root)NOPASSWD: /bin/chown,/usr/sbin/useradd用户ot1能在所有可能出现的主机上,提权到root下执行/bin/chown,不必输入密码;但运行/usr/sbin/useradd 命令时需要密码。NOPASSWD:只影响了其后的第一个命令完整的公式如下:授权用户/组 主机=[(切换到哪些用户或组)][是否需要输入密码验证] 命令1, [(字段3)][字段4] 命令2, ...2.通配符以及取消命令ot1 ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk命令前面加上!号表示取消该命令。该例子的意思是:用户lzl在所有可能出现的主机上,能够运行目录/usr/sbin和/sbin下所有的程序,但fdisk除外。3.输入密码时有反馈当使用sudo后输入密码,并不会显示任何东西 — 甚至连常规的星号都没有。有个办法可以解决该问题。打开/etc/sudoers文件找到下述一行:Defaults env_reset修改成:Defaults env_reset,pwfeedback4.修改sudo会话时间如果你经常使用sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用再输入密码就可以运行几次sudo命令。但是一段时间后,sudo 命令会再次要求你输入密码。默认是15分钟,该时间可以调整。添加timestamp_timeout=分钟数即可。时间以分钟为单位,-1表示永不过期,但强烈不推荐。比如我希望将时间延长到1小时,还是打开/etc/sudoers文件找到下述一行:Defaults env_reset修改成:Defaults env_reset,pwfeedback,timestamp_timeout=60
二、sudo命令介绍
#sudo 命令sudo 是 Linux 系统中用于允许普通用户以超级用户或其他用户的身份执行命令的工具。通过配置 sudo,可以精确地指定哪些用户可以以何种身份执行哪些命令,实现权限的精细委派。-u<用户>:指定以哪个用户的身份执行命令,而不是默认的 root 用户。例如,sudo -u user1 id 表示以 user1 的身份执行 id 命令。-s:以 root 身份启动一个新的 shell 会话。在这个新的 shell 中,后续执行的所有命令都将以 root 权限运行,直到你输入 exit 退出该会话。如 sudo -s。-i:模拟登录 shell,这会加载目标用户的环境变量和配置文件。例如,sudo -i-u user1 会以 user1 的身份登录并加载其环境。-l:列出当前用户可以使用 sudo 执行的命令。如果加上 -U<用户> 选项,则可以列出指定用户能使用 sudo 执行的命令,如 sudo -l-U user1。-k:清除当前用户的 sudo 时间戳,下次使用 sudo 时需要重新输入密码。