链接到 crontab 是邪恶的吗?

链接到 crontab 是邪恶的吗?

我考虑做这样的事情:

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 不会让您这样做,因为许多系统的攻击面比您大得多。或者我。

相关内容