こんにちは。並河(@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 が書いた過去記事)
- /etc/hosts で同じホスト名に違うIPアドレスを設定したらどうなるか
- 何気に便利に使えるかもしれない authorized_keys のオプション
- Linuxでinodeが枯渇した場合にどうやって調査するか
- アスタミューゼの開発組織と採用に関するQAアレコレ
- Linuxでディスクキャッシュとして使える「bcache」を試してみた
- Google Compute Engine のディスク(SSD)ベンチマークを取ってみた
- nginx + ngx_mruby でSSL証明書の動的読み込みを実現して、作業がとても楽になった話
- クラウドにあるステージング環境のシステムコスト大幅削減を進めている話
- 企業向けエンジニアブログの作り方