设置Linux中’sudo’的10个有用的Sudoers配置

在Linux和其他类Unix操作系统中,只有root用户可以运行所有命令并执行系统上的某些关键操作,例如安装和更新、删除软件包、创建用户和组、修改重要的系统配置文件等。

然而,扮演root用户角色的系统管理员可以通过sudo命令和一些配置,允许其他普通系统用户运行一些命令以及执行一些重要的系统操作,包括上述提到的操作。

另外,系统管理员可以共享root用户密码(这不是推荐的方法),以便普通系统用户通过su命令访问root用户账户。

sudo允许被授权的用户按照安全策略的规定以root(或其他用户)的身份执行命令:

  1. 它读取和解析/etc/sudoers,查找调用用户及其权限,
  2. 然后提示调用用户输入密码(通常是用户的密码,但也可以是目标用户的密码。或者可以使用NOPASSWD标记跳过密码验证),
  3. 之后,sudo创建一个子进程,在其中调用setuid()切换到目标用户
  4. 接下来,在上述子进程中执行一个shell或作为参数给出的命令。

以下是修改/etc/sudoers文件配置以修改sudo命令行为的十个Defaults条目。

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# 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条目类型

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。参数可以是标志、整数值、字符串或列表。

您应该注意,标志隐式为布尔值,并且可以使用'!'运算符关闭,列表有两个额外的赋值运算符,+=(添加到列表)和-=(从列表中删除)。

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. 设置安全路径

这是每个使用sudo运行的命令所使用的路径,它有两个重要性:

  1. 当系统管理员不信任sudo用户具有安全的PATH环境变量时使用
  2. 用于分隔“根路径”和“用户路径”,只有由exempt_group定义的用户不受此设置影响。

要设置它,请添加以下行:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. 在TTY用户登录会话上启用sudo

要使sudo能够从真实tty中调用,但不能通过诸如croncgi-bin脚本等方法调用,请添加以下行:

Defaults  requiretty   

3. 使用pty运行Sudo命令

A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.

为了避免这种情况,您可以配置sudo仅从伪pty中运行其他命令,使用use_pty参数,无论I/O日志记录是否打开,如下所示:

Defaults  use_pty

4. 创建Sudo日志文件

默认情况下,sudo 通过 syslog(3) 记录日志。但是,要指定自定义日志文件,请使用如下 logfile 参数:

Defaults  logfile="/var/log/sudo.log"

要在自定义日志文件中记录主机名和四位数年份,请分别使用 log_host 和 log_year 参数,如下所示:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

以下是自定义 sudo 日志文件的示例:

Create Custom Sudo Log File

5. 记录 Sudo 命令输入/输出

log_input 和 log_output 参数使 sudo 能够在伪终端中运行命令,并分别记录所有用户输入和所有输出发送到屏幕。

默认的 I/O 日志目录是 /var/log/sudo-io,如果有会话序列号,则存储在此目录中。您可以通过 iolog_dir 参数指定自定义目录。

Defaults   log_input, log_output

支持一些转义序列,例如 %{seq},它会扩展为一个单调递增的基数 36 序列号,例如 000001,其中每两位数字用于形成一个新目录,例如下面的示例中的 00/00/01:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
Log sudo Input Output

您可以使用 cat 命令查看该目录中的其余文件。

6. 讲解 Sudo 用户

要向系统中的 sudo 用户讲解密码使用,请使用以下 lecture 参数。

它有 3 个可能的值:

  1. always – 始终向用户讲解。
  2. 一次 – 仅在用户第一次执行sudo命令时讲解(当未指定值时使用)
  3. 从不 – 从不对用户进行讲解。
 
Defaults  lecture="always"

此外,您可以使用lecture_file参数设置自定义讲解文件,在文件中输入适当的消息:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. 输入错误的sudo密码时显示自定义消息

当用户输入错误密码时,命令行会显示特定消息。默认消息为“对不起,再试一次”,您可以使用badpass_message参数修改消息如下:

Defaults  badpass_message="Password is wrong, please try again"

8. 增加sudo密码尝试次数限制

参数passwd_tries用于指定用户可以尝试输入密码的次数。

默认值为3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

使用passwd_timeout参数设置密码超时时间(默认为5分钟),添加以下行:

Defaults   passwd_timeout=2

9. 让Sudo在您输入错误密码时侮辱您

如果用户输入错误密码,sudo将在终端上显示侮辱性言论,这将自动关闭badpass_message参数。

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

阅读更多: 让Sudo在您输入不正确密码时侮辱您

10. 了解更多Sudo配置

您可以通过阅读以下文章了解更多sudo命令配置信息:su和sudo之间的区别以及如何在Linux中配置sudo

就是这样!您可以通过下面的评论部分与其他Linux用户分享其他有用的sudo命令配置或技巧和提示

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/