crontabのすべてのコマンドが「Permission denied」で失敗する


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が設定されたグループ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、いいえ/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 2013年

@ l0b0、crontabsフォルダー内のcrontabファイル自体の権限についてはどう/var/spool/cron/crontabs/usernameですか?
Alaa Ali 2013

1
うーん。/var/log/auth.logCRON とは何ですか?
Alaa Ali 2013

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

1
@ssotoどうやって調べるの?私は午前ローカルそれはあなたが何を意味するかだ場合、ユーザー。
l0b0 2013年

回答:


2

PAM bad jump in stack 大きな手がかりです。

あなたの/etc/pam.d/cron端に1つの余分な行を追加したストック・バージョンと異なります。

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認証」だけで無効にすることは、最初のステップとして適切です。

これを行うにはpam-auth-update、rootとして実行し、他のボックスをオフにします。正しく行わないとログインできないシステムが残る可能性があるため、非常に注意してください。一度に1つずつ無効にし、安全のために再起動してテストします。「UNIX認証」を無効にしないでください


私は明確にする必要があります、指紋スキャナーは通常「必須」ではなく「オプション」であるべきです。「必須」にすることは、指紋がないものは「ログイン」できないことを意味します。このような構成エラーのため、このような問題が発生する可能性があります。ただし、通常は指紋スキャナー(またはUSB、LDAP、SMBなど)では問題は発生しません。
coteyr 2013年

指紋スキャナーやUSBドライブを接続していません。のデフォルトのコンテンツが何であるかを確認できる場所をご存知/etc/pam.d/common-*ですか?
l0b0 2013年

sudo dpkg-reconfigure pamある最善の方法。ただし、使用することができますsudo dpkg -i --force-confmiss(気をつける)ファイルを削除した後、それが戻って1を入れて、このリンクが表示されます:superuser.com/questions/69045/...
coteyr

/usr/sbin/dpkg-reconfigure: pam is not installed。私も試しましたがsudo dpkg-reconfigure libpam-runtime、役に立ちませんでした。
l0b0 2013年

1
不足しているパッケージではないと思います。私はそれがめちゃくちゃな設定だと思います。「スタックのPAM不正ジャンプ」というエラーは、何らかの理由で、必要なPAMモジュールが認証できなかったことを意味します。私が言ったように、これは通常、人々が故意にまたは偶然にpamファイルをいじって、機能していない必要なモジュールを追加することによって引き起こされます。たとえば、SMB認証、LDAP認証、ハードウェアベースの認証などです。一部のパッケージでは、問題の原因となっているファイルが追加されている場合があります。Pamは機能しています。ログインはできますが、cronが機能しないため機能しません
coteyr

1

LDAPユーザー(非マシンユーザー)からcronをスケジュールし、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、それは魅力のように機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.