我想在我的计算机上保留一个日志文件。我还想向不同的帐户授予权限来执行各种系统特定的作业,例如安装卷/安装包等。因此,该用户必须具有 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
被授予系统超级用户权限的用户需要
- 完全信任,并且
- 负责。
如果情况并非如此,那么用户需要作为 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