我正在运行一些 cron 作业 - 主要是备份相关的东西。
我必须备份 /etc/apache2/sites/available 等,这些都需要 root 访问权限。
我有一些问题:
在无头服务器上运行时:
- 脚本在哪个用户下运行(假设我没有在 cron 作业条目中指定用户)?
- 以 root 身份运行备份脚本可以吗 - 或者这是否会带来安全问题?
顺便说一句,我的服务器运行的是 Ubuntu 10.0.4 LTS
答案1
如果您已经充分保护了对脚本的访问并采取了合理的预防措施,那么从根 crontab 运行某些操作通常不会带来安全风险。
但不要以 root 身份运行非 root 用户可以编辑或覆盖的脚本。这适用于从 cron 运行的作业以及以交互方式运行的作业。
如果该脚本包含其他文件,同样也适用于它们。
如果有疑问,请始终使用最小权限原则。如果您仍然不确定,您可以随时在论坛和 IRC 上询问具体问题。
几乎总有办法以非 root 用户身份运行某些命令。如果其他方法都失败,使用 sudo 限制用户只能执行特定命令也可以限制造成危害的可能性。
因此,以您提供的备份 /etc/apache2/sites-available 的示例来说,该文件默认可供任何人读取,这意味着只有 root 才能访问可写入的目标。
你可以通过以下方式修复它
- 创建一个名为 backupadmins 的组(例如)
- 将目标目录上的组设置为 backupadmins
- 添加一个名为 backupuser 的用户(例如)
- 将用户 backupuser 添加到组 backupadmins。
- 使目录可由 backupadmins 组写入
- 从备份用户的 crontab 运行 cron 作业。
答案2
这取决于脚本在做什么。如果他们正在备份内容,那么他们作为 root 可能没问题 - 如果恶意用户覆盖这些脚本,那么你可能遇到更大的问题。
如果他们做了一些愚蠢的事情,例如执行目录中的文件,或者任何可能受到网络目录内容影响的事情,那么您可能需要寻找替代方案。
答案3
每天(或者无论设置运行的时间),全世界都有数以百万计的 cron 作业以 root 身份运行。
重要的是设置适当的权限。如果你正在运行某个任何人都可以写入的程序,那么恶意用户或进程可能会更改它正在做的事情。
一般来说,Cron 作业由 crontab 的所有者运行。例如,用户 crontab 可能位于。/var/spool/cron/crontabs/username
位于 或 (每日、每周、每月)的 Cron 作业/etc/crontab
将由root 运行。这些 crontab 文件的所有权和权限正确也很重要。/etc/cron.d/
/etc/cron.hourly