sudo提权实战讲解 对用户对组的权限配置分析

Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。
出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限; 如有必要,再来提升权限执行。

sudo就是来解决这个需求的: 这些非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令。

用公式讲解/etc/sudoers的内容
sudo的权限控制可以在/etc/sudoers文件中查看到。

如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时不需要输入密码,就需要对该文件有所了解。

一般来说,通过cat /etc/sudoers指令来查看该文件, 会看到如下几行代码:

root ALL=(ALL:ALL) ALL
%wheel ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
对/etc/sudoers文件进行编辑的代码公式可以概括为:

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔;

为了方便说明, 将公式的各个部分称呼为字段1 - 字段5:

授权用户/组 主机 =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1 字段2 =[(字段3)] [字段4] 字段5
字段3、字段4,是可以省略的。

在上面的默认例子中, "字段1"不以%号开头的表示"将要授权的用户", 比如例子中的root;
以%号开头的表示"将要授权的组", 比如例子中的%wheel组 和 %sudo组。

"字段2"表示允许登录的主机, ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令. 比如:

wmy myliux=/usr/sbin/reboot,/usr/sbin/shutdown
表示: 普通用户wmy在主机(或主机组)mylinux上, 可以通过sudo执行reboot和shutdown两个命令。"字段3"和"字段4"省略。

"字段3"如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。

请注意,"字段3"如果没省略,必须使用( )双括号包含起来。这样才能区分是省略了"字段3"还是省略了"字段4"。

"字段4"的可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:表示执行sudo时可以不需要输入密码。比如:

wmy ALL=(ALL) NOPASSWD: /bin/useradd
表示: 普通用户wmy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码.

又比如:

wmy ALL=(ALL) NOPASSWD: ALL
表示: 普通用户wmy可以在任何主机上, 通过sudo执行任何命令, 并且不需要输入密码。

"字段5"是使用逗号分开一系列命令,这些命令就是授权给用户的操作; ALL表示允许所有操作。

你可能已经注意到了, 命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。

如果你将授权写成如下安全性欠妥的格式:

wmy ALL=(ALL) chown,chmod,useradd
那么用户就有可能创建一个他自己的程序, 也命名为userad, 然后放在它的本地路径中, 如此一来他就能够使用root来执行这个"名为useradd的程序"。这是相当危险的!

命令的绝对路径可通过which指令查看到: 比如which useradd可以查看到命令useradd的绝对路径: /usr/sbin/useradd

公式还要扩充
例子1:

wmy ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd
表示: 用户wmy能在所有可能出现的主机上, 提权到root下执行/bin/chown, 不必输入密码; 但运行/usr/sbin/useradd 命令时需要密码.

这是因为NOPASSWD:只影响了其后的第一个命令: 命令1.

上面给出的公式只是简化版,完整的公式如下:

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1, [(字段3)] [字段4] 命令2, ...
在具有sudo操作的用户下, 执行sudo -l可以查看到该用户被允许和被禁止运行的命令.

通配符和取消命令
例子2:

wmy ALL=/usr/sbin/,/sbin/,!/usr/sbin/fdisk
用例子2来说明通配符*的用法, 以及命令前面加上!号表示取消该命令。

该例子的意思是: 用户wmy在所有可能出现的主机上, 能够运行目录/usr/sbin和/sbin下所有的程序, 但fdisk除外.

开始编辑
讲了这么多,但是在实践中,我去编辑/etc/sudoers文件,系统提示我没权限啊,怎么办

这是因为/etc/sudoers的内容如此敏感,以至于该文件是只读的。所以,编辑该文件前,请确认清楚你知道自己正在做什么。

强烈建议通过visudo命令来修改该文件,通过visudo修改,如果配置出错,会有提示。

不过,系统文档推荐的做法,不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目录下的文件中。

如果使用这种方式修改sudoers,需要在/etc/sudoers文件的最后行,加上#includedir /etc/sudoers.d一行(默认已有):

#includedir /etc/sudoers.d
注意了,这里的指令#includedir是一个整体, 前面的#号不能丢,并非注释,也不能在#号后有空格。

任何在/etc/sudoers.d/目录下,不以~号结尾的文件和不包含.号的文件,都会被解析成/etc/sudoers的内容。

文档中是这么说的:

This will cause sudo to read and parse any files in the /etc/sudoers.d

directory that do not end in ‘~‘ or contain a ‘.‘ character.

Note that there must be at least one file in the sudoers.d directory (this

one will do), and all files in this directory should be mode 0440.

Note also, that because sudoers contents can vary widely, no attempt is

made to add this directive to existing sudoers files on upgrade.

Finally, please note that using the visudo command is the recommended way

to update sudoers content, since it protects against many failure modes.

其他小知识
输入密码时有反馈
当使用sudo后输入密码,并不会显示任何东西 —— 甚至连常规的星号都没有。有个办法可以解决该问题。

打开/etc/sudoers文件找到下述一行:

Defaults env_reset
修改成:

Defaults env_reset,pwfeedback
修改sudo会话时间
如果你经常使用sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用再输入密码就可以运行几次sudo命令。
但是一段时间后,sudo 命令会再次要求你输入密码。默认是15分钟,该时间可以调整。添加timestamp_timeout=分钟数即可。
时间以分钟为单位,-1表示永不过期,但强烈不推荐。

比如我希望将时间延长到1小时,还是打开/etc/sudoers文件找到下述一行:

Defaults env_reset
修改成:

Defaults env_reset,pwfeedback,timestamp_timeout=60

原文地址:http://blog.51cto.com/13754503/2157719

时间: 2024-10-14 08:20:56

sudo提权实战讲解 对用户对组的权限配置分析的相关文章

Ubuntu无法sudo提权,报当前用户不在sudoers文件中错误

Ubuntu安装后默认root不能登陆系统,密码也是随机生成,其他用户使用root权限,可以使用sudo提权,前提是该用户在/etc/sudoers配置列表中. 但是有时用户名从/etc/sudoers被意外删除了,sudo不能用了,root又不知道root密码(之前没有改过或者忘记了),如果想修改/etc/sudoers也不可能了,进入了一个死循环. 但可以如下面的方法解决: 1.重启按shift键,进入Ubuntu高级模式,选择一个recovery mode进入,出现一个9个选项的菜单,如果

Linux/Ubuntu sudo提权不输入密码

前言 在写自动化打包脚本的过程中,zip打包时需要用到sudo权限,但是每次输入密码太过麻烦,因此这里介绍一下sudo提权不需要输入密码的方法. 修改/etc/sudoers 假设我们当前的用户是"wzy",则需要在/etc/sudoers文件中增加如下语句: # No Password for wzy wzy ALL=(ALL)NOPASSWD:ALL google了一些答案,很多竟然直接是对admin组进行NOPASSWD设定,这样确实太危险了,我认为更应该针对特殊需求的用户单独设

系统安全应用(文件加解锁、清除历史命令巧方法、sudo提权等),全程演练

今天和大家一起来探讨系统安全应用的演练,精彩的部分现在开始: 一.系统账号加锁.解锁演练 1.首先在linux远程控制xshell上查看passwd.shadow文件状态,及为未加锁状态2.第二,输入加锁命令,再次查看,显示已加锁状态3.此时我们重新输入命令建立一个用户wangwu,打开passwd中,没有wangwu的账号信息.TIP:即加锁状态下无法添加.删除用户,也无法更改登陆密码等账号信息. 二.密码安全控制操练 1.在远程终端上修改密码有效期,进入配置文件.2.将密码最长有效期改为30

2019-10-16,sudo提权漏洞(CVE-2019-14287)实现

sudo是linux系统命令,让普通账号以root身份执行某些命令,比如,安装软件,查看某些配置文件,关机,重启等,如果普通用户需要使用sudo需要修改配置文件,/etc/sudoers,将sudo使用权限赋予该用户 sudo提权漏洞,是一个安全策略绕过问题,去执行某些敏感的命令,cve编号是CVE-2019-14287,影响版本是 sudo版本<1.8.28 漏洞复现1,查看sudo版本,命令sudo -V 2,修改配置文件,vim /etc/sudoers, root ALL(ALL:ALL

10.16Maccms后门分析、Sudo提权漏洞(CVE-2019-14287)复现

Maccms后门分析 maccms网站基于php+mysql的系统,易用性.功能良好等优点,用途范围广 打开源码,extend\Qcloud\Sms\Sms.php.extend\upyun\src\Upyun\Api\Format.php是两个后门(Sms.php和Format.php是后门木马 二者代码相同) <?php error_reporting(E_ERROR);//报错 @ini_set('display_errors','Off'); @ini_set('max_executio

sudo 提权漏洞(CVE-2019-14287)复现 (10.16 第二十二天)

sudo是Linux系统命令,让普通账号以root身份去执行某些命令,比,安装软件.查看某些配置文件.关机.重启等操作,如果普通账号需要使用sudo需要修改配置文件/etc/sudoers,将sudo使用权赋予该账号 sudo提权漏洞是一个安全策略绕过问题,去执行某些敏感的命令,CVE编号是CVE-2019-14287,影响的版本是:<1.8.28 漏洞复现过程 1.查看版本:sudo -V 2.修改配置文件:vim/etc/sudoers在root ALL=(ALL:ALL)ALL 下面添加一

3、Linux用户、组及权限的基础及相关高级话题,详细讲解

04_01_Linux用户管理命令详解 用户.组.权限 操作系统的组成:1.硬件:2.内核:3.库(动态库,静态库):4.shell 所谓的安装操作系统是把操作系统安装到哪里去了? 答:不是内存:硬盘,外部存储设备: 计算资源: 权限 用户 用户,容器,关联权限:用户组,方便地指派权限 用户:标识符 用户组:标识符 文件 安全上下文(secure context) 进程:也有属主和属组,进程能否访问资源,取决于发起进程的用户是否有权访问资源 权限: r,w,x 文件权限含义: r:可读,可以使用

linux用户、组和权限——学习笔记

linux用户.组和权限--学习笔记 1.linux用户user 2.linux组group 3.用户和组的配置文件 3.1.Passwd文件格式 3.2.shadow 文件格式 3.3.group文件格式 3.4.gshdow文件格式 4.用户和组管理命令 4.1.用户管理命令 4.2.组帐号维护命令 4.3.用户创建:useradd 4.4.小实验 4.5.用户属性修改 4.6.删除用户 4.7.查看用户相关的ID 信息 4.8.切换用户或以其他用户身份执行命令 4.9.设置密码 4.10.

Linux系统用户、组和权限及管理

初学Linux,现将对用户.组和权限及管理做了一些整理,希望大家相互学习! 用户: 即在系统内将有限的资源在多个使用者之间进行分配的一个系统组件: 用户分类:Linux环境中用户一般分为管理员和普通用户: 管理员(root)是系统中的超级用户,被授予对系统资源所有的访问权限,可以对其它其它用户及组进行管理: 普通用户又分为系统用户和登录用户: 系统用户:仅用于运行服务程序,保障系统正常运行: 登录用户:系统资源的正常使用者,访问资源的权限需要Root管理指定: 用户ID(User ID UID)