我在 Amazon Linux 上遇到奇怪的 Linux cron 作业权限错误,并且在网络上找不到相关信息。
1. First I create a cron job with a regular user
[newuser@node1 home]$ crontab -e
no crontab for newuser - using an empty one
crontab: installing new crontab
2. Then I try to read the cron job file, permission deny
[newuser@node1 home]$ cat /var/spool/cron/newuser
cat: /var/spool/cron/newuser: Permission denied
奇怪的是,“newuser”是该文件的所有者,为什么“权限被拒绝”?
Login as root.
[root@node1 home]# cd /var/spool/cron
[root@node1 cron]# ls -l
-rw------- 1 newuser newuser 47 Aug 3 08:28 newuser
[root@node1 cron]# cat /var/spool/cron/newuser
1 1 1 * * /usr/bin/php /tmp/scheduleJob.php
[root@node1 spool]# ll -d /var/spool/cron
drwx------ 2 root root 4096 Aug 3 08:28 /var/spool/cron
答案1
在 Linux 系统上,要访问文件,您还需要有权遍历路径中的所有目录(UNIX 权限中的执行位)。在您的情况下,/var/spool/cron
权限设置为rwx------
,所有者为root
,因此您无法以其他用户身份遍历该目录,root
并且Permission denied
在尝试访问其中的内容时会出现错误。
答案2
伟大的主题,它为我指明了正确的方向。我正在修复一个已克隆的虚拟机,所有 GID 和 UID 都搞乱了。
以下是我在 RedHat 5 上修复我的问题的方法:
[root@pb-qad /]# find . -name cron.allow
./etc/cron.d/cron.allow
--ADDED mfg user
[root@pb-qad ~]# chown root:crontab /usr/bin/crontab
chown: `root:crontab': invalid group
[root@pb-qad ~]# groupadd crontab
[root@pb-qad ~]# groupmod crontab --gid 65535
[root@pb-qad ~]# chown root:crontab /usr/bin/crontab
You have new mail in /var/spool/mail/root
[root@pb-qad ~]# chmod g+s /usr/bin/crontab
[root@pb-qad ~]# ls -al /usr/bin/crontab
-rwxr-sr-x 1 root crontab 315432 Dec 11 2009 /usr/bin/crontab
[root@pb-qad ~]# usermod -a -G crontab mfg
[root@pb-qad ~]# groupmod -g 65535 crontab
groupmod: 65535 is not a unique GID
[root@pb-qad ~]# cd /var/spool/
最终修复
[root@pb-qad spool]# chown root:crontab cron
[root@pb-qad spool]# ll -al
total 476
drwxr-xr-x 16 root root 4096 Oct 1 2009 .
drwxr-xr-x 26 root root 4096 Mar 21 15:49 ..
drwxr-xr-x 2 root root 4096 Dec 5 2008 anacron
drwx------ 3 daemon qad 4096 Nov 16 2009 at
drwxrwxrwx 2 smmsp smmsp 69632 Apr 25 09:25 clientmqueue
drwx-wx--T 2 root crontab 4096 Mar 21 15:49 cron
现在,Cron 作为 mfg 用户运行!