とーますメモ

Ruby on Rails / Goなどの学習メモ

【Ubuntu】ユーザ管理の方法について、ちゃんと調べてみた

Linux上でユーザやグループを追加したり、権限を付与する方法については知っているが、プロダクション環境などのシビアな環境でのユーザ管理法についても学んで起きたいと思ったのでここに調べた内容を書き起こす。

ユーザ追加

ユーザ追加するコマンドは以下の2つが存在する。

1)useradd
2)adduser

上記のコマンドはLinuxのディストリビューション毎に違いある。
CentOSだとadduserはuseraddのシンボリックリンクだが、Ubuntuだとuseraddはバイナリファイルであり、adduserは裏でuseraddを利用するPerlスクリプトである。
またadduserは対話式でユーザを作成し、ホームディレクトリを自動作成し、パスワードも同時に設定可能だが、
useraddは-mオプションを付けない限り、ホームディレクトリを作成しないし、パスワードを設定するには別途でpasswdコマンドを使い必要がある。

なのでUbuntu上でユーザ作成する際は、必ず「adduser」を使うことにする。

[参考]
What is the difference between adduser and useradd? - Ask Ubuntu
adduserとuseraddの違い - DUNNO-CLEARブログ3.0

ユーザは複数のグループに所属できるが、まずは1つのグループに所属する必要があり、その必須なグループをプライマリグループと呼び、
それ以外のグループをセカンダリグループ(追加グループとか補助グループとも呼ばれる)と呼ぶ。

[参考]
[Linux] ユーザ管理と設定ファイル - Qiita

ユーザ削除

ユーザ追加と同じようにuserdelとdeluserがあるが、実行してみた感じだとdeluserを使用した場合、ログが表示されるが、userdelの場合は実行しても何も表示されない。
またUbuntuを使用する場合はdeluserを使うべきだと公式に書いてある。

userdel is a low level utility for removing users. On Debian, administrators should usually use deluser(8) instead.

Ubuntu Manpage: userdel - delete a user account and related files

なのでadduserと同じように、Ubuntu上でユーザ作成する際は、必ず「deluser」を使うことにする。

$ sudo deluser --remove-home username

--remove-homeオプションを付けると、ユーザのホームディレクトリも削除される

sudo権限の付与

sudo権限を付与するには、以下の3つのやり方がある

1)デフォルトでsudo権限がついているグループにユーザを追加(Ubuntuならsudoグループ、CentOSならwheel)
2)/etc/sudoersファイルにsudo権限を付けたいユーザまたはグループを設定
3)/etc/sudoers.d/内にファイルを作り、このファイル内にsudo権限を付けたいユーザまたはグループを設定

一般的には1)が一番簡単。

$ gpasswd -a user_name sudo

1)を行うのにusermodを行う方法もある。gpasswdとusermodの違いは、gpasswdがグループ管理のみ目的としたコマンドに対して
usermodは他にもいろんな機能を提供していることっぽい。
Adding user to a group (usermod or gpasswd)

usermodを使う場合はオプションに「-aG」を付ける必要があるが、gpasswdは単純に「-a」だけなのでわかりやすいため、gpasswdを使うほうが良いだろう。

2)のやり方を選ぶ場合は、基本的にはvisudoコマンドを使用してファイルを編集する。
別にviでも良いが、visudoを使用した場合、保存時に文法に不備があるとエラー箇所を教えてくれるからだ。
visudoでコマンドを打って、設定を書き込んだら「ctrl + X」で終了すれば良い。※保存などのコマンドはない。
どうしてもviが良い場合は、編集終了時に「visudo -c」で書式チェックをしておくと良いだろう。

設定は以下の感じで設定する。書式は「ユーザ名 ホスト=(誰々として) コマンドパス」。ユーザ名の頭に%をつければグループ名として指定できる。
また通常、sudoコマンド実行時にはパスワード入力を求められるが、パスワード入力を要求しないようにするNOPASSWDを設定することもできる。

# rootユーザに対して全てのコマンド実行を許可
root ALL=(ALL) ALL

# adminグループに対して全てのコマンド実行を許可
%admin ALL=(ALL) ALL

# adminグループに対して全てのコマンド実行を許可し、パスワードを要求しない
%admin ALL=(ALL) NOPASSWD:ALL

[参考]
一般ユーザでもroot権限が必要なコマンドを実行できるようにする方法 - Qiita


3)のやり方は/etc/sudoersをいじらなくてもsudo実行ができるようになるため、細かくコマンド毎に許可設定を行いたい場合などに
メンテナンス性が向上するのでよい。ファイル名は何でもよく、ファイル内の書式は2)と同じ。
編集終了時に「visudo -c」で書式チェックをしておくと良いだろう。

[参考]
sudoを/etc/sudoers.d/fileで許可する - Qiita
sudoの権限を設定するvisudoコマンド【Linuxコマンド集】


上記の3つのやり方を見てみた中で、しっかりユーザ管理したい場合は、3)の方法がよいと思う。
NOPASSWDの設定は1)の方法では使えないし、多数のユーザを管理する必要が出てきた場合に、
毎回/etc/sudoersの設定をいじるのは、メンテナンス性が良くない。
3)のやり方ならばユーザ毎にファイルを作れば管理も楽だし、ユーザを削除する場合も単純にファイルを消すだけで良い。

なので自分は3)のやり方を使用する。

ユーザ一覧の確認

$ cat /etc/passwd
もしくは
$ getent passwd

グループおよびグループの所属ユーザの確認

$ cat /etc/group
もしくは
$ getent group

ユーザが所属するグループの確認 (※usernameは任意の名前)

$ groups username

[参考]
Ubuntuユーザ追加とsudo権限付与。ユーザ/グループ操作まとめ | WWWクリエイターズ