豆腐食べたい

プログラミングとかその他もろもろとかの技術の摂取録。あと豆腐食べたい。

Ubuntuでログイン不可のユーザーを作る/システムユーザーを作る

Apachemysqlなんかをインストールしたときにできる、セキュリティのために一つのアプリケーションが占有して使うようになるあのアカウントを手動で作ってみようとしてみた。このようなアカウントはシステムユーザーと呼ばれることが多いらしく、以下のようにして作成する

 

#adduser --system username

 

これで本来の目的は達せられる

が。

この方法のことを知らなかった当初はまず一般ユーザーを作成してから、それをログイン不可にする方向で考えていた。というか、一般ユーザーとシステムユーザーの間に、特別な区別があると思ってなかった。(無知)[1]

まぁつまり

 

#useradd[2] -M -s /bin/false username

 

を実行したわけである。(※ちなみにdebian系ではuseraddとadduserという別の2つのコマンドがある。違いなんかはmanなりgoogleなりで確認してくださいませ)

で、実はこれでもCUIシェル上では期待通りの動作をする。だがubuntuを起動したときにでるGUIログイン画面のユーザー一覧では、このとき作成したユーザーがきちんとリストアップされてしまう。(もちろんログインはできない) しかしもし、この画面にユーザーが出てこないように設定を変更することができるなら、一般ユーザーを作る方法でも同じ目的が達成できるだろう。むしろログイン不可のユーザーを一般ユーザーとして作りたいという場面が出てきたらこうするしかないんじゃないか。

ubuntu11.04以降のunityが乗っている環境では

/etc/lightdm/users.conf

を編集して

hidden-users=nobody nobody4 noaccess

となっている行(デフォルトではこうなってた)に、目的のユーザー名を追加すればいい。

が。(2回目)

どうやらubuntu11.10(筆者の環境)と12.04の一部の環境には、この設定をうまく反映できないバグがあるらしく、(https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/857651) 2012年8月13日現在、この設定をいじってもやはりログイン画面にはログイン不可のユーザーの名前が表示されてしまう。あらら

ということでこのようなユーザーを作りたければ、とりあえず今現在はシステムユーザーとして作成しましょうというとこでしょうかね。

 


[1] -Mオプション:ubuntuの日本語manには載っていないが、ホームディレクトリを使わないようにするオプション。間違った構文のuseraddを叩けば出てくるオプション一覧にはきちんと載っている。(例えば$useradd -hogeとかしてみたら出てくる)

-sオプション:ログインしたときに起動するシェルを指定する。ここに/bin/falseまたは/bin/nologinを指定することでログインできないユーザーを作れる

[2] debian系のディストリビューションではuidが100〜1000のユーザーをシステムユーザーとして扱うらしい