背景
ログインできないユーザで、apacheやtomcatなどを動作させたいことは、たまにあると思います。
よくあるケースなのに(そのはず…)、求める答えにたどり着くまでに時間がかかったので、投稿します。
今回は、user という名前のユーザを例として使用しています。
動作環境
- Amazon EC2
- Cent OS 7
Cent OSなので、/sbin/nologin
です。
OSによって違うようなので、そこは各OSに従ってください。
実行方法
表題の件は、下記のコマンドのような実現できます。
例は、tomcatを起動するコマンドになります。
$ su -s /bin/bash - user -c "/opt/tomcat/bin/catalina.sh start"
おまけ
ログインできないユーザか調べる方法
下記のように、/etc/passwd
を参照し、/sbin/nologin
となっていればログインできないユーザと特定できます。
$ more /etc/passwd
user:/sbin/nologin
この状態だと、su
しようとしても、This account is currently not available.
と表示され、ユーザを切り替えることができません。
$ su user
This account is currently not available.
/sbin/nologinのユーザに切り替える方法
とはいえ、/sbin/nologin
が設定されていて、ログインできないユーザにスイッチしたいときはあるかもしれません。
そんなときは、--shell=/bin/bash
を付与すると、ログインできないユーザでも切り替えることができます。
$ su - user --shell=/bin/bash
/sbin/nologinのユーザを追加する
/sbin/nologin
を付与する場合は、下記のようになります。
$ useradd -s /sbin/nologin user
/sbin/nologinにユーザを変更する
新規ユーザ追加との違いは、useraddかusermodしか違いはありません。
$ usermod -s /sbin/nologin user