cronにpamのエラーが出た際の回避方法

 linuxサーバーに対し、リモートからのrootによるsshを抑止する方式として、pamを用いることにした。

設定自体は簡単に出来たのだが、その後cronの実行時にpamのエラーが発生し、時間が来てもジョブが実行できない。という弊害が発生した。

 

その際のメッセージは、こんな感じ。


# cat /var/log/cron

 ----- 前略 ----

May 16 12:01:01 servername crond[4021]: (root) PAM ERROR (Permission denied)
May 16 12:01:01 servername crond[4021]: (root) FAILED to authorize user with PAM (Permission denied)


 メッセージを見る限り、pamの権限設定が上手く出来ていないようで、rootでジョブを実行する権限がなさそうだ。

 pamに関連する設定は、以下のように行っている。

1. /etc/pam.d/sshd に以下の1行を追加

 

account    required     pam_access.so

 

2. /etc/security/access.conf に以下の1行を追加

 

- : root : ALL

 

3. sshdを再起動

 

 

# ssh XXX.XXX.XXX.XXX hostname

root@XXX.XXX.XXX.XXX's password:
Authentication failed.

 

こっちは問題なくできてる。


cron は、/etc/crontab に以下のような記載を追記。

 

0 * * * * root /usr/local/bin/dbBackUp.sh

 

シェルの内容は、mariadbのバックアップを定期的に取得する。

/var/log/messagesにはコマンドのエラーなどは出ていないので、実行そのものがされていない模様。

 

何か設定が足りないのか。と access.conf を読んでいると、以下のような記載があった。

 

# User "root" should be allowed to get access via cron .. tty5 tty6.
#+ : root : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6

 

rootユーザーのcron実行の設定のようなので、この定義のコメントを外してcrondを再起動してみる。

 

# User "root" should be allowed to get access via cron .. tty5 tty6.
+ : root : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6

 

すると、以下のようにcronによるジョブが実行された。


# cat /var/log/cron

May 16 14:00:01 servername CROND[2764]: (root) CMD (/usr/local/bin/dbBackUp.sh)


一晩ほど様子を見てみたが、特に問題なくスケジュール通りに実行されている。

とりあえずは、これで問題はなさそうだ。