我可以限制具有 root 权限(使用 sudo)的用户访问/删除特定文件吗?

我可以限制具有 root 权限(使用 sudo)的用户访问/删除特定文件吗?

我想在我的计算机上保留一个日志文件。我还想向不同的帐户授予权限来执行各种系统特定的作业,例如安装卷/安装包等。因此,该用户必须具有 root 权限,但必须限制单个日志文件,以便她/他应该无法更改/删除/写入该特定文件。

答案1

首先,您可以通过 sudoers 文件使日志文件不可被 root 写入:

user ALL=(ALL) !/var/log/logfile

这将使日志文件无法被 root 修改、移动或删除。

然后您可以编辑 sudoers 文件,以便用户只能使用您认为必要的命令:

user ALL=(ALL) /bin/command1 /bin/command2 /bin/command3

user ALL=(ALL) !ALL

这将禁止您不希望用户拥有的任何命令。您还可以通过以下方式使 sudoers 文件不可变,chattr +i /etc/sudoers以便用户无法以 root 身份修改它以允许自己访问日志文件。

答案2

如果您无法限制用户的 sudo,那么您可以将日志同步到不同的节点(rsync/rsyslog)。

答案3

被授予系统超级用户权限的用户需要

  1. 完全信任,并且
  2. 负责。

如果情况并非如此,那么用户需要作为 root 执行的操作应该以这样的方式严格指定,以便它们可以sudoers以精确的方式列在文件中(例如只能rm这些文件)。这样的用户也不应该能够使用它sudo来获得 root shell 环境。

如果这不可能,请考虑设置一个单独的非 root 帐户,在该帐户下可以执行所有需要的操作。

答案4

是的,您可以限制 sudo 用户运行某些特定的 root 用户命令。这样他/她就可以执行配置的权限,如下所示。

示例:您可以在 vi /etc/sudoers 中授予所需的权限或输入 visudo

在 /etc/sudoers 文件中添加以下类型的所需权限。

用户A权限:

Cmnd_Alias PERMISSIONS = /usr/sbin/lsof, /usr/bin/ssh, /usr/bin/scp, /usr/bin/rsync, /usr/bin/telnet, /usr/bin/traceroute, /usr/bin/kill, /usr/bin/ps, /usr/bin/netstat, /usr/bin/grep, /usr/bin/crontab, /usr/sbin/tcpdump, /bin/ping, /usr/bin/crontab -u root -l, /usr/bin/crontab -u root -e, /etc/init.d/crond reload, /usr/bin/updatedb, /bin/df, /usr/bin/du, /usr/bin/locate, /usr/bin/find, /bin/su

之后添加以下行

%User_A_permissions          ALL=PERMISSIONS

相关内容