sudo 订阅
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。 展开全文
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
信息
外文名
sudo(SwitchUer do)
作    用
一个工具
中文名
linux系统管理指令
例    如
halt,reboot,su
sudo特性
它的特性主要有这样几点:§ sudo能够限制用户只在某台主机上运行某些命令。§ sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。§ sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。§ sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
收起全文
精华内容
下载资源
问答
  • sudo

    千次阅读 2020-02-08 16:28:31
    sudo

    1 创建普通用户 

    useradd yuanyu

    2 修改用户密码

    passwd yuanyu

    3 让普通用户拥有root权限

    https://blog.csdn.net/qq_40794973/article/details/86318141#t18

    visudo

    展开全文
  • 升级Linux下的sudo

    千次阅读 2020-02-08 23:59:59
    sudo官网爆出目前sudo工具的一个高危漏洞,漏洞编号为:CVE-2019-18634,黑客可通过工具获得Linux的root权限(root具有Linux操作系统的最高权限)。 sudo官网 : ...

    1、sudo 命令情景分析

    介绍

    Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全部的 root 命令。本文就对我们常用到 sudo 操作情景进行简单分析,通过一些例子来了解 sudo 命令相关的技巧。

    情景一:用户无权限执行 root 命令

    普通用户登录 shell 之后,如果自身没有权限访问某个文件或执行某个命令时,若该用户获得root授权,那么就可以在需要执行的命令之前加上 sudo,临时切换到root用户的权限,完成相关的操作。在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码,而sudo使一般用户不需要知道超级用户的密码即可获得权限。

    那么哪些用户可以临时获得 root 权限呢?这就需要在 /etc/sudoers 文件中进行配置:

    授权给单个用户:
    在这里插入图片描述
    上面这个例子中:

    guohl:允许使用 sudo 的用户名
    ALL:允许从任何终端(任何机器)使用 sudo
    (ALL):允许以任何用户执行 sudo 命令
    ALL:允许 sudo 权限执行任何命令
    

    如果我们想让用户 test 只能在本主机(主机名为guohl-pc)以 root 账户执行/bin/chown、/bin/chmod 两条命令,那么就应该这样配置:
    在这里插入图片描述
    和授权给单个用户类似,只不过将用户名在这里换成%组名,所有在该组中的用户都按照此规则进行授权。对于该例,所有在 sudo 组内的用户都有在任何终端(第一个ALL)、以任何用户(第二个ALL)、执行任何命令(第三个ALL)的权限,查看 /etc/group 文件可以知道哪些用户属于 sudo 组。

    举例:

    如果当前帐号在 /etc/sudoers 文件中被授予 sudo 的权限,那么你就可以将任何 root 命令作为 sudo 命令的参数,使用 root 权限来执行该命令。举例来说,挂载一个文件系统只能由 root 来执行,但是一个普通用户也可以使用 sudo 来挂载:
    在这里插入图片描述
    首次使用会要求你输入当前用户的密码,系统确实输入正确即以 root 权限来执行 mount 命令,接下来一段时间(默认为5分钟)再次使用 sudo 命令就不需要输密码了。

    情景二:vim 编辑后发现忘记使用 sudo

    我们经常会遇到这样的一个囧境:使用 vim 对某个文件进行编辑,编辑完之后,按 ESC 之后回到普通模式,再按 :wq 准备保存退出时,发现没有权限对该文件进行修改,我们在使用 vim 命令时忘记在前面加 sudo 了。我就经常出现这种问题,之前的做法是只能不保存强退,再加上 sudo 重新编辑。

    但是今后我们再也不需要用这么愚蠢的做法了,我们可以在 vim 的普通模式下,按 :w !sudo tee % ,这样就可以 root 权限来保存文件了,你也无需因为自己一时忘记加个 sudo 而沮丧懊恼了!

    情景三:执行 root 命令忘记加 sudo

    我们还会遇到这样稍微好一点的情形:输入一个长长的命令,按 Enter 之后出现无权限操作,因为我们忘记加 sudo 了。大多人的做法是按 ↑ 回到上一条命令,在该命令之前加上 sudo,再执行该命令。

    以后,我们无需这样了,只要输入 sudo !! 即可,这里的 !! 代表上一条命令。如:

    情景四:shell 内置命令如何使用 sudo

    shell 是一个交互式的应用程序,在执行外部命令时通过 fork 来创建一个子进程,再通过 exec 来加载外部命令的程序来执行,但是如果一个命令是 shell 内置命令,那么只能直接由 shell 来运行。sudo 的意思是,以别的用户(如root)的权限来 fork 一个进程,加载程序并运行,因此 sudo 后面不能跟 shell 的内置命令,如:
    在这里插入图片描述
    在这种情况,我们又没有 root 账户的密码,我们怎样执行该命令呢?有种办法就是使用 sudo 获得root shell 的权限,然后在root shell 中执行该命令。进入root shell 很简单,输入sudo bash 确认本用户的密码即可,此时你会发现命令提示符显示当前是 root。一旦获得root shell,你可以执行任何命令而不需要在每条命令前输入sudo了。

    另外,常用的shell 内置命令在这里 有简单介绍,我们可以使用 type 命令来查看命令的类型,如:
    在这里插入图片描述
    在这种情况,我们又没有 root 账户的密码,我们怎样执行该命令呢?有种办法就是使用 sudo 获得root shell 的权限,然后在root shell 中执行该命令。进入root shell 很简单,输入sudo bash 确认本用户的密码即可,此时你会发现命令提示符显示当前是 root。一旦获得root shell,你可以执行任何命令而不需要在每条命令前输入sudo了。

    另外,常用的shell 内置命令在这里 有简单介绍,我们可以使用 type 命令来查看命令的类型,如:
    在这里插入图片描述

    情景五:sudo 操作记录日志

    作为一个 Linux 系统的管理员,不仅可以让指定的用户或用户组作为root用户或其它用户来运行某些命令,还能将指定的用户所输入的命令和参数作详细的记录。而sudo的日志功能就可以用户跟踪用户输入的命令,这不仅能增进系统的安全性,还能用来进行故障检修。但是要记录sudo的日志还要一些简单的配置:
    在这里插入图片描述
    在这里插入图片描述
    参考资料:

    sudo mannual
    7 Linux sudo Command Tips and Tricks
    sudo 日志配置
    

    2、升级Linux下的sudo

    sudo官网爆出目前sudo工具的一个高危漏洞,漏洞编号为:CVE-2019-18634,黑客可通过工具获得Linux的root权限(root具有Linux操作系统的最高权限)。
    sudo官网 : https://www.baidu.com/link?url=uPPtTshELZs5FFJ9ZRoL7_TFdhQ2kUUFFaeRxc5O6ky&wd=&eqid=c8bdbe7c006e2eb9000000045e3ed4ca
    在这里插入图片描述
    sudo 是Unix和Linux操作系统广泛使用的工具,这次漏洞是一个是一个堆栈缓冲溢出 bug,这个漏洞在启用了 pwfeedback 的系统中很容易利用,该漏洞让非特权用户很容易通过缓冲溢出获得 root 权限,不需要攻击者有 Sudo 使用权限。

    在 Sudo 上游版本中,pwfeedback 没有默认启用,但在下游发行版如 Linux Mint 和 Elementary OS 中,pwfeedback 被默认启用了。主要影响的版本:从v1.7.1 到 1.8.25p1,ubuntu版本不受该漏洞影响,最新的1.8.31已修复了该漏洞,请大家及时更新到最新的版本。

    1.查看自己系统是否存在该漏洞

    1、先通过sudo --version命令查看当前sudo的版本信息。

    $ sudo --version
    Sudo version 1.8.25p1Sudoers policy plugin version 1.8.25p1Sudoers file grammar version 46Sudoers I/O plugin version 1.8.25p1
    

    2、通过sudo -l查看 pwfeedback是否启用,如果存在pwfeedback字样则说明已启用否则没有;

    $ sudo -l    Matching Defaults entries for millert on linux-build:insults, pwfeedback, mail_badpass, mailerpath=/usr/sbin/sendmail    User millert may run the following commands on linux-build:(ALL : ALL) ALL
    

    2.如何利用该漏洞

    1、在1.8.26之前的版本

    利用该漏洞,不需要登录的用户有sudo权限,可以利用无法写入的伪终端,向sudo -k 传入超长字符串。原文为:The bug can be reproduced by passing a large input with embedded terminal kill characters to sudo from a pseudo-terminal that cannot be written to.

    For example, using the socat utility and assuming the terminal kill character is set to control-U (0x15):    $ socat pty,link=/tmp/pty,waitslave exec:"perl -e 'print((\"A\" x 100 . chr(0x15)) x 50)'" &    $ sudo -S -k id < /tmp/pty    Password: Segmentation fault (core dumped)
    

    2.在1.8.26之后的版本,只要向sudo 传输一个超长字符串

    For sudo versions prior to 1.8.26, and on systems with uni-directional pipes, reproducing the bug is simpler. Here, the terminal kill character is set to the NUL character (0x00) since sudo is not reading from a terminal. This method is not effective in newer versions of sudo due to a change in EOF handling introduced in 1.8.26.

    $ perl -e 'print(("A" x 100 . chr(0)) x 50)' | sudo -S -k id    Password: Segmentation fault (core dumped)
    

    3.解决方法

    1、临时解决方法:

    修改/etc/sudoers 文件,关闭pwfeedback 功能,把该文件中下面这行:

    Defaults pwfeedback
    改为
    
    Defaults !pwfeedback
    

    我们检查一下我们系统:
    在这里插入图片描述

    2、彻底解决方法:

    升级系统的sudo,升级到最新的版本1.8.31以上即可.
    2.下载最新安装包(1.8.28) wget http://www.sudo.ws/dist/sudo-1.8.28p1.tar.gz
    3.编译升级sudo的版本

    #ls 
    [root@localhost ~/sudo-1.8.28p1]# ./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.8.28.p1 --with-passprmpt="[sudo] password for %p: " && make
    

    在这里插入图片描述
    在这里插入图片描述
    4.安装 [root@localhost sudo-1.8.28p1]# make install && ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0
    在这里插入图片描述
    5.[root@localhost sudo-1.8.28p1]# sudo --version
    升级sudo的版本
    在这里插入图片描述

    CVE-2019-14287:sudo权限绕过漏洞分析与复现

    漏洞概述

    有的用户可能知道,如果将sudo配置为允许用户通过Runas规范中定义的ALL关键字来以任意用户身份运行命令的话,那么攻击者将有可能通过制定用户ID -1或4294967295来以root权限执行恶意命令。

    实际上,只要用户的权限足够高,即拥有最高sudo权限的用户,并且在Runas规范中定义了ALL关键字的话,他们就可以运行Runas规范中明确禁止使用的那些root命令,而且以这种方式运行的命令其日志项所显示的目标用户为4294967295,而不是root。与此同时,在执行相应命令的过程中,PAM会话模块将不会运行。

    Sudo 的全称是“superuserdo”,它是Linux系统管理指令,允许用户在不需要切换环境的前提下以其它用户的权限运行应用程序或命令。通常以 root 用户身份运行命令,是为了减少 root 用户的登录和管理时间,同时提高安全性。

    2019年10月14日,Sudo官方发布了Sudo 1.8.28版本,其中包含sudo root权限绕过漏洞(CVE-2019-14287)的补丁修复。

    CVE ID
    CVE为该漏洞分配的漏洞CVE编号为CVE-2019-14287。

    漏洞细节分析

    一般情况下,大多数Linux发行版的Runas规范(/etc /sudoers)都如下图所示,其中定义的ALL关键字将允许admin或sudo组中的用户以目标系统中的任意用户身份来运行命令:
    在这里插入图片描述
    如果想利用该漏洞来实施攻击,用户需要拥有sudo权限,并允许用户使用任意用户ID来运行命令。通常来说,这意味着用户的sudoer项在Runas规范中定义了特殊的ALL值。

    如果sudoer策略允许的话,sudo支持由用户指定的用户名或用户ID来运行命令。比如说,下列sudoer项允许我们以任意用户的身份来运行id命令,因为在Runas规范中它包含了ALL关键字。

    alice myhost = (ALL) /usr/bin/id
    

    除了以任意有效用户的身份运行id命令之外,我们还能够以任意用户ID来运行该命令,此时需要使用#uid语句:

    sudo -u#1234 id -u
    

    该命令将返回“1234”。但是,sudo可以使用setresuid(2)和setreuid(2)这两个系统调用来在命令运行之前修改用户ID,并将用户ID修改为-1(或未签名的等价用户ID-4294967295):

    sudo -u#-1 id -u
    

    sudo -u#4294967295 id -u
    

    上述命令运行之后,将返回“0”。这是因为sudo命令本身已经在以用户ID“0”运行了,所以当sudo尝试将用户ID修改为“-1”时,不会发生任何变化。

    但是,sudo日志条目中记录下的命令运行用户的ID为“4294967295”,而并非root用户(或用户ID为“0”),除此之外,因为用户ID是通过-u选项指定的,并且不会在密码数据库中存储,所以PAM会话模块也不会运行。

    如果sudoer条目允许用户以任意用户身份运行命令(非root),那么攻击者就可以利用该漏洞来绕过这种限制了。比如说,我们有下列sudoer条目:

    bob myhost = (ALL, !root) /usr/bin/vi
    

    用户bob能够以除了root之外的其他任意用户身份来运行命令vi,但由于该漏洞的存在,bob实际上能够通过下列命令来以root权限运行vi命令,并绕过目标系统中的安全策略:

    sudo -u#-1 vi
    

    只有当包含了ALL关键词的sudoer条目存在于Runas规范中时,该漏洞才存在。比如说,如果规范中包含下列sudoer条目的话,目标系统是不会受到该漏洞影响的:

    alice myhost = /usr/bin/id
    

    在上述例子中,alice只能够以root权限运行id命令,任何以不同身份用户运行命令的尝试都将被拒绝。

    攻击场景截图:
    在这里插入图片描述
    漏洞复现截图:
    在这里插入图片描述
    受影响的Sudo版本

    版本号 < 1.8.28的Sudo版本均将受到该漏洞的影响。
    

    漏洞修复

    Sudo v1.8.28版本已修复该漏洞,建议广大Linux用户尽快手动将sudo包更新至最新版本。
    

    参考链接 :
    sudo 命令情景分析! : https://mp.weixin.qq.com/s/Htmnqmgf7vCnSwCV7ZbDug
    升级sudo : https://blog.csdn.net/heqiubing/article/details/102685017

    CVE-2019-14287:sudo权限绕过漏洞分析与复现 : https://www.freebuf.com/vuls/217089.html

    展开全文
  • sudo 命令、配置

    万次阅读 2019-04-27 21:36:18
    通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的。sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),...

    一、su 命令

    su命令是用来切换用户。如果超级权限用户root向普通用户切换不需要密码;而普通用户切换到其它任何用户都需要密码验证(A用户切换到B时,需要输入B的密码)。

    1、su 的用法:

    su [OPTION选项参数] [用户],参数说明:

    • - 或者 -l:登录并改变到所切换的用户环境;
    • -c: 切换到对应的用户环境,执行一个命令,然后退出;

    注意:

    1. su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;
    2. su - root 和su - 是一样的功能,都是切换到root用户,并且改变到root用户的环境;

    示例一:

    [root@localhost ~]# useradd test
    [root@localhost ~]# passwd test
    Changing password for user test.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# useradd u1
    [root@localhost ~]# passwd u1
    Changing password for user u1.
    New password: 
    BAD PASSWORD: The password is shorter than 7 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# su - test
    [test@localhost ~]$ pwd
    /home/test
    [test@localhost ~]$ su - u1
    Password: 
    [u1@localhost ~]$ pwd
    /home/u1
    [u1@localhost ~]$ exit
    logout
    

    示例二:

    [u1@localhost ~]$ touch u1_log
    [u1@localhost ~]$ exit
    logout
    [test@localhost ~]$ su -c "ls /home/u1" u1
    Password: 
    u1_log
    [test@localhost ~]$ 

    2、SUID:

    我们先来看一个问题:

    有时我们使用su切换用户,输入密码后一直提示"incorrect password",原因是su这个命令的权限设置问题。要能使用su命令切换成根用户,需要su这个命令设置suid特殊权限位,具体方法如下:

    #chmod 4755 /bin/su

    reoot

    重启后我们查看su命令,有了一个“s”的标识:

    [root@localhost ~]# ll /bin/su

    -rwsr-xr-x. 1 root root 32184 Apr 11 2018 /bin/su

    我们再来看一个案例:

    我们的密码都是存放在 /etc/passwd文件中的,/etc/passwd文件只有root有写权限,其他用户都只有读权限,那么我们使用passwd命令修改密码后如何写到该文件中的呢?

    原来passwd命令有一个特殊的权限标记s ,存在于文件所有者的权限位上。这是一类特殊的权限SetUID ,可以这样来理解它:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然灵魂附体了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(不要忘记root这个家伙是superuser什么事都可以干),命令执行完成后该身份也随之消失。

    二、sudo 命令、配置

    有的时候我们只需要切换到某个用户,执行一个命令,然后就退出。上面我们知道可以使用su来切换用户,但是需要知道用户的密码,特别是切换到root时需要知道root的密码才可以,这样做比较不安全。 这个时候我们可以使用sudo。

    通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的。sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权

    注:sudo程序本身就是一个设置了SETUID位的二进制文件。它的所有者是root,所以每个用户都可以像root那样执行该程序,我们可以检查一下它的权限:

    $ls -l /usr/bin/sudo

    ---s--x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo

    1、sudo命令:

    1)参数:

    • sudo -u username#uid User 以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。
    • sudo -k Kill 清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
    • sudo -K Sure kill 与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。
    • sudo -b command 在后台执行指定的命令。

    2)特点:

    • sudo能够限制指定用户在指定主机上运行某些命令。
    • sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
    • sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
    • sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。

    2、sudo配置:

    配置sudo有两种方法:(有超级用户才可以修改它)

    1. 直接使用vim编辑/etc/sudoers文件;
    2. 使用visudo命令编辑。(防止两个用户同时修改,其次有语法检查)

    1)我们先做一个示范:

    以root身份用visudo打开配置文件,可以看到类似下面几行:

    # Runas alias specification

    # User privilege specificationroot ALL=(ALL)ALL

    我们在下面加一行(最好用tab作为空白):

    foobar ALL=(ALL) ALL

    保存退出后,切换到foobar用户,我们用它的身份执行命令:

    [foobar@localhost ~]$ ls /root

    ls: /root: 权限不够

    [foobar@localhost ~]$ sudo ls /root

    PassWord:

    anaconda-ks.cfg Desktop install.log install.log.syslog

    这时,我们发现可以查看/root目录了。

    那么,现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。

    2)限制用户使用sudo的权利:

    我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为:

    foobar localhost= /sbin/ifconfig, /bin/ls

    再来执行命令:

    [foobar@localhost ~]$ sudo head -5 /etc/shadow

    Password:

      Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.

    [foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...

    3)免密码:

    很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:

    foobar ALL=(ALL) NOPASSWD:ALL

    再来sudo一下:

    [foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log

    install.log.syslog

    4)指定用户:

    我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:

    foobar linux=(jimmy,rene) /bin/kill

    但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。

    foobar可以使用:sudo -u jimmy kill PID或者sudo -u rene kill PID

    但这样挺麻烦,其实我们可以不必每次加-u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:

    Defaults:foobar runas_default=rene

    Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行: 

    Defaults env_reset

     

    展开全文
  • sudo提权详解

    千次阅读 2020-01-06 10:37:31
    一、sudo命令 二、渗透提权思路 三、蓝队防御思路

    一、sudo命令

    1、man手册

    • 某个用户能够以另外哪一个用户身份、通过哪些主机、执行哪些命令
    whowhich_host=(run_as)TAG:cmd
    rootALL=(ALL)NOPASSWD:ALL
    User_AliasHost_Alias=(Runas_Alias)Cmnd_Alias
    • 配置文件/etc/sudoers,修改该文件一般不直接vi,常使用visudo命令修改。
    • sudoers文件中Alias定义格式:
      Alias_Type NAME = item1, item2, …
      Alias_Type = [‘User_Alias’,‘Runas_Alias’,‘Host_Alias’,‘Cmnd_Alias’]
    • 用户直接用用户名,如root。组使用%引导表示,如%wheel。

    2、实例测试

    • 新建test用户,使用useradd,usermod命令测试sudo。
    [test@cpsword ~]$ ls -l /usr/sbin/useradd 
    -rwxr-x---. 1 root root 103096 12月  8 2011 /usr/sbin/useradd
    [test@cpsword ~]$ useradd
    -bash: /usr/sbin/useradd: 权限不够
    [test@cpsword ~]$ sudo useradd
    [sudo] password for test: 
    test is not in the sudoers file.  This incident will be reported.
    
    • visudo编辑/etc/sudoers文件加入一条记录
    test    ALL=(root)      NOPASSWD:/usr/sbin/useradd,/usr/sbin/usermod
    
    • 再次测试sudo useradd命令成功执行,sudo成功。
    [test@cpsword ~]$ sudo useradd
    [sudo] password for test: 
    Usage: useradd [options] LOGIN
    
    Options:
      -b, --base-dir BASE_DIR       base directory for the home directory of the
                                    new account
      -c, --comment COMMENT         GECOS field of the new account
      -d, --home-dir HOME_DIR       home directory of the new account
    

    3、sudo常用选项

    • -l 参数
    [test@cpsword ~]$ sudo -l
    [sudo] password for test: 
    Matching Defaults entries for test on this host:
        requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
        LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User test may run the following commands on this host:
        (root) /usr/sbin/useradd, (root) /usr/sbin/usermod
    
    • -k 参数,立即消除5分钟timestamp的时效性。下次sudo必须输入密码。

    二、渗透提权思路

    首先通过信息收集,查看是否存在sudo配置不当的可能。如果存在,寻找低权限sudo用户的密码,进而提权。

    1、以vulnhub.com的bulldog为例

    • 通过查看/etc/passwd文件找到登录用户
    django@bulldog:/home/django/bulldog$ cat /etc/passwd | grep sh$
    cat /etc/passwd | grep sh$
    root:x:0:0:root:/root:/bin/bash
    bulldogadmin:x:1000:1000:bulldogadmin,,,:/home/bulldogadmin:/bin/bash
    django:x:1001:1001:,,,:/home/django:/bin/bash
    
    • 通过id命令查看两个用户所属组,发现两id都在sudo组中
    django@bulldog:/home/django/bulldog$ id django
    id django
    uid=1001(django) gid=1001(django) groups=1001(django),27(sudo)
    django@bulldog:/home/django/bulldog$ id bulldogadmin
    id bulldogadmin
    uid=1000(bulldogadmin) gid=1000(bulldogadmin) groups=1000(bulldogadmin),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
    
    • 通过查看/etc/group文件查看sudo组成员
    django@bulldog:/home/django/bulldog$ cat /etc/group | grep sudo
    cat /etc/group | grep sudo
    sudo:x:27:bulldogadmin,django
    
    • 通过查看各登录用户家目录隐藏文件,寻找.sudo_as_admin_seccessful文件,证实sudo成功使用。
    django@bulldog:/home/django$ ls -al
    ls -al
    total 40
    drwxr-xr-x 5 django django 4096 Sep 21  2017 .
    drwxr-xr-x 4 root   root   4096 Aug 24  2017 ..
    -rw-r--r-- 1 django django  220 Aug 24  2017 .bash_logout
    -rw-r--r-- 1 django django 3771 Aug 24  2017 .bashrc
    drwxrwxr-x 3 django django 4096 Dec 20 07:20 bulldog
    drwx------ 2 django django 4096 Sep 21  2017 .cache
    drwxrwxr-x 2 django django 4096 Aug 26  2017 .nano
    -rw-r--r-- 1 django django  655 Aug 24  2017 .profile
    -rw-r--r-- 1 django django    0 Aug 24  2017 .sudo_as_admin_successful
    -rw------- 1 django django  741 Sep 21  2017 .viminfo
    -rw-rw-r-- 1 django django  217 Aug 24  2017 .wget-hsts
    
    • 在某些时刻sudo被设置为NOPASSWD如下,可以sudo -l
    [test@cpsword ~]$ sudo -l
    Matching Defaults entries for test on this host:
        requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
        LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User test may run the following commands on this host:
        (root) NOPASSWD: /usr/sbin/useradd, (root) /usr/sbin/usermod
    
    • 对于centos操作系统,其中wheel组,类似于上面的sudo组

    2、以运维角度看,为何会出现此问题

    debian和ubuntu等linux发行版的配置文件默认如下

    在这里插入代码root@bulldog:~# cat /etc/sudoers
    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:/snap/bin"
    
    # Host alias specification
    
    # User alias specification
    
    # Cmnd alias specification
    
    # User privilege specification
    root	ALL=(ALL:ALL) ALL
    
    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL
    
    # Allow members of group sudo to execute any command
    %sudo	ALL=(ALL:ALL) ALL
    
    # See sudoers(5) for more information on "#include" directives:
    
    #includedir /etc/sudoers.d片
    

    很多linux运维由于对sudo命令理解不深,只是单纯以为加入sudo组的用户可以赋予root权限,而没有对权限分配作细化分配,就如很多linux运维在chomod +x file时候直接给与chomd 777 file一样,过大了分配了权限,虽然能够达到其使用的功能,但实际给黑客提权留下了操作漏洞。因此,这个提权漏洞完全是因为linux运维的配置不当引起的。

    三、蓝队防御思路

    1、日志提取

    查看/etc/rsysylog.conf文件,查看auth,authpriv.*类别的日志保存的文件位置。

    # First some standard log files.  Log by facility.
    #
    auth,authpriv.*                 /var/log/auth.log
    *.*;auth,authpriv.none          -/var/log/syslog
    #cron.*                         /var/log/cron.log
    #daemon.*                       -/var/log/daemon.log
    kern.*                          -/var/log/kern.log
    #lpr.*                          -/var/log/lpr.log
    mail.*                          -/var/log/mail.log
    #user.*                         -/var/log/user.log
    

    通过grep命令过滤出sudo行为的动作,从而清晰找到提权动作。

    root@bulldog:/etc/rsyslog.d# grep 'sudo' /var/log/auth.log 
    Dec 24 20:25:14 bulldog sudo:   django : TTY=pts/0 ; PWD=/home/bulldogadmin/.hiddenadmindirectory ; USER=root ; COMMAND=/bin/su -
    Dec 24 21:11:10 bulldog sudo:   django : 1 incorrect password attempt ; TTY=pts/0 ; PWD=/tmp/LinEnum ; USER=root ; COMMAND=list
    Dec 25 04:04:26 bulldog sudo:   django : TTY=pts/0 ; PWD=/tmp/LinEnum ; USER=root ; COMMAND=list
    Dec 25 04:05:26 bulldog sudo:   django : TTY=pts/0 ; PWD=/tmp/LinEnum ; USER=root ; COMMAND=/bin/su -
    
    展开全文
  • sudo命令详解

    万次阅读 多人点赞 2019-02-19 09:48:16
    简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。 严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,...
  • sudo -l 查看sudo的权限; su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。 而sudo su是当前用户...
  • linux中sudo命令sudo or superuser do is a utility used on Linux, BSD, and Unix systems that provides the running command with root or Administrator privileges. Not every user needs to have root ...
  • 升级sudo至1.9.5p2,修复sudo漏洞

    千次阅读 2021-01-27 19:09:23
    升级sudo至1.9.5p2,修复sudo漏洞 ** 今天2021年1月27号,出现了新漏洞,有关sudo的。漏洞的详细内容你们就去百度吧,我们又不是系统开发人员,不需要了解那么多,只求怎么解决修复即可,然后为了方便,我简单整了个...
  • Ubuntu中sudo命令

    千次阅读 2019-01-31 11:22:12
    sudo是linux下常用的允许普通用户使用超级用户权限的工具,该命令为管理员提供了一种细颗粒度的访问控制方法,通过它人们既可以作为超级用户 又可以作为其它类型的用户来访问系统。这样做的好处是,管理员能够在不...
  • java:执行linux sudo命令

    千次阅读 2017-12-27 16:33:02
    我们知道java中执行控制台命令,都是通过 Runtime.exec系列方法。 如果要执行root权限的命令需要用到sudo,需要输入sudo密码,这个... echo ‘sudopassword’ | sudo -S cat /etc/profile 但是在java中通过 Runtime.exe
  • su切换用户和sudo用户提权

    千次阅读 2019-06-04 13:18:30
    su切换的基本用法: Substitute User,切换用户 ...修改全局配置,启用日志:/var/log/sudo,记录sudo提权使用情况 [root@client10 ~]# vim /etc/sudoers #添加以下内容 Defaults logfile="/var/log/sudo"
  • su、sudosudo su、sudo -i的用法和区别

    万次阅读 多人点赞 2018-10-07 12:10:50
    su root 输入root密码后切换... ... sudo 一般加的是命令 sudo -i root与sudo - root、sudo -i ,sudo - ,sudo root效果相同 提示输入密码时该密码为当前账户的密码 要求执行该命令的用户必须在sudoers中才可以 ...
  • 这是一个神奇的错误,缘由是因为有人将/usr/bin/sudo的权限改为777或其他。 解决办法:最终目的只有一个,想办法执行 $ chmod 4755 /usr/bin/sudo $ chmod 755 /usr 二、解决办法 1.如果知道root密码。 su...
  • Linux中sudo命令介绍

    千次阅读 2017-04-28 09:35:10
     “Sudo”是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,...
  • 下看看/etc/sudoers这个配置文件: ROOT ALL=(ALL) ALL 用户账号 登陆者来源主机名 =(能够切换的身份) 可运行的命令 sudo搭配su sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令...
  • 【Linux】sudo配置文件及相关命令

    千次阅读 2021-01-22 14:43:48
    【Linux】sudo文件及相关配置 sudo意思是super-user do,让当前用户暂时以管理员的身份root来执行命令 visudo命令 需要超级用户权限;默认编辑/etc/sudoers文件; sudoers文件的默认权限是440,默认无法修改;该...
  • sudo:1.8.23(使用 sudo -V) 目标sudo:1.9.2 2. 准备 查看本地sudo版本 sudo -V [root@root1 data]# sudo -V Sudo version 1.8.23 官网查看最新版本文件 https://www.sudo.ws/dist/ 3.下载最新版本到...
  • 修改sudo权限

    千次阅读 2019-03-14 21:41:12
    我在修改sudo权限时设置错误,导致不能使用sudo,同时不能使用su进入root用户修改sudoers,在查了很多资料解决了这个问题,同时发现关于修改sudo权限的博文很多,但大都杂乱无章,只能解决某一个问题,我在此将修改...
  • sudo apt install make

    千次阅读 2020-07-01 23:42:18
    sudo apt install make 1. sudo apt install make (base) yongqiang@yongqiang:~$ make Command 'make' not found, but can be installed with: sudo apt install make sudo apt install make-guile (base) ...
  • 环境变量配置: # ~/.bash_profile export GOROOT=/usr/local/go export GOPATH=/usr/local/GO export PATH=$PATH:$GOROOT/bin:$GOPATH/... 使用非root用户,执行sudo go version获得输出sudo: go: command not f...
  • sudo 失败的解决办法

    千次阅读 2021-12-13 09:53:05
    sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin 这个是linux为保证系统安全所做的限制, 解决方法: 在terminal窗口下,依次...
  • sudo vimVim opens file even if the user does bot have write permission to the file. But after revision, how to write file content with sudo in Vim if Vim reports no permission to write the file. 即使...
  • 如 echo $pw | sudo -S xxx 大写的S 第二种: /etc/sudoers中  username ALL=NOPASSWD:ALL 如果不放心,可以只指定 一部分路径的权限 username ALL=NOPASSWD:/usr/bin: 等等 此方法就是添加了一个免密的...
  • 如果没有给普通用户配置过 NOPASSWD,那么每次非root用户在命令行终端执行需要root权限的操作时都需要需要密码然后回车,...echo 密码 | sudo 命令 示例,如下 [admin@BizMsTestAlpha test]$ docker ps Got permissi...
  • Jenkins执行sudo指令,设置不需要密码

    千次阅读 2021-02-09 13:20:34
    前言 Jenkins系统中添加执行脚本的时候,有一些命令是需要sudo权限和来执行...sudo chmod u+w /etc/sudoers sudo vim /etc/sudoers 添加下面一行 zrs ALL=NOPASSWD: ALL # # This file MUST be edited with the 'visud
  • Linux下sudo命令实例讲解

    万次阅读 多人点赞 2017-11-30 21:50:46
    一、sudo简介 1、概念:  sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登陆和管理时间,...
  • sudo 命令无法使用

    千次阅读 2019-04-11 19:09:41
    1. 不能使用sudo命令解决方法: 想查看这个用户可以使用哪些sudo命令,输入正确密码却不能查看,原因就是在/etc/sudoers中未添加该用户。 [xm@oracle ~]$ sudo -l [sudo] password for xm: Sorry, user xm may not ...
  • 1、sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了...
  • CentOS升级sudo版本

    千次阅读 2020-08-22 12:10:14
    1查看sudo版本 sudo --version 2.下载sudo最新安装文件 sudo官方地址https://www.sudo.ws/ 3.解压 tar -zxvf sudo-1.9.2.tar.gz 4 cd sudo-1.9.2 ./configure --prefix=/usr --libexecdir=/usr/lib --with-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,200,045
精华内容 480,018
关键字:

sudo

友情链接: Ppisce_files.zip