no about note

エンジニアのメモ書き

CentOS6.xでrc.localに書いたsudoコマンドが実行されなかった話

やりたいこと

  • CentOS6系でOS起動時に一般ユーザでコマンドを実行したい

ためしたこと

  • /etc/rc.d/rc.localに以下コマンドを書いた
  • sudo -u ユーザ名で ユーザ名を指定して
  • zncプロセスをzncユーザで実行する
# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

## Autostart znc
sudo -u znc /usr/bin/znc -> 実行されない
touch /tmp/rc_local_test_20160204 -> 実行される

シェルスクリプトでラップしたら

rc.localの実行権限とsuによるユーザー切り替えで詰まった

su -l znc -s /bin/bash -c '/usr/local/bin/znc.sh'

以下コマンドを記述したシェルスクリプトでラップしたけどだめだった

# cat /usr/local/bin/znc.sh
#!/bin/bash

/usr/bin/znc

結論

# /etc/rc.d/rc.local
su -l znc -s /bin/bash -c '/usr/bin/znc'

原因は、実行ユーザが/sbin/nologinになってたので、suができなかったため。 シェルを指定してsuすることで、スイッチができる

su できないユーザーへsu する

nologinなApacheにスイッチしてみる例

# grep apache /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin  <- nologin

# su - apache
This account is currently not available.

# su -l apache -s /bin/bash
-bash-4.1$

$ pwd
/var/www

/etc/rc.d/rc.localでsudoが使えない理由

ユーザがnologinだから?

# useradd test_user
# grep test /etc/passwd
test_user:x:500:500::/home/test_user:/bin/bash

DVD付 CentOS徹底入門 第3版

DVD付 CentOS徹底入門 第3版