这是一个奇怪的问题。我想为某个用户创建 crontab,该 crontab 对于该特定用户而言是只读的,并且只能通过 root 进行管理。听起来很简单?但问题在于:
$ ls -alh /var/spool/cron/my_user -r-------- 1 root root 386 5月 8日 15:13 /var/spool/cron/my_user
因此,该文件由 root 拥有/分组,并且仅对 root 具有读取权限 (0400)。
问题在于:
$ su-我的用户 我的用户〜$ crontab -e (向 crontab 写入一些内容) crontab:安装新的 crontab $ ls -alh /var/spool/cron/my_user -rw------- 1 my_user my_user 386 5月 8日 15:13 /var/spool/cron/my_user
因此,root 所拥有的文件(具有 root 的只读权限)可由非特权用户读取,然后被修改为 0600 (rw) 并由该用户拥有?
我忽略了什么明显的问题?
答案1
crontab 是 setuid。因此用户可以更新自己的 crontab。
你运行的是哪个版本的 cron。如果你运行的是支持放入片段的版本,/etc/cron.d
那么你应该这样做。
答案2
使用系统 /etc/crontab 文件,而不是用户 contab。
答案3
/var/spool/cron/my_user
在安装您想要防止更改的修改后,您可以使其不可变。
sudo chattr +i /var/spool/cron/my_user
答案4
您可以将用户添加到/etc/cron.deny
。这将拒绝用户访问命令crontab
,并且她无法再编辑她的 crontab。
AFAICT 中的一个/etc/cron.deny
条目不是禁用定义的 cronjobs。