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)
一晩ほど様子を見てみたが、特に問題なくスケジュール通りに実行されている。
とりあえずは、これで問題はなさそうだ。