在 Linux 和其他类 Unix 操作系统中,只有根用户可以运行所有命令并在系统上执行某些关键操作,例如安装和更新、删除软件包、、修改重要的系统配置文件等。
然而,承担 root 用户角色的系统管理员可以在以下命令的帮助下允许其他普通系统用户:以及一些配置来运行一些命令以及执行许多重要的系统操作,包括上面提到的操作。
或者,系统管理员可以共享 root 用户密码(这不是推荐的方法),以便普通系统用户可以通过以下方式访问 root 用户帐户:是命令。
须藤允许允许的用户以 root(或其他用户)身份执行命令,如安全策略所指定:
- 它读取并解析/etc/sudoers,查找调用用户及其权限,
- 然后提示调用用户输入密码(通常是用户的密码,但也可以是目标用户的密码。或者可以使用 NOPASSWD 标签跳过),
- 之后, sudo 创建一个子进程,在其中调用setuid()切换到目标用户
- 接下来,它执行 shell 或上面子进程中作为参数给出的命令。
下面有十个/etc/sudoers文件配置来修改行为须藤命令使用默认值条目。
$ sudo cat /etc/sudoers
/etc/sudoers 文件
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults logfile="/var/log/sudo.log" Defaults lecture="always" Defaults badpass_message="Password is wrong, please try again" Defaults passwd_tries=5 Defaults insults Defaults log_input,log_output
默认条目的类型
Defaults parameter, parameter_list #affect all users on any host Defaults@Host_List parameter, parameter_list #affects all users on a specific host Defaults:User_List parameter, parameter_list #affects a specific user Defaults!Cmnd_List parameter, parameter_list #affects a specific command Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
对于本指南的范围,我们将归零到第一种类型默认值在下面的表格中。参数可以是标志、整数值、字符串或列表。
您应该注意,标志是隐式布尔值,可以使用'!'运算符,列表还有两个附加的赋值运算符,+=(添加到列表)和-=(从列表中删除)。
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. 设置安全路径
这是使用 sudo 运行的每个命令所使用的路径,它有两个重要性:
- 当系统管理员不信任 sudo 用户拥有安全的 PATH 环境变量时使用
- 要分离“根路径”和“用户路径”,仅定义用户豁免组不受此设置的影响。
要设置它,请添加以下行:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. 在 TTY 用户登录会话上启用 sudo
使 sudo 能够从真实的环境中调用终端但不是通过诸如计划任务或者cgi-bin脚本,添加行:
Defaults requiretty
3. 使用 pty 运行 Sudo 命令
有几次,攻击者可以使用 sudo 运行恶意程序(例如病毒或恶意软件),这会再次派生一个后台进程,即使主程序已完成执行,该进程仍保留在用户的终端设备上。
为了避免这种情况,您可以将 sudo 配置为仅从某个目录运行其他命令伪性使用use_pty参数,是否打开I/O日志记录如下:
Defaults use_pty
4. 创建 Sudo 日志文件
默认情况下,sudo 通过 syslog(3) 记录日志。但是,要指定自定义日志文件,请使用 logfile 参数,如下所示:
Defaults logfile="/var/log/sudo.log"
要在自定义日志文件中记录主机名和四位数年份,请使用日志主机和日志年参数分别如下:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
以下是自定义 sudo 日志文件的示例:

5. 记录 Sudo 命令输入/输出
这日志输入和日志输出参数使 sudo 能够在伪 tty 中运行命令并记录所有用户输入和所有发送到屏幕的输出。
默认 I/O 日志目录是/var/log/sudo-io,如果有会话序列号,则存储在该目录中。您可以通过指定自定义目录iolog_dir范围。
Defaults log_input, log_output
支持一些转义序列,例如%{seq}它扩展为单调递增的base-36序列号,例如000001,其中每两位数字用于形成一个新目录,例如00/00/01如下例所示:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

您可以使用以下命令查看该目录中的其余文件。
6. 讲座Sudo用户
要向 sudo 用户讲解系统上的密码使用情况,请使用演讲参数如下。
它有 3 个可能的值:
- 总是——总是教导用户。
- 一次 – 仅在用户第一次执行 sudo 命令时对他们进行讲授(在未指定值时使用)
- 从不——从不教训用户。
Defaults lecture="always"
此外,您可以使用以下命令设置自定义讲座文件讲座文件参数,在文件中键入适当的消息:
Defaults lecture_file="/path/to/file"

7. 输入错误的 sudo 密码时显示自定义消息
当用户输入错误的密码时,命令行上会显示特定消息。默认消息是“抱歉,请重试”,您可以使用以下命令修改消息badpass_消息参数如下:
Defaults badpass_message="Password is wrong, please try again"
8.增加sudo密码尝试次数限制
参数密码尝试用于指定用户可以尝试输入密码的次数。
默认值为 3:
Defaults passwd_tries=5

使用以下命令设置密码超时(默认为 5 分钟)密码超时参数,添加以下行:
Defaults passwd_timeout=2
9.当你输入错误的密码时让Sudo侮辱你
如果用户输入错误的密码,sudo 会在终端上显示侮辱,并带有侮辱参数。这将自动关闭badpass_消息范围。
Defaults insults

阅读更多:
10.了解更多Sudo配置
此外,您还可以了解更多须藤通过阅读命令配置:。
就是这样!您可以分享其他有用的 sudo 命令配置或用户可以通过下面的评论部分进行评论。
