前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统信服务器操作系统 [su sudo 用户权限控制]

统信服务器操作系统 [su sudo 用户权限控制]

作者头像
Kevin song
发布2024-05-20 14:46:22
730
发布2024-05-20 14:46:22
举报

sudo和su之间的区别

  • su用于用户之间的切换
  • sudo用于普通用户可以使用root权限来执行命令

su命令是当前用户用来切换到另外一个用户的命令,参数为用户名。执行时会要求输入密码,这个密码是你要切换到的用户的密码。

sudo 表示 “superuser do”。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,绝大部分时候我们用它来以提升的权限来运行命令。

sudo命令工作流程

  1. sudo会读取和解析/etc/sudoers文件,查找调用的用户及权限
  2. 提示调用该命令用户的密码,如果有NOPASSWD标志则跳过密码验证.
  3. sudo会创建一个子进程,调用setuid来切换到目标用户
  4. 最后在子进程中执行给定的shell命令

sudoers配置文件格式

代码语言:javascript
复制
USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
  • USER/GROUP: 表示要被授权的用户或组,如果是组要以%开头
  • HOST: 表示允许从哪些主机登录的用户运行sudo,ALL表示允许任何终端机器访问.
  • (USER[:GROUP]): 表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户.
  • NOPASSWD:如果指定,则该用户或者组使用sudo时就不用输入密码
  • COMMANDS:表示运行指定的命令,ALL表示允许指定任何命令,可配置命令1,命令2,...

用户执行sudo命令(需要输入用户密码)

vi /etc/sudoers

代码语言:javascript
复制
指定执行命令
ytzmdz    ALL=(ALL)    /bin/less,/bin/ls
执行所有命令
ytzmdz    ALL=(ALL)    ALL

用户执行sudo命令(不需要输入用户密码)

代码语言:javascript
复制
ytzmdz  ALL=(ALL)      NOPASSWD: ALL

%wheel 组中用户执行sudo命令(需要输入密码)

代码语言:javascript
复制
%wheel   ALL=(ALL)       ALL

%wheel 组中用户执行sudo命令(不需要输入密码)

代码语言:javascript
复制
%wheel   ALL=(ALL)       NOPASSWD: ALL

查看sudo操作记录

进入visudo文件输入Defaults logfile = “/var/log/sudo”命令保存并退出

查看sudo 命令日志

将用户添加wheel组

代码语言:javascript
复制
usermod  -G wheel ytzmdz

查看用户组

代码语言:javascript
复制
id ytzmdz
groups ytzmdz

撤销用户附加wheel组

方法一:gpasswd

代码语言:javascript
复制
sudo gpasswd -d ytzmdz wheel

方法二:修改/etc/group文件

代码语言:javascript
复制
[root@localhost ~]# cat  /etc/group |grep wheel               
wheel:x:10:ytzmdz
[root@localhost ~]# sed -i 's#wheel:x:10:ytzmdz#wheel:x:10:#g' /etc/group
[root@localhost ~]# groups ytzmdz
ytzmdz : ytzmdz
[root@localhost ~]#

sudo的原理

代码语言:javascript
复制
[root@localhost ~]# ls -l /usr/bin/sudo
---s--x--x 1 root root 178264 Apr 13  2023 /usr/bin/sudo

sudo 执行程序上启用了setuid位。当任何用户运行这个二进制文件时,它将以拥有该文件的用户(root用户)权限运行。

当使用sudo执行 id 命令时,将显示用户 ytzmdz的 id

代码语言:javascript
复制
[ytzmdz@localhost ~]$ id
uid=1001(ytzmdz) gid=1001(ytzmdz) groups=1001(ytzmdz)

使用sudo id时,将显示用户root的id

代码语言:javascript
复制
[ytzmdz@localhost ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root)

不切换用户终端,sudo 指定用户执行命令

代码语言:javascript
复制
sudo -u ytzmdz  whoami

su

`su` 命令用于切换用户。如果不加任何参数,它会要求输入目标用户的密码,然后提供一个该用户的登录shell(不切换环境变量)。

- 如果使用 `su -`(注意有一个短横线),它会尝试模拟一个完整的登录过程,包括加载用户的profile文件和环境变量,更像是一个完整的用户切换(切换环境变量)。

su命令使每个用户都具有反复尝试其他用户的登陆密码的能力,具有安全隐患,若是su -root用户,则风险更大。所以需要加强su命令的使用控制,可以借助PAM认证模块,仅允许特定用户可使用su命令进行切换,授权wheel组中用户使用使用su命令,修改/etc/pam.d/su认证配置以启用pam wheel 认证。

启用pam_wheel认证模块

vim /etc/pam.d/su

代码语言:javascript
复制
取消auth required pam_wheel.so use_uid注释
auth required pam_wheel.so use_uid

在/etc/ pam.d/su文件账户su控制介绍

代码语言:javascript
复制
auth sufficient pam_ rootok.so
#auth required pam_ wheel.so use__uid

以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的

两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码

(pam_rootok)so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令

如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令

su命令继承用户环境变量禁止引入提权

如果通过su切换用户后系统会自动初始化环境变量PATH,则可以有效防范由于继承环境变量PATH而导致的提权问题。

检查/etc/login.defs中是否配置了自动初始化环境变量PATH,即ALWAYS_SET_PATH=yes

cat /etc/login.defs | grep ALWAYS_SET_PATH

代码语言:javascript
复制
ALWAYS_SET_PATH=yes

sudo

`sudo` 命令允许授权的用户以root用户的权限来执行命令。它会保留当前用户的环境变量和工作目录。`sudo` 默认会询问密码,密码是执行命令的用户的密码,可在sudoer 配置文件设置用户执行sudo命令免密。

sudo -i

`sudo -i` 命令会启动一个新的 shell,并且提供 root 用户登录的环境。它会将用户放置在 root 用户的 home 目录中,并加载 root 用户的 shell 配置文件。

sudo su

`sudo su` 命令实际上是先使用 `sudo` 以root用户的权限执行 `su` 命令。用于获取一个 root 用户的 shell,但不会加载 root 用户的完整环境。使用 `sudo su -`,它将更接近于 `sudo -i` 的效果,提供一个完整的 root 用户环境。

sudo -s

`sudo -s` 命令启动一个新的 shell,但允许用户指定一个 shell 提示符。它不会改变用户的 home 目录,但会提供一个 root 用户的 shell 环境。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档