在Linux和其他类Unix操作系统,只有root用户可以运行所有命令和执行诸如安装和更新,删除软件包,系统上的某些关键操作创建用户和组 ,修改重要的系统配置文件等等。
然而,系统管理员谁承担root用户的角色可以允许其他系统正常用户的帮助下sudo命令和一些配置来运行一些命令,以及开展一些重要的系统操作,包括上面提到的那些的。
另外,系统管理员可以共享root用户的密码(这不是一个推荐的方法),这样正常的系统用户都可以访问通过su命令以root用户帐户。
Sudo允许用户允许执行命令,作为root(或其他用户),由安全策略规定:
- 它读取并分析在 /etc/sudoers 文件 ,查找调用用户及其权限,
- 然后提示调用用户输入密码(通常是用户的密码,但也可以是目标用户的密码,也可以用NOPASSWD标签跳过)
- 在这之后,Sudo创建一个子方法,其中调用的setuid()切换到目标用户
- 接下来,它执行一个shell或在上面的子进程中作为参数给出的命令。
下面有十个 /etc/sudoers 文件的配置来修改sudo命令的使用默认项的行为。
$ sudo cat /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日志文件的示例:
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
您可以使用该目录中查看文件的其余部分cat命令 。
6.讲解Sudo用户
演讲sudo的用户有关系统上的密码使用情况,使用下面的演讲参数。
它有3个可能的值:
- 总是 – 总是讲一个用户。
- 一次只向用户第一次执行sudo命令(这是在没有指定值时使用)
- 从不 – 从不讲授用户。
Defaults lecture="always"
此外,您可以设置带有lecture_file参数自定义文件的演讲中,输入文件中的相应的消息:
Defaults lecture_file="/path/to/file"
7.输入错误的sudo密码时显示自定义消息
当用户输入错误的密码时,命令行上将显示特定的消息。默认消息是“ 对不起,请重试 ”,你可以使用badpass_message参数如下修改消息:
Defaults badpass_message="Password is wrong, please try again"
8.增加sudo密码尝试限制
参数passwd_tries用于指定的时间,用户可尝试输入密码的次数。
默认值为3:
Defaults passwd_tries=5
要设置密码超时(默认为5分钟),使用passwd_timeout参数,下面添加一行:
Defaults passwd_timeout=2
9.让Sudo输入错误的密码时输入您
如果用户键入错误的密码,sudo将使用insults参数在终端上显示insults。这将自动关闭badpass_message参数。
Defaults insults
10.了解更多Sudo配置
此外,您可以通过阅读了解更多sudo命令配置: su和Sudo之间差异,如何在Linux配置sudo 。
而已!您可以共享其他有用的sudo命令配置或使用Linux技巧和提示通过下面的评论部分用户那里。
在Linux和其他类Unix操作系统,只有root用户可以运行所有命令和执行诸如安装和更新,删除软件包,系统上的某些关键操作创建用户和组 ,修改重要的系统配置文件等等。
然而,系统管理员谁承担root用户的角色可以允许其他系统正常用户的帮助下sudo命令和一些配置来运行一些命令,以及开展一些重要的系统操作,包括上面提到的那些的。
另外,系统管理员可以共享root用户的密码(这不是一个推荐的方法),这样正常的系统用户都可以访问通过su命令以root用户帐户。
Sudo允许用户允许执行命令,作为root(或其他用户),由安全策略规定:
- 它读取并分析在 /etc/sudoers 文件 ,查找调用用户及其权限,
- 然后提示调用用户输入密码(通常是用户的密码,但也可以是目标用户的密码,也可以用NOPASSWD标签跳过)
- 在这之后,Sudo创建一个子方法,其中调用的setuid()切换到目标用户
- 接下来,它执行一个shell或在上面的子进程中作为参数给出的命令。
下面有十个 /etc/sudoers 文件的配置来修改sudo命令的使用默认项的行为。
$ sudo cat /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日志文件的示例:
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
您可以使用该目录中查看文件的其余部分cat命令 。
6.讲解Sudo用户
演讲sudo的用户有关系统上的密码使用情况,使用下面的演讲参数。
它有3个可能的值:
- 总是 – 总是讲一个用户。
- 一次只向用户第一次执行sudo命令(这是在没有指定值时使用)
- 从不 – 从不讲授用户。
Defaults lecture="always"
此外,您可以设置带有lecture_file参数自定义文件的演讲中,输入文件中的相应的消息:
Defaults lecture_file="/path/to/file"
7.输入错误的sudo密码时显示自定义消息
当用户输入错误的密码时,命令行上将显示特定的消息。默认消息是“ 对不起,请重试 ”,你可以使用badpass_message参数如下修改消息:
Defaults badpass_message="Password is wrong, please try again"
8.增加sudo密码尝试限制
参数passwd_tries用于指定的时间,用户可尝试输入密码的次数。
默认值为3:
Defaults passwd_tries=5
要设置密码超时(默认为5分钟),使用passwd_timeout参数,下面添加一行:
Defaults passwd_timeout=2
9.让Sudo输入错误的密码时输入您
如果用户键入错误的密码,sudo将使用insults参数在终端上显示insults。这将自动关闭badpass_message参数。
Defaults insults
10.了解更多Sudo配置
此外,您可以通过阅读了解更多sudo命令配置: su和Sudo之间差异,如何在Linux配置sudo 。
而已!您可以共享其他有用的sudo命令配置或使用Linux技巧和提示通过下面的评论部分用户那里。