概念
sudo 命令是 Linux 系统中一个非常重要的工具,它允许普通用户以超级用户(通常是 root)或其他用户的身份执行命令。从概念上来说,在普通用户在权限不够的时候,通过 sudo 命令 “摇人”,这个 “人” 就是拥有更高权限的用户(通常是 root)。
sudoers
文件在etc
目录下。通过使用命令visudo
来进行编辑,因为它具有检测功能。
Sudo文件格式
目录结构
名称 |
位置 |
说明 |
/etc/sudoers |
/etc/sudoers |
sudo 的核心配置文件,使用 visudo 编辑,定义用户或组的 sudo 权限。 |
/etc/sudoers.d/ |
/etc/sudoers.d/ |
存放sudo 配置文件的子目录,权限设为 440,系统会自动读取。 |
/var/log/auth.log |
/var/log/auth.log |
记录sudo 使用情况的日志文件,用于审计和故障排除。 |
/usr/bin/sudo |
/usr/bin/sudo |
sudo 命令的可执行文件位置。 |
/usr/lib/sudo/ |
/usr/lib/sudo/ |
包含sudo 相关的库和辅助文件,支持 sudo 运行。 |
sudoers权限分配
基本格式
- 命令组,将多个命令创建一个组,和能使用的命令可执行文件路径。注意命令组名称需要为大写。
Cmnd_Alias groupname = /usr/bin/ls, /usr/sbin/wget, /usr/bin/curl
|
创建命令组
Cmnd_Alias SERVER_CODE = /usr/bin/wget, /usr/bin/ls, /usr/bin/cat
|
![Pasted-image-20250120161618]()
创建用户sudo权限
Server ALL=(ALL) /usr/bin/ls
|
![Pasted-image-20250120161638]()
为用户设置命令组
cat /etc/sudoers | grep Server
|
![Pasted-image-20250120162533]()
设置排除命令
Cmnd_Alias SERVER_CODE = ALL, !/usr/bin/ls Server ALL=(ALL) SERVER_CODE
|
![Pasted-image-20250120163233]()
用户组配置
- 组的名字前面需要添加一个
%
才能保证配置文件识别到这个是组
%where ALL=(ALL) SERVER_CODE
|
![Pasted-image-20250120164111]()
Sudo命令
命令参数
┌──(Server㉿lvy)-[~] └─$ sudo 用法: sudo -h | -K | -k | -V 用法: sudo -v [-ABkNnS] [-g 组] [-h 主机] [-p 提示符] [-u 用户] 用法: sudo -l [-ABkNnS] [-g group] [-h host] [-p prompt] [-U user] [命令 [arg ...]] [-U 用户] 使用方法: sudo [-ABbEHkNnPS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command [arg ...]] [-g 组] [-h 主机] [-p 提示符] [-R 目录] [-T 超时] [-u user] [VAR=value] [-i | -s] [command [arg ...]] (命令) 用法: sudo -e [-ABkNnS] [-r role] [-t type] [-C num] [-D directory] [-g 组] [-h 主机] [-p 提示符] [-R 目录] [-T 超时] [-u 用户] 文件 ...
|
常用参数
查看可使用的命令
![Pasted-image-20250120164635]()
指定用户执行
-u
指定一个用户执行,这时候执行的操作就会使用指定用户的权限。权限不足则会无法执行
sudo -u root apt-get update
|
![Pasted-image-20250120165132]()
打开另一用户shell
-i
打开另一用户的默认的shell,相当于以以那个用户执行
![Pasted-image-20250120170719]()
- 如果配置不当的话
sudo
启动的终端也是具备有root
权限的。
![Pasted-image-20250120171154]()
- 放置这个情况只需要排除用
sudo
来执行shell就可以防止。
![Pasted-image-20250120171544]()