Linux学习记录:sudo相关

Posted 河边小咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习记录:sudo相关相关的知识,希望对你有一定的参考价值。

Linux学习记录:sudo相关

  • 在实习中接触到了系统安全相关的内容,其中一个重点就是对sudo权限的控制。正好我对这块东西不太熟悉,于是对相关的内容做了笔记汇总。
  • 这篇笔记中重点放在sudo的配置文件/etc/sudoers上,下面的关键字(或其他)基本都是这个配置文件里的内容。关于这个配置文件,它是仅可读的,使用管理员账号修改时直接使用w!强制修改即可。
  • 正好了解完相关的内容把我的那台阿里云服务器完善下

targetpw

使能后,让普通用户需要用root密码使用sudo

默认off

    Defaults    targetpw

always_set_home

使能后,sudo将HOME环境变量设置为目标用户(默认为root,除非使用-u指定)的home目录。效果相当于每次执行包含-H选项。

默认off

    Defaults    always_set_home

env_reset

使能后,sudo将在一个最小集的环境变量中运行命令,此时环境变量包括:

a)TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_*变量;

b)与env_keep和env_check匹配的所有调用者的环境变量;

c)env_file选项指定的文件中的变量。

在关闭此命令后 使用sudo后环境变量不会被重置为默认

默认on

    Defaults    env_reset

authenticate

布尔类型,如果设置(为on)的话,用户在用sudo执行命令之前必须通过口令(或者通过其他的方式)来验证身分。
这个默认选项可以通过设置PASSWD和NOPASSWD标签来覆盖。

默认on

    Defaults    authenticate

fast_glob

fast_glob控制sudo在进行路径匹配时使用的匹配函数。
在进行路径名匹配时,Sudo一般使用glob(3)函数做shell-style globbing,因为它会访问文件系统,
因此对于某些模式glob(3)可能需要很长时间才能完成,特别是当模式引用按需安装的网络文件系统(自动挂载)时。

fast_glob选项导致sudo使用fnmatch(3)函数,该函数不访问文件系统进行匹配。
fast_glob的缺点是它无法匹配相对路径名,例如./ls或…/bin/ls。
当包含通配符的路径名与否定运算符“!”一起使用时,会产生安全隐患,这样的规则可以被轻易绕过。

默认off

    Defaults    fast_glob

passwd_tries

整数类型,sudo向日志中写入一个登录失败记录并退出之前允许用户输入口令的次数。

默认值为3

    Defaults    passwd_tries=3

timestamp_timeout

整数类型,sudo再次询问口令之前的时间(以分钟记)。如果想要总是询问口令的话请把此值设置为0。如果设置为负数的话,用户的时间戳永远不会过期,这可以用来允许用户分别使用sudo -v和sudo -k来建立或者删除他们自己的时间戳。

默认值为5

    Defaults    timestamp_timeout=5

passwd_timeout

整数类型,sudo询问口令的超时时间(分钟记)。设置为0可以取消口令超时。

默认值为5

    Defaults    passwd_timeout=5

runas_default

字符串类型,使用sudo但没有指定-u标志时使用的默认用户。

默认值为root

    Defaults:zhj runas_default=root

logfile

字符串类型,sudo日志的存放位置。设置一个路径来打开日志功能,取消设置将关闭日志功能。默认情况sudo通过syslog记录日志。

说明:如果启用syslog,则无需开启此选项,否则建议设置为/var/log/sudo.log。

    Defaults logfile=/var/log/sudo.log

标签

一个命令可以具有与它相关联的零个或多个标签。
有十个可能的标记值:
EXEC, NOEXEC, FOLLOW, NOFOLLOW, LOG_INPUT,
NOLOG_INPUT, LOG_OUTPUT, NOLOG_OUTPUT, MAIL, NOMAIL, PASSWD, NOPASSWD, SETENV, NOSETENV。

一旦标签被设置在某个命令上,在该命令列表中随后的所有命令将继承该标记,
直到由相反的标记项覆盖(例如PASSWD覆盖NOPASSWD,NOEXEC覆盖EXEC),这里需要重点关注的是NOPASSWD和SETENV选项。

1)NOPASSWD标签:
默认情况下,sudo要求用户运行一个命令之前对目标用户进行验证,这种行为可以通过NOPASSWD标签进行修改,
使用NOPASSWD后表示此后的命令都不需要进行验证。

2)SETENV标签:
为命令设置SETENV标签后,用户可以通过-E选项从命令行禁用env_reset选项,
同时,在命令行上设置的环境变量不受env_check,env_delete或env_keep的限制,用户就可以使用自己的环境变量。
因此,只允许受信任的用户以这种方式设置变量。

用户规则

用户可以在#User privilege specification下配置用户规则,用户规则确定用户可以在指定主机上运行哪些命令(以及作为哪个用户)。
默认情况下,命令以root身份运行,但可以基于每个命令进行更改。
用户规范的基本结构是“who where = (as_whom) what”,通常的配置格式为:

user host = run_as [option:] command

user:一位或几位用户,组对象的名称用百分号%开头;
host:一个或几个主机名,ALL表示所有主机;
run_as:命令运行的目标用户,常见选项是root和ALL,ALL表示所有用户;
option:影响命令运行的选项;
command:可执行一个或几个命令,ALL表示所有命令;
比如:jack ALL= (root) NOPASSWD: /usr/bin/cat
表示用户jack可以在所有主机上已root用户执行/usr/bin/cat命令,且不需要root密码。

用户规则中的命令指定

用户规则中,可配置的命令包括命令名和目录。命令名称是完全限定的文件名,比如系统命令(/bin/ls)、自定义的命令(/opt/sudobin/test)、任意脚本(/opt/sudobin/a.sh),这些命令可以包含shell样式的通配符。目录是以’/'结尾的完全限定路径名,当指定目录时,用户将能够运行该目录中的任何文件(但不能在其中的任何子目录中)。

以上是关于Linux学习记录:sudo相关的主要内容,如果未能解决你的问题,请参考以下文章

linux命令学习系列-用户切换su,sudo

linux系统命令学习系列-用户切换命令su,sudo

Cordova学习笔记   cordova相关的安装记录 及项目建立

Linux学习笔记——使用指定的用户权限执行程序——sudo

Linux 6.8 sudo 日志审计

ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段