Усі команди в моєму Crontab закінчуються помилкою, якщо дозвіл відхилено.


10

Оновлення: на це питання не буде отримано остаточного відповіді; Я перейшов до іншого дистрибутива і з тих пір не спостерігав цієї проблеми. Мені ніколи не вдалося виправити це за допомогою проникливих відповідей, наявних у той час, але Ваша ефективність використання палива може відрізнятися (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 встановлений груповою установкою:

$ 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

Сам кронтаб належить мені (не дивно, оскільки я можу його відредагувати):

$ 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 Керування ключем / горінням
  • Управління сесіями 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, немає /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, як щодо дозволів самого файлу crontab всередині папки crontabs, тобто /var/spool/cron/crontabs/username?
Алаа Алі

1
Хм. Що /var/log/auth.logговорить про CRON?
Алаа Алі

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

1
@ssoto Як я дізнаюся? Я являюсь локальним користувачем, якщо це те, що ви маєте в виду.
l0b0

Відповіді:


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.


У мене був такий самий рядок (напевно, його дісталося десь із перехрестя), прокоментував це і все почало працювати знову.
Майк

1

Ваша конфігурація PAM не відрізняється. Це звичайно, якщо ви використовували "зовнішні" методи аутентифікації, такі як сканери відбитків пальців, акаунти LDAP, клавіші USB або подібні. В основному, cron не може працювати сканером відбитків пальців, тому він не може увійти як ви.

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

Я не можу багато допомогти вам сказати, що має бути в цих файлах. Багато залежно від вашої установки може відрізнятися. Але відключення "необхідних" методів аутентифікації до лівої сторони лише "Unix Authentication" може бути хорошим першим кроком.

Це можна зробити, запустивши pam-auth-updateяк root і знявши галочку з інших полів. Будьте дуже обережні, оскільки це може залишити вас системою, на яку ви не можете ввійти, якщо це зроблено неправильно. Вимкніть їх по черзі, перезавантажте для безпеки та тестуйте. НІКОЛИ НЕ ВІДБУДАТИ "Unix Authentication"


Мені повинно бути зрозуміло, сканер відбитків пальців, як правило, повинен бути "необов'язковим", не потрібним ". Зробити це "необхідним" означає, що речі без вашого відбитка пальця не можуть "увійти". Через таку помилку конфігурації у вас може виникнути така проблема. Однак зазвичай сканер друку пальців (або USB, LDAP, SMB або будь-який інший) не спричинить проблему.
coteyr

Я не підключив ані сканери відбитків пальців, ані USB-накопичувачі. Ви, можливо, знаєте десь, я можу перевірити, яким буде вміст за замовчуванням/etc/pam.d/common-* ?
l0b0

sudo dpkg-reconfigure pamце кращий спосіб. Однак ви можете скористатися sudo dpkg -i --force-confmissпісля видалення файлу (CAREFUL), і він повернеться назад, дивіться це посилання: superuser.com/questions/69045/…
coteyr

/usr/sbin/dpkg-reconfigure: pam is not installed. Я також спробував sudo dpkg-reconfigure libpam-runtime, але це не допомогло.
l0b0

1
Я не думаю, що це відсутні пакет. Я думаю, що це заплутаний конфігуратор. Помилка "поганий стрибок PAM у стеку" означає, що з певних причин необхідний модуль пам’яті не міг автентифікувати. Як я вже говорив, це, як правило, викликано тим, що люди возиться зі своїми файлами пам’яті свідомо чи випадково, і додають необхідний модуль, який не працює. Деякі приклади можуть бути автентифікацією SMB, автентифікацією LDAP, автентифікацією на основі апаратних засобів тощо. Майте на увазі, якийсь пакунок, можливо, додав файл, який викликає проблему. Pam працює, тому що ви можете увійти, але це також не працює, оскільки cron не може
coteyr

1

Ми намагалися запланувати cron від користувача LDAP (не користувач машини) і отримуємо той самий permission deniedдля навіть введення базової echoкоманди або сценарію, в crontabтой час як він повністю працював з файлами користувачів (які мають записи в / etc / passwd). Скориставшись допомогою детальних коментарів щодо усунення несправностей, доданих ОП, ми перевірили файл, /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і це працює як принадність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.