我的crontab中的所有命令均失败,并显示“权限被拒绝”


10

更新:此问题将无法得到最终解决;我已经转移到另一个发行版,此后没有观察到此问题。我当时无法使用当时有见地的答案来解决它,但是您的燃油效率可能会有所不同(YMMV)。


crontab -ecrontab -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/environmentpam_env.so/etc/default/localepam_limits.sopam_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)

由于依赖关系未得到满足,我无法清除然后重新安装它们。


您是否尝试以cron身份登录并执行命令?
NotFromBrooklyn

@ l0b0,在crontabs文件夹内,即crontab文件本身的权限/var/spool/cron/crontabs/username如何?
Alaa Ali

1
嗯 这是什么/var/log/auth.log说一下科雷?
Alaa Ali

@NotFromBrooklyn- id cron>id: cron: No such user
l0b0

1
@ssoto我如何找到?我一个本地用户,如果这是你的意思。
l0b0

Answers:


2

PAM bad jump in stack 是个大提示。

/etc/pam.d/cron的版本与普通版本有所不同,最后增加了一行:

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

success=1位的意思是“如果该模块成功,则跳过下一个规则”。只有下一条规则,这是您PAM配置中的最后一行。


我有同一行(必须从互连网上的某处获得它),将其注释掉,然后一切又开始工作。
2014年

1

您的PAM配置不正确。如果您使用了“外部”身份验证方法(例如指纹扫描仪,LDAP帐户,USB密钥或排序),则这很常见。基本上cron无法使用指纹扫描仪,因此它无法像您一样登录。

您需要删除有问题的配置,/etc/pam.d/common-*尽管很难追踪到它,特别是如果您没有手动启用某些功能(例如,指纹扫描仪设置脚本打开了某些功能)。

我不能告诉您这些文件中应该包含的内容。许多事情可能会有所不同,具体取决于您的设置。但是,仅使用“ Unix身份验证”禁用“必需的”身份验证方法可能是一个不错的第一步。

您可以通过pam-auth-update以root身份运行并取消选中其他框来执行此操作。请非常小心,因为如果操作不正确,这可能会使您无法登录。一次禁用一个,然后重新启动以确保安全并进行测试。切勿禁用 “ Unix身份验证”


我应该清楚,指纹扫描仪通常应为“可选”而非“必需”。将其设置为“必需”意味着没有指纹的内容将无法“登录”。由于这样的配置错误,您可能会遇到类似这样的问题。但是,通常情况下,指纹扫描仪(或USB或LDAP或SMB或其他)不会导致此问题。
coteyr

我没有连接任何指纹扫描仪或USB驱动器。您是否知道我可以检查默认内容的地方/etc/pam.d/common-*
l0b0

sudo dpkg-reconfigure pam最好的方法。但是,您可以使用sudo dpkg -i --force-confmiss删除文件(小心)之后,它会放一回看到此链接:superuser.com/questions/69045/...
coteyr

/usr/sbin/dpkg-reconfigure: pam is not installed。我也尝试过sudo dpkg-reconfigure libpam-runtime,但这没有帮助。
l0b0

1
我不认为这是一个缺少的包裹。我认为这是一个混乱的配置。错误“堆栈中的PAM错误跳转”表示由于某种原因,所需的pam模块无法进行身份验证。正如我所说,这通常是由于人们故意或无意中弄乱了其pam文件并添加了无法运行的必需模块所致。例如SMB身份验证,LDAP身份验证,基于硬件的身份验证等。请记住,某些软件包可能已添加了引起问题的文件。Pam正在工作,因为您可以登录,但也由于cron无法工作而无法工作
coteyr

1

我们试图从LDAP用户(非机器用户)安排cron permission denied,甚至在将基本echo命令或脚本放入时也要安排cron crontab,而它完全是从机器用户(在/ etc / passwd中具有条目)运行文件。在OP添加的详细故障排除注释的帮助下,我们检查了/var/log/auth.log找到以下行的文件:

pam_sss(cron:account): Access denied for user my_username: 6 (Permission denied)

谷歌搜索使我找到对我们有用的答案。在此也添加详细信息。

/etc/sssd/sssd.conf的域下的,我们添加了这样的条目(请参阅最后一行)。

[domain/my.domain.com]
....
ad_gpo_map_interactive = +cron

然后就做了sudo service sssd restart,它就像一种魅力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.