更新:此问题将无法得到最终解决;我已经转移到另一个发行版,此后没有观察到此问题。我当时无法使用当时有见地的答案来解决它,但是您的燃油效率可能会有所不同(YMMV)。
crontab -e
并crontab -l
正常工作:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
但是,我每分钟都会在这样的消息中看到两条消息/var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
因此,正在读取crontab,但是以某种方式它根本无法执行任何操作(当然,以同一用户身份登录时,我验证了命令)。知道为什么吗?
/etc/cron.allow
并且/etc/cron.deny
不存在。
crontab是set group setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
crontabs目录似乎具有正确的权限:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
crontab本身归我所有(不足为奇,因为我能够对其进行编辑):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
我不是该crontab
小组的成员。
这些行/var/log/auth.log
每分钟出现一次(感谢@Alaa):
Mon DD hh:mm:01 username CRON[1752]: pam_unix(cron:session): session opened for user username by (uid=0)
Mon DD hh:mm:01 username CRON[1752]: PAM bad jump in stack
也许PAM坏了吗?pam-auth-update
(感谢@coteyr)列出了所有这些,并且所有这些都已启用:
- Unix认证
- GNOME密钥环守护程序-登录密钥环管理
- eCryptfs密钥/安装管理
- ConsoleKit会话管理
- 可继承功能管理
可以安全地禁用其中任何一个吗?我没有使用任何加密的文件系统。
根据Debian错误条目,我尝试运行debconf-show libpam-runtime
,并且收到以下错误消息:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
内容/etc/pam.d/cron
:
# The PAM configuration file for the cron daemon
@include common-auth
# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session required pam_env.so
# In addition, read system locale information
session required pam_env.so envfile=/etc/default/locale
@include common-account
@include common-session-noninteractive
# Sets up user limits, please define limits for cron tasks
# through /etc/security/limits.conf
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
提到的文件(/etc/environment
,pam_env.so
,/etc/default/locale
,pam_limits.so
,pam_succeed_if.so
)都是由我的用户可读。
在具有Ubuntu 13.04的另一台主机上,具有相同的用户crontab,no /etc/cron.{allow,deny}
,与上述相同的权限,并且不是该crontab
组的成员,它可以正常工作(将命令记录在日志中,而不将输出记录在中/var/log/syslog
)。
通过更改第一crontab行:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
并检查/ tmp是否可在世界范围内写入:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
我已经验证了crontab命令根本没有运行:Permission denied
消息仍显示在中/var/log/syslog
,但未/tmp/env.log
创建。
根据随机列出的/etc/pam.d
设置,我发现以下差异:
$ grep '^[^#]' /etc/pam.d/sshd
@include common-auth
account required pam_nologin.so
@include common-account
@include common-session
session optional pam_motd.so # [1]
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
@include common-password
$ grep '^[^#]' /etc/pam.d/common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_ecryptfs.so unwrap
session optional pam_ck_connector.so nox11
$ grep '^[^#]' /etc/pam.d/common-account
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
$ grep '^[^#]' /etc/pam.d/common-session-noninteractive
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_ecryptfs.so unwrap
安装的PAM软件包:
$ dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam
libpam-cap
libpam-ck-connector
libpam-gnome-keyring
libpam-modules
libpam-modules-bin
libpam-runtime
libpam0g
python-pam
我尝试重新安装这些-没有帮助:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
由于依赖关系未得到满足,我无法清除然后重新安装它们。
/var/spool/cron/crontabs/username
如何?
/var/log/auth.log
说一下科雷?
id cron
>id: cron: No such user