- 它读取并分析在 /etc/sudoers 文件 ,查找调用用户及其权限,
- 然后提示调用用户输入密码(通常是用户的密码,但也可以是目标用户的密码,也可以用NOPASSWD标签跳过)
- 在这之后,Sudo创建一个子方法,其中调用的setuid()切换到目标用户
- 接下来,它执行一个shell或在上面的子进程中作为参数给出的命令。
$ 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环境变量时使用
- 为了区分“根路径”和“用户路径”,只有exempt_group定义的用户不会受到此设置。
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2.在TTY用户登录会话上启用sudo
为了使sudo来从一个真正 的tty而不是通过诸如 cron或 cgi-bin目录的脚本调用,添加一行:Defaults requiretty
运行Sudo命令使用pty
几次,攻击者可以使用sudo运行恶意程序(例如病毒或恶意软件),这将再次分叉保留在用户的终端设备上的后台进程,即使在主程序已经完成执行时。 为了避免这种情况下,您可以配置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日志文件的示例:
创建自定义Sudo日志文件
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
日志sudo输入输出
6.讲解Sudo用户
演讲sudo的用户有关系统上的密码使用情况,使用下面的 演讲参数。 它有3个可能的值:- 总是 - 总是讲一个用户。
- 一次只向用户第一次执行sudo命令(这是在没有指定值时使用)
- 从不 - 从不讲授用户。
Defaults lecture="always"此外,您可以设置带有 lecture_file参数自定义文件的演讲中,输入文件中的相应的消息:
Defaults lecture_file="/path/to/file"
讲座Sudo用户
7.输入错误的sudo密码时显示自定义消息
当用户输入错误的密码时,命令行上将显示特定的消息。默认消息是“ 对不起,请重试 ”,你可以使用 badpass_message参数如下修改消息:Defaults badpass_message="Password is wrong, please try again"
8.增加sudo密码尝试限制
参数 passwd_tries用于指定的时间,用户可尝试输入密码的次数。 默认值为3:Defaults passwd_tries=5
增加Sudo密码尝试
Defaults passwd_timeout=2
9.让Sudo输入错误的密码时输入您
如果用户键入错误的密码,sudo将使用insults参数在终端上显示insults。这将自动关闭 badpass_message参数。Defaults insults
让我们Sudo输入错误的密码时