Все команды в моем crontab не выполняются с сообщением "Permission denied"

Обновление: Этот вопрос не будет решен окончательно; я перешел на другой дистрибутив и с тех пор не наблюдал этой проблемы. Я так и не смог решить эту проблему с помощью проницательных ответов, доступных в то время, но эффективность использования топлива может быть разной (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 установлен группой 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 Keyring Daemon - управление связкой ключей для входа
  • eCryptfs Key/Mount Management
  • ConsoleKit Session Management
  • Inheritable Capabilities Management

Можно ли безопасно отключить любую из них? Я не использую никаких зашифрованных файловых систем.

Основываясь на Debian bug entry, я попробовал выполнить debconf-show libpam-runtime, и получил следующее сообщение об ошибке:

debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied

The contents of /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, без /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)

Я не могу очистить и затем переустановить их из-за неудовлетворенных зависимостей.

10
задан 20 October 2015 в 23:33

3 ответа

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.

0
ответ дан 20 October 2015 в 23:33

Ваша конфигурация PAM не в порядке. Это часто встречается, если вы использовали «внешние» методы аутентификации, такие как сканеры отпечатков пальцев, учетные записи LDAP, USB-ключи или тому подобное. По сути, cron не может работать со сканером отпечатков пальцев, поэтому он не может войти в систему как вы.

Необходимо удалить ошибочную конфигурацию из /etc/pam.d/common-*, хотя отследить ее может быть довольно сложно, особенно если вы не включили что-то вручную (например, если скрипт установки сканера отпечатков пальцев включил что-то) ,

Я не могу не сказать, что должно быть в этих файлах. Многое может отличаться в зависимости от вашей настройки. Но отключение «обязательных» методов аутентификации до тех пор, пока вы не оставите только «Unix Authentication», может быть хорошим первым шагом.

Вы можете сделать это, запустив pam-auth-update от имени пользователя root и сняв флажки с других полей. Будьте очень, очень осторожны, так как это может привести к тому, что вы не сможете войти в систему, если все сделано неправильно. Отключите их по одному, перезагрузитесь для безопасности и проверьте. НИКОГДА НЕ ОТКЛЮЧАТЬСЯ «Аутентификация Unix»

0
ответ дан 20 October 2015 в 23:33

Мы пытались запланировать крон от пользователя LDAP (не пользователь машины) и получали то же permission denied для того, чтобы даже поместить основной echo команда или сценарий в crontab, в то время как это работало полностью файл от пользователей машин (у кого есть записи в/etc/passwd). Взятие помогает из подробных комментариев поиска и устранения неисправностей, добавленных OP, мы проверили файл /var/log/auth.log где мы нашли эту строку:

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

Немного поиска Google взяло меня к этому ответу, который работал на нас. Добавление деталей здесь также.

В /etc/sssd/sssd.conf, под нашим доменом мы добавили, запись (видьте строку в последний раз) как это.

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

И затем просто сделал sudo service sssd restart и это работает как очарование.

1
ответ дан 20 October 2015 в 23:33

Другие вопросы по тегам:

Похожие вопросы: