我正在生产服务器上工作。它有一些日常 cron 作业,以下是它们的文件系统权限:
cron.daily$ ls -Al
total 24
-rwxr-xr-x 1 root root 332 Dec 3 10:33 0yum-daily.cron
-rwxr-xr-x 1 root root 2239 Jun 9 2014 certwatch
-rwxr-x--- 1 root root 953 Aug 29 2015 gdrive-backup
-rwx------ 1 root root 180 Jul 31 2013 logrotate
-rw-r--r-- 1 root root 618 Mar 17 2014 man-db.cron
-rw-r----- 1 root root 192 Jan 26 2014 mlocate
除一项工作外,所有工作均来自 CentOS 或托管提供商;虽然一份工作是我们的。这些权限扩大了范围。
我们的工作是 gdrive-backup,它有硬编码的用户名和密码。我们认为向全世界提供对它的读取权限是不合适的。
当 cron 作业位于文件系统上时,它应该具有哪些权限?
这是 crontab 的猫,(我认为)它表明没有什么特别的事情发生:
$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
$
一个相关的问题是cron 作业的运行时权限是什么?,但它讨论了作业运行时的用户凭据,而不是文件系统权限。
答案1
在 CentOS 上,每日 cron 作业的执行方式为
/usr/bin/run-parts /etc/cron.daily
run-parts 是一个 shell 脚本。它查看其参数(目录)的内容,过滤掉以 、 、 和 目录结尾的文件~
,.swp
然后.rpmsave
对于通过测试的每个文件if [ -x $i ]
(即可由 root 执行),它运行该文件。
/etc/cron.daily
因此,其中打开任何位的所有文件都x
将运行。如果您愿意,您可以设置这些文件的权限以拒绝所有人的读取访问权限; root没关系。如果您在可以作为参数传递给命令的脚本中嵌入了密码,请注意,所有/proc/*/cmdline
文件都是公开可读的,因此所有用户都可以在运行时看到所有命令和参数。