AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1188164
Accepted
Invarianz
Invarianz
Asked: 2019-11-13 04:55:27 +0800 CST2019-11-13 04:55:27 +0800 CST 2019-11-13 04:55:27 +0800 CST

sudoers 文件:只允许 sudo 组执行某些二进制文件

  • 772

我正在尝试将我的 Ubuntu 19.10 安装上的 sudo 组限制为仅某些分类的 ouf 可执行文件。

sudoers 文件现在具有以下形式:

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) NOPASSWD: /usr/bin/apt,/usr/bin/apt-key,/usr/bin/apt-add-repository,/usr/bin/make

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

可悲的是,仍然无法执行程序并显示错误消息,例如apt update:

Sorry, user ubuntuuser is not allowed to execute '/usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin apt update' as root on Ubuntumachine.

如果我添加/usr/bin/env到可执行列表中,我可以再次执行每个命令,而不仅仅是使用sudo.

sudo
  • 1 1 个回答
  • 5392 Views

1 个回答

  • Voted
  1. Best Answer
    Eliah Kagan
    2019-11-13T08:18:33+08:002019-11-13T08:18:33+08:00

    正如您所发现的,一个 shell 别名使得您运行sudo的每个命令都通过env而不是直接运行命令。

    在您编辑/etc/sudoers以限制sudo组成员可以运行的命令后,所有sudo命令都报告您不允许运行env。因此,出于某种原因,每次运行时,它都会尝试使用. 此外,错误消息总是采用这种确切的形式:sudo commandenv

    Sorry, user ubuntuuser is not allowed to execute '/usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin command' as root on Ubuntumachine.

    以env这种方式使用是使用您的而不是其选项的价值的常用技术。一些用户定义了一个 shell 别名或 shell 函数调用来运行类似的东西。在 Bash 中,运行将显示命令可能意味着的所有内容,其中首先显示 shell 选择的含义。(只会显示那个。)sudo$PATHsecure_pathsudosudo commandtype -a sudosudotype sudo

    回忆起您定义的别名后,您可以通过将别名更改为不使用来解决问题env。当然,完全删除别名也可以。


    话虽如此,我鼓励您考虑不要使用此sudoers配置,因为与默认配置相比,它没有安全优势。实际上,它比默认配置更不安全。

    主要问题是,虽然您似乎打算使用这条线

    %sudo   ALL=(ALL) NOPASSWD: /usr/bin/apt,/usr/bin/apt-key,/usr/bin/apt-add-repository,/usr/bin/make
    

    为了限制sudo组成员可以运行的命令,访问这些命令足以执行任何操作。作为一个例子——这只是一个例子——该sudo组的成员可以创建以下内容Makefile:

    .PHONY: elevate
    elevate:
        su -
    

    然后运行sudo make会给出一个 root shell,其效果与以 root 身份成功登录的效果相同。(或者su -可以用另一个命令替换,例如visudo方便编辑sudoers文件。或者它们可以visudo从 . 给出的根 shell运行su -。)

    这不能通过限制传递的参数来解决。在这种情况下,make它本身不接收命令行参数。

    您允许sudo组成员运行的其他命令也足以获得对系统的完全访问权限。即使apt单独也足以让用户安装他们想要的任何软件,包括不是来自任何已配置存储库的软件 ( )。制作自己的 .deb 包并不难,而且(在其他攻击路线中).deb 包可以包含在执行安装时以 root 身份运行的脚本。apt install ./package.deb

    然后是 Polkit。如果这是一个桌面系统,Ubuntu 中的 Polkit 被配置为允许sudo组成员以 root 身份运行任意命令:

    pkexec command

    即使默认配置为授予sudo组成员能力,pkexec也不受sudoers文件内容的影响。

    至少在理论上,这不是问题,因为您可以重新配置 Polkit。

    我说您的配置不如默认配置安全的原因是您使用的是NOPASSWD. 这意味着作为sudo组成员运行的任何程序都可以作为 root 执行任何操作,而无需任何用户交互。

    的安全影响NOPASSWD虽然很大,但有时被夸大了。毕竟,控制了该sudo组成员运行的程序的攻击者已经可以放置一个虚假的sudo实用程序(例如,借助别名或 shell 函数)并获取用户的密码。那很可能会成功。但这很麻烦,而且不是即时的。NOPASSWD消除了这个麻烦。您可能决定要这样做,但我建议您仔细考虑风险,特别是如果这是一个多用户系统(听起来确实如此)。


    从您希望允许sudo组成员运行的命令来看,听起来这些用户确实在管理系统中扮演角色。这是有道理的——毕竟,如果他们不这样做,他们可能就不会成为该sudo小组的成员。即使在您配置的“精神”内sudoers,它们也可以启用任意存储库,从它们在系统范围内安装任意软件,并且我认为让它们make以 root 身份运行,这样它们就可以对从源代码编译的软件执行相同的操作,例如sudo make install.

    如果您完全信任该sudo组的成员(或者可能只是您自己),但只是想让他们更难意外做错事,那么一种方法可能是给他们单独的不在该sudo组中的帐户,因为不需要他们sudoroot的任务。

    如果您不信任他们,那么不太可能有技术解决方案。即便你将他们的能力锁定得更远,也还不够。控制整个系统上存在哪些软件供所有用户使用的能力始终等同于以 root 身份执行任意操作的能力。

    • 1

相关问题

  • GUI sudo 不工作?

  • 如何在 sudo 下只运行一次桌面图形应用程序?

  • 如何将用户添加到“sudo”组?

  • Nautilus 自动以 root 身份浏览

  • 为什么我需要 root 权限才能在命令行中卸载驱动器,而不是在 Nautilus 中?如何改变它?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve