astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

Linuxでユーザアカウントを無効化するエトセトラ

f:id:astamuse:20190326183431p:plain

こんにちは。並河(@namikawa)です。

すっかり春に近づきつつあり、肌寒い日と陽気な日が入り乱れる近頃ですが、ヒノキ花粉のファーストパンチにやられてしまい、著しく生産性が低下しているここ2〜3日です。

さて、例によって今回もLinux運用環境での小ネタを書いておこうかと思いますが、今日はLinuxサーバでアカウントを残しつつ、アクセスは無効化したい時などの話題です。

今更感がある話題でもありますが、改めて備忘録的に書いておきたいと思います。

試した環境とか背景とか

Linuxでもディストリビューションによって、挙動に若干の差異があるかもしれないので、記載しておきますが、今回、"Ubuntu 18.04 LTS" を使って、試してみました。

会社やプロジェクトでサーバを運用していると、どうしてもプロジェクトから抜けたメンバーや退職者などで、ユーザを削除・無効化など棚卸ししたくなるケースが出てくると思います。

そんな場合に、素直にユーザ削除(userdel)できればよいのですが、事情によってはそのアカウントをしばらく残しておきたい等もあるかと思いますので、そんな場合どうしたらよいのか、が今回のお題です。

あと、普段はあまり使わないですが、わかりやすくするために、今回はあえてSSHでのパスワード認証を許可(PasswordAuthentication yes)しています。

アカウントをロックする

一番簡単なのは、アカウントをロックしちゃうことでしょうか。

メンバーがプロジェクトに戻ってきた場合などでも、簡単に戻せます。

実行は以下のように passwd コマンドを使うと簡単です。

( testuser は対象のユーザ名です )

# passwd -l testuser

確認は、以下の通りで、2列目が "L" になっていれば Lock されたことを意味します。

# passwd -S testuser
testuser L 03/22/2019 0 99999 7 -1

他、/etc/shafow のパスワードフィールドの先頭にアスタリスク(!)が2つ付いていると Lock を意味します。

ログインシェルを無効にする

あまりメンバーのアカウントをシステムアカウント的に使うことはないかと思うのですが、やむを得ない事情でプロセスの起動アカウントとして使いたいが、ログインはさせたくない、といったこともあるでしょう。(無いようにはしたいですが...)

そういった場合は、ログインシェルを無効なものに変更することで、ログインできなくすることもできます。

この話をし始めると、よく /bin/false/sbin/nologin のどちらを使うのかという議論になります。

で、細かい違いはあれど、 /etc/shells で定義されたものがログインシェルとして正当なプログラムと扱われるわけで、今回テストしている環境である Ubuntu 18.04 LTS では、 /etc/shells に上記2つはどちらも含まれていませんでした。

ちなみに最近の Ubuntu では /sbin/nologin ではなく /usr/sbin/nologin にプログラムが存在します。

/usr/sbin/nologin

# usermod -s /usr/sbin/nologin testuser

設定はこんな感じで実施。

$ sudo su - testuser
This account is currently not available.

su しようとすると not available と警告が出て、suできない感じです。

$ ssh testuser@servername
testuser@servername's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1028-gcp x86_64)

・・・・・

Last login: Fri Mar 22 12:50:33 2019 from 122.219.65.217
This account is currently not available.
Connection to servername closed.

リモートから ssh で接続しようとしても同様の表示。ただし motd のメッセージが出力されます。 (こちらについての対応は後述。)

/bin/false

# usermod -s /bin/false testuser

先ほど同様、こんな感じで設定できます。

$ su - testuser
Password:

パスワード入力するもログインはできません。

$ ssh testuser@servername
testuser@servername's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1028-gcp x86_64)

・・・・・

Last login: Fri Mar 22 12:49:16 2019 from 122.219.65.217
Connection to servername closed.

リモートから ssh で接続しようとしても motd のメッセージが表示された後に切断されます。

motd のメッセージが表示されないようにする

これについては man 1 login を読むと以下の記載があります。

   $HOME/.hushlogin
      Suppress printing of system messages.

ホームディレクトリ配下に .hushlogin という空ファイルを作っておくと、システムメッセージの抑制ができます。

# sudo -u testuser touch /home/testuser/.hushlogin

というわけで、該当ユーザ配下に touch でファイルを置いて、、、

$ ssh testuser@servername
testuser@servername's password:
Connection to servername closed.

試してみると、表示されなくなりました。ここまではやっておいた方が良さそうです。

さいごに

最後に、毎度で恐縮なPRタイムですが、弊社ではエンジニア・デザイナーを絶賛大募集しておりますので、少しでも気になれば、カジュアルにランチでもしながらお話ししましょうー!

弊社は、最近オフィスの引っ越しを行ったのですが、オフィスビルの隣には有名なカレー屋(ボンディ)さんがありますので、美味しいカレーでも食べながら是非!

少しでもご興味があればお手数ですが (@namikawa) まで気軽にDM等いただければと思います。

それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́

@namikawa が書いた過去記事)

Copyright © astamuse company, ltd. all rights reserved.