阻止来自 sudo 用户的命令

阻止来自 sudo 用户的命令

我不需要管理员来更改我的 root 密码。我不希望任何 sudo 用户执行此命令:

sudo passwd $root

我已在 sudoers 文件中尝试使用以下命令:

%sudo ALL=(ALL) ALL, !/usr/bin/passwd $root

我该如何阻止它?

答案1

根据sudoers 手册

   It is generally not effective to "subtract" commands from ALL using the
   ’!’ operator.  A user can trivially circumvent this by copying the
   desired command to a different name and then executing that.  For
   example:

       bill        ALL = ALL, !SU, !SHELLS

   Doesn’t really prevent bill from running the commands listed in SU or
   SHELLS since he can simply copy those commands to a different name, or
   use a shell escape from an editor or other program.  Therefore, these
   kind of restrictions should be considered advisory at best (and
   reinforced by policy).

这就是您的 sudoers 策略不起作用的原因。

如果您想阻止用户获取 root 权限并更改其密码,请尝试以下步骤:

  • 假设你的 sudoers 包含此指令:

     root    ALL=(ALL:ALL) ALL
     %sudo   ALL=(ALL:ALL) ALL
    
  • 假设你的用户名是foo,他的群组是foosudogroups命令输出为:

    foo sudo
    
  • foosudo组中删除用户:gpasswd -d foo sudo此后,用户foo将无法使用 sudo 运行任何命令。

  • 编辑 sudoers 文件。使用此命令:

    sudo visudo -f /etc/sudoers.d/foo
    
  • 定义用户foo权限,例如:

    foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
    

    这意味着用户foo可以运行目录中/usr/bin/passwdsu命令之外的任何命令。注意:如果用户foo想要更改密码,可以运行passwd不带 的命令sudo

  • 用户权限的另一个示例foo

    foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
    

    这意味着用户foo可以运行目录中的任何命令/usr/bin/,并可以更改所有机器上除 root 之外任何人的密码。

Cmnd_Aliases您可以通过定义和创建“权限级别”来定义命令组。您可以在示例部分中找到有用的示例sudoers 手册,这是一个有用的关联关于如何使用 sudoers。

答案2

通过以下方式添加命令别名visudo

Cmnd_Alias PASSWD=/usr/bin/passwd
Cmnd_Alias SU=/bin/su

通过以下方式添加限制visudo

%nopasswdgroup ALL = ALL, !PASSWD, !SU

将用户添加到名为 nopasswdgroup 的组:

usermod -aG nopasswdgroup nopasswduser

相关内容