我考虑做这样的事情:
sudo ln -s ~/myCustomCrontab /var/spool/cron/crontabs/username
因为我想将所有自定义文件放在我的主目录中。我能想到的可能的风险是
- 安全性(权限应该如何保持安全?)
- 系统错误
或者有更好的方法来“跟踪文件”吗?
答案1
不!
不要那样做!
无论如何,将您crontab
(和其他人)的副本存储在某个位置,例如您的主目录,但不要触摸系统文件。
crontab -l >my_crontab # Start by getting current rules
vi my_crontab # Edit my copy of the crontab file
crontab my_crontab # Install it
(就我个人而言,我用于$HOME/.crontab
每个用户的副本。)
跟踪系统文件的更好方法可能是创建源代码存储库(git、cvs、mercury 等)并使用它来跟踪您的更改。 AMakefile
可用于将更改安装到相关系统目录中并重新启动相关服务;在这种情况下,您只需键入sudo make install
即可。
答案2
这不起作用,至少在类似 Debian 的系统中((非系统)用户的符号链接或硬链接 crontab 文件是完全被忽视)。如果您用来crontab
更改 crontab 文件,它也会失败。如果 cron 版本仍然接受符号链接的 crontab 文件,则它造成可能的安全漏洞因为不再检查 crontab 文件的一致性。
使用您的符号链接解决方案,crontab -e
如果您(或某些安装脚本)更改 crontab 文件,则会崩溃:
crontab: crontabs/username: rename: Operation not permitted
因为它会立即移动临时文件来/var/spool/cron/crontabs/username
替换旧文件。
crontab 内置了许多额外的安全检查,因此 cron 系统不能被用来危害系统。例如,它会在安装或更改 cron 文件之前检查其内容。无效的 cron 文件可能会使cron
守护进程崩溃,或者可能(至少理论上)滥用它来获得系统上的更多权限。使用您的解决方案,不再检查 crontab 文件。
答案3
无需链接。只需在您想要的 crontab 文件 (/home/user/my_crontab) 中添加一行即可进行每日安装。
58 23 * * * crontab /home/user/my_crontab
00 12 * * * bash /home/user/do-other things.
通过安装来启动进程:crontab /home/user/my_crontab
答案4
如前所述,这在大多数系统上不起作用,因为大多数 CRON 实现都不会读取符号链接。让事情变得更复杂的是,cron 是 /var 中为数不多的系统配置文件之一。请注意,通常在/etc/crontab
或中的自定义文件/etc/cron.d/<yourfilename>
可以更好地替代从 /var 获取文件。此外,您希望拥有规范源(如果您对它们进行版本控制则更好)是一个很好的愿望。这允许您使用类似的东西等等守门员保留版本控制的备份。但是,像你一样,我喜欢将所有内容放在一个地方(我的配置文件etc
和点文件位于我的主目录中的单个版本控制文件夹中;使重新配置和恢复变得更加容易),所以当我只需要少于 1 个文件时,我发现 etc keeper 太过分了文件的%。
我不会在每次 CRON 运行时不断安装新的 crontab(现在,如果有人访问您在家庭中的用户拥有的文件并添加由根级 cron 提升的恶意内容,这就是一个安全缺陷),我会复制您必须的 cron每次运行时的规范目录:
0 * * * * <username> cp /etc/cron.d/<your custom cronfile> /home/user/<where you want your backup>
然后,只要系统在这些每小时运行之一期间处于开启状态(或者只是将其设置为系统通常开启的时间),备份就会存储到您的版本控制区域。当您想要更新 cron 时,您可以将源修改为 root,而不是您的用户级备份。是的,这不是理想的观点,但考虑到 CRON 的安全要求,它允许您保留规范的(版本控制的)配置源,而无需以更黑客的方式备份全部或一小部分等。
对于您最初关于安全性的问题:如果您链接到/etc
主规范文件的任何文件被具有较高访问权限的进程使用来运行命令(例如 CRON),那么这就是一个安全风险(尽管可能不是一个巨大的风险)如果您没有打开端口、防火墙和单用户系统),因为如果任何人可以访问该文件,那么他们就可以以 root 身份运行命令(这可能是 CRON 不允许符号链接的原因)。如果您存储的内容仅用于读取级别配置(例如,/etc/fstab
根据执行过程的能力和操作,它仍然可能存在风险,但风险较小。但像您一样,我承担很小的风险对于一个有防火墙的、无服务的单用户系统来说,要将整洁的版本控制备份保存在一个地方,但是在这种情况下,CRON 不会让您这样做,因为许多系统的攻击面比您大得多。或者我。