❄︎
Amazonでクリスマスギフトを贈ろう!

Linuxで”シェルを持たないユーザに一時的にシェルを持たせてスイッチユーザする方法

ども。あいしんくいっと(@ithinkitnet)です。

Linuxでユーザを作成した場合、デフォルトだとシェルを持っているのですが、サービスを起動させるのに利用される、いわゆるシステムユーザはシェルを持たないことが多いです。
ですが、中には一時的にシェルを持たせて障害の切り分けが出来ると便利だったりするんですよね。

例えば、apacheなんかはWEBブラウザからコンテンツが見れない場合の切り分けとして、apacheユーザでアクセス確認出来ると助かります。

「Forbidden」
なんて、こんな表示出た時は特に、ね。

そんな時は、一時的にシェルを持たせる方法が有効です。

シェルを持たないユーザたち

冒頭でも書きましたが、基本的にLinux上に作成されるユーザはシェルを持っています。
例えば、rootユーザしかり。

root:x:0:0:root:/root:/bin/bash

でも、サービス起動に使われるユーザはシェルを持っていないことが多いです。
例えば、「apache」ユーザの場合。

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

他にも「Postfix」ユーザとかとか。

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

このあたりは/etc/passwdファイルを見れば分かると思います。
それにしても、“シェルを持たないユーザ“って結構いるんですね。

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
~以下、略~

シェルを持たないユーザに一時的にシェルを持たせる方法

通常、シェルを持たないユーザにスイッチしようとすると以下のエラーで怒られます。

# su - apache
This account is currently not available.

まぁ、シェルを持たないのでスイッチ出来ないのは当たり前ですよね。。

そんな時は下記の通りコマンド実行します。

例)apacheユーザにログを持たせてスイッチユーザする場合

# su - apache -s /bin/bash

上記のようにsuコマンドに「-s」オプションでシェルを指定することにより、apacheユーザに一時的にシェルを持たせてapacheユーザとしてスイッチユーザ出来るようになります。
これにより、実際にコンテンツにアクセス出来るか確認することが可能になります。

実行例)

# su - apache -s /bin/bash
-bash-4.1$ id
uid=48(apache) gid=48(apache) 所属グループ=48(apache)
-bash-4.1$ echo $SHELL
/bin/bash
-bash-4.1$

これでコンテンツをcat出来るか見たりすると、コンテンツが見れない際のトラブルシューティングに役立つかと思います。

ithinkit

ユーザに一時的にシェルを持たせる方法を覚えておくと何かと役に立つかもですね~♪

以上、あいしんくいっとでした( ..)φメモメモ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)