相对执行路径如何通过 sudo 工作

相对执行路径如何通过 sudo 工作

我有一个具体的问题,引发了一些一般性问题。

具体问题:

我有一个 sudoers 规则应用于一组受到一定限制的用户。有问题的规则是%pusers ALL=(ALL) NOPASSWD: /bin/vi /etc/httpd/conf/*.用户想要 cd /etc/httpd/conf然后sudo vi httpd.conf(或sudo vi ./httpd.conf)。目前 sudoers 不允许这样做,但它将允许针对绝对路径运行 vi:sudo vi /etc/httpd/conf/httpd.conf。我假设在 sudo 检查是否允许之前相对路径没有被转换为完整路径,但我不知道确切的原因或如何解决这个问题。

我专门使用 RHEL7,尚未在其他 *nix 系统上对此进行测试,但我希望看到类似的行为。

一般问题:

  1. sudo 如何处理传递给它的相对路径执行侧面,就像上面的例子一样? (不是相对命令路径,而是命令执行的相对路径。)
  2. 在根据 sudoers 规则检查命令时,如何让 sudo 识别/转换命令的相对执行路径?

答案1

为常规用户提供对诸如或 之sudo类的编辑器的访问权限是有风险的。vivim请参阅此问题以获得深入的解释

使用现代版本的sudo,您可以在您的 中指定sudoers

%pusers ALL=(ALL) sudoedit /etc/httpd/conf/*

然后,您的用户可以使用 VISUAL 或 EDITOR 环境变量(像往常一样)指定他们选择的编辑器,然后使用

$ sudoedit /etc/httpd/conf/httpd.conf

或者

$ cd /etc/httpd/conf
$ sudoedit httpd.conf

也可以使用sudoedit,来代替。sudo -e

现代 sudo 识别sudoedit为内置命令sudo,当您使用它时,sudo理解参数应该是要编辑的文件的路径名(仅),然后可以处理相对路径名。

在一般情况下(= 不使用关键字时sudoedit),sudo不会假定知道有关命令参数的任何信息,因此如果您在文件中指定具有特定参数的命令sudoers,则只能进行“哑”字符串匹配。

严格来说,您实际上甚至不需要sudo授予对 Apache 配置文件的访问权限。 Apache并不特别关心配置文件的权限是什么,只要Apache本身可以读取它们即可(如果Apache使用<1024的端口,它通常以root身份启动,因此读取文件不是问题)。因此,既然您已经有了一个小组,您可以这样做:

 chgrp -R pusers /etc/httpd/conf
 chmod g+rws /etc/httpd/conf
 chmod g+rw /etc/httpd/conf/* 

RHEL7 甚至默认使用“用户组”系统,因此您的用户值umask应该已经是 002 或 007。如果这是真的,那么您只需这些简单的一次性设置即可为您的用户授予对 Apache 配置文件的写入权限。您的用户甚至可以在配置目录中创建新文件,他们将自动获得正确的组所有权和权限。

实际上,在这个方案中,最有可能意外搞乱配置文件权限的方法是以 root 身份向其中添加新文件:root 用户通常具有没有组写入位的 umask(传统上是 022 或更严格的 077),根权限setgid也可以胜过目录的权限。

您可能需要学习一些新习惯,但在这种情况下,忘记“您必须是 root 才能配置 Apache”实际上可能是一件好事。 (如果您认为sudo提供更多审计跟踪,那么请真正考虑将配置文件放在 Git 或其他版本控制系统下。)

相关内容