Crontab'ımdaki tüm komutlar "İzin reddedildi" ile başarısız oluyor


10

Güncelleme: Bu konu kesin olarak cevaplanmayacak; Başka bir dağıtıma geçtim ve o zamandan beri bu sorunu gözlemlemedim. O zamanlar mevcut içgörülü cevaplarla hiçbir zaman çözemedim, ancak yakıt verimliliğiniz değişebilir (YMMV).


crontab -eve crontab -lgayet iyi çalışıyor:

$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'

Ancak, her dakika böyle iki mesaj görüyorum /var/log/syslog:

Mon DD hh:mm:01 username CRON[PID]: Permission denied

Yani crontab okunuyor , ama bir şekilde hiçbir şey yürütemiyor (tabii ki aynı kullanıcı olarak giriş yaptığımda komutları doğruladım). Neden olduğu hakkında bir fikrin var mı?

/etc/cron.allowve /etc/cron.denyyok.

crontab grup setuid olarak ayarlanmıştır:

$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab

Crontabs dizini doğru izinlere sahip gibi görünüyor:

$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab

Crontab'ın kendisi bana ait (şaşırtıcı bir şekilde, onu düzenleyebildiğim için):

$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab

Ben değil bir üyesi crontabgrubuna.

Bu çizgiler /var/log/auth.logher dakika görünür (teşekkürler @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

Belki PAM bozulur? pam-auth-update(teşekkürler @coteyr) bunların tümünü listeler ve hepsi etkinleştirilir:

  • Unix kimlik doğrulaması
  • GNOME Anahtarlık Daemon - Giriş anahtarlık yönetimi
  • eCryptfs Anahtar / Montaj Yönetimi
  • ConsoleKit Oturum Yönetimi
  • Devralınabilen Yetenek Yönetimi

Bunlardan herhangi biri güvenli bir şekilde devre dışı bırakılabilir mi? Şifrelenmiş dosya sistemleri kullanmıyorum.

Debian hata girişine dayanarak çalışmayı denedim debconf-show libpam-runtimeve aşağıdaki hata mesajını aldım:

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

İçeriği /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

Sözü dosyaları ( /etc/environment, pam_env.so, /etc/default/locale, pam_limits.so, pam_succeed_if.so) bütün kullanıcı tarafından okunabilir.

Ubuntu 13.04 ile başka bir ana bilgisayarda, aynı kullanıcı crontab'ına sahip, /etc/cron.{allow,deny}yukarıdakiyle aynı izinlere sahip değil ve crontabgrubun bir üyesi değil , iyi çalışıyor (komutları kaydeder, ancak çıktıyı girmez /var/log/syslog).


İlk crontab satırını değiştirerek:

* * * * * /usr/bin/env >/tmp/env.log 2>&1

ve / tmp'nin dünya çapında yazılabilir olduğunu kontrol etmek:

$ 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 komutlarının hiç çalıştırılmadığını doğruladım : Permission deniedMesajlar hala görünüyor /var/log/syslog, ancak /tmp/env.logoluşturulmamış.


Ayarların rastgele bir listesine/etc/pam.d dayanarak aşağıdaki tutarsızlıkları buldum:

$ 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

Kurulu PAM paketleri:

$ 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

Bunları yeniden yüklemeyi denedim - yardımcı olmadı:

$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)

Karşılanmayan bağımlılıklar nedeniyle bunları temizleyemiyorum ve sonra yeniden yükleyemiyorum.


Cron olarak oturum açmayı ve komutları çalıştırmayı denediniz mi?
NotFromBrooklyn

@ l0b0, crontab dosyasının kendi izinleri, crontabs klasörü içinde, yani /var/spool/cron/crontabs/username?
Alaa Ali

1
Hmm. /var/log/auth.logCRON hakkında ne diyor?
Alaa Ali

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

1
@ssoto Nasıl öğrenebilirim? Ben değilim bir yerel kastettiğin buysa, kullanıcı.
l0b0

Yanıtlar:


2

PAM bad jump in stack büyük bir ipucu.

Kişisel /etc/pam.d/cronsonunda en çok bir satır eklenmesiyle stok sürümden farklıdır:

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

success=1Bit "Bu modül başarılı olursa, bir sonraki kural atlamak" anlamına gelir. Sadece bir sonraki kural yoktur, çünkü bu PAM yapılandırmanızdaki son satırdır.


Ben aynı satır vardı (interwebs bir yerden var olmalı), yorumladı ve her şey tekrar çalışmaya başladı.
Mike

1

PAM yapılandırmanız sıra dışı. Parmak izi tarayıcıları, LDAP hesapları, USB Anahtarları veya sıralama gibi "harici" kimlik doğrulama yöntemlerini kullandıysanız bu yaygın bir durumdur. Temel olarak cron bir parmak izi tarayıcısını çalıştıramaz, böylece sizin gibi giriş yapamaz.

/etc/pam.d/common-*Özellikle elle bir şey etkinleştirmediyseniz (örneğin bir Parmak izi tarayıcı kurulum komut dosyası bir şey açtıysa) rahatsız edici yapılandırmayı izlemekten biraz zor olabilir.

Bu dosyalarda ne olması gerektiğini size söyleyemem. Kurulumunuza bağlı olarak birçok şey farklı olabilir. Ancak "Unix Kimlik Doğrulaması" ile solunuza kadar "gerekli" kimlik doğrulama yöntemlerini devre dışı bırakmak iyi bir ilk adım olabilir.

pam-auth-updateKök olarak çalışıp diğer kutuların işaretini kaldırarak bunu yapabilirsiniz . Bu çok yanlış olun, çünkü bu yanlış bir şekilde yapıldığında giriş yapamayacağınız bir sisteme bırakabilir. Bunları teker teker devre dışı bırakın, güvenlik için yeniden başlatın ve test edin. ASLA "Unix Kimlik Doğrulamasını" DEVRE DIŞI BIRAKMAYIN


Net olmalı, bir parmak izi tarayıcı normalde "isteğe bağlı" değil "gerekli" olmalıdır. "Gerekli" yapmak, parmak iziniz olmayan şeylerin "giriş" yapamayacağı anlamına gelir. Bunun gibi bir yapılandırma hatası nedeniyle böyle bir sorunla karşılaşabilirsiniz. Ancak, normalde bir parmak izi tarayıcısı (veya USB veya LDAP veya SMB veya başka bir şey) soruna neden olmaz.
coteyr

Herhangi bir parmak izi tarayıcısı veya USB sürücüsü bağlamadım. Belki de varsayılan içeriğinin ne /etc/pam.d/common-*olacağını kontrol edebileceğim bir yeri biliyor musunuz ?
l0b0

sudo dpkg-reconfigure pamen iyi yoldur. Ancak, sudo dpkg -i --force-confmissdosyayı sildikten sonra kullanabilirsiniz (DİKKATLİ) ve bir tane daha bu bağlantıyı görecektir: superuser.com/questions/69045/…
coteyr

/usr/sbin/dpkg-reconfigure: pam is not installed. Ben de denedim sudo dpkg-reconfigure libpam-runtime, ama bu yardımcı olmadı.
l0b0

1
Bunun eksik bir paket olduğunu düşünmüyorum. Bence berbat bir yapılandırma. "Yığında bozuk PAM atlama" hatası, bazı nedenlerden dolayı, gerekli bir pam modülünün kimliğini doğrulayamadığı anlamına gelir. Dediğim gibi bu normalde pam dosyaları bilerek veya tesadüfen karışıklık ve çalışmayan gerekli bir modül ekleyerek insanlar neden olur. Bazı örnekler SMB kimlik doğrulaması, LDAP kimlik doğrulaması, donanım tabanlı kimlik doğrulaması vb. Olabilir. Bazı paketlerin soruna neden olan bir dosya eklemiş olabileceğini unutmayın. Pam çalışıyor, çünkü giriş yapabilirsiniz, ama aynı zamanda çalışmıyor çünkü cron yapamaz
coteyr

1

Makine kullanıcılarından (/ etc / passwd'de girişleri olan) tamamen dosya çalışırken, bir LDAP kullanıcısından (makine olmayan kullanıcı) cron'u programlamaya ve permission deniedhatta temel echokomut veya komut dosyasını koymak için aynı crontabşeyi almaya çalışıyorduk. OP tarafından eklenen ayrıntılı sorun giderme yorumlarından yardım alarak, /var/log/auth.logbu satırı bulduğumuz dosyayı kontrol ettik:

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

Biraz Google araması beni bizim için çalışan bu cevaba götürdü . Ayrıntıları buraya da eklemek.

Alanına /etc/sssd/sssd.conf, alanımızın altına böyle bir giriş ekledik (son satıra bakın).

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

Ve sonra yaptı sudo service sssd restartve bir cazibe gibi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.