Sudo命令的配置及使用
概念
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权限分配
基本格式
- 配置用户
sudo
命令配置
#表示用户(%组别)能用sudo在所有主机上使用全部命令
username ALL=(ALL) ALL
- 命令组,将多个命令创建一个组,和能使用的命令可执行文件路径。注意命令组名称需要为大写。
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
创建用户sudo权限
- 一样多个命令使用
,
进行分隔。
Server ALL=(ALL) /usr/bin/ls
为用户设置命令组
cat /etc/sudoers | grep Server
设置排除命令
- 多个命令使用
,
分隔开来
Cmnd_Alias SERVER_CODE = ALL, !/usr/bin/ls
Server ALL=(ALL) SERVER_CODE
用户组配置
- 组的名字前面需要添加一个
%
才能保证配置文件识别到这个是组
%where ALL=(ALL) SERVER_CODE
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 用户] 文件 ...
常用参数
查看可使用的命令
-l
查看当前用户能用sudo
提权使用的命令
sudo -l
指定用户执行
-u
指定一个用户执行,这时候执行的操作就会使用指定用户的权限。权限不足则会无法执行
sudo -u root apt-get update
打开另一用户shell
-i
打开另一用户的默认的shell,相当于以以那个用户执行
sudo -i
- 如果配置不当的话
sudo
启动的终端也是具备有root
权限的。
- 放置这个情况只需要排除用
sudo
来执行shell就可以防止。