home(h) links(l) memo profile(r)
memo(m) unix関係(u) ユーザ情報管理

ユーザ情報管理

ユーザ管理

ユーザの追加・編集(useradd、usermod)

useraddコマンドにより新規ユーザを追加、usermodコマンドにより既存ユーザの情報を編集することができる。またuseradd -Dコマンドにより各ユーザ設定の既定値を参照、編集することができる。

【書式1】新規ユーザ作成
useradd オプション ユーザ名
【書式2】既存ユーザ情報編集
usermod オプション ユーザ名

特に断りのないものはuseradd, usermod両者で使用可能なオプション。

-c コメント
パスワードファイルに追加する新規ユーザのコメント。
-d ホームディレクトリ
新規ユーザのログインディレクトリ(~の場所)を指定する。指定がなければ、既定のホームディレクトリ(/home/)に指定したユーザ名を付け加えたものがログインディレクトリとなる。例えばユーザ名にhogeを指定すれば、既定では/home/hoge/がログインディレクトリとなる。なお、/bin/falseを指定するとsshログインはできなくなる。/sbin/nologinも似ているがFTPログインは可能になるとのこと[5] [6]。【usermodのみ】-m オプションも指定すると、現在のホームディレクトリの中身が新しいホームディレクトリに移動される。移動先ディレクトリがない場合は新たに作成される。
-e 有効期限
ユーザアカウントが使用不能になる日付。日付は YYYY-MM-DD という書式で指定する。
-f 永久停止までの日数
パスワードの使用期限が切れてからアカウントが永久に使用不能になるまでの日数。 0 にすると、パスワードの期限が切れると同時にこのアカウントは使用不能になる。 -1 にするとパスワードの期限が切れてもアカウントは永久使用不能にはならない。 既定値は -1。
-g メイングループ
ユーザの属するメイングループ(主グループ)のグループ名または ID を指定する。 グループ名はすでに存在するものでなければならない。 グループ ID は既存のグループに対応するものでなければならない。 既定のグループ ID は /etc/default/useradd に指定があればそれに従い、 なければ 1 となる。
-G サブグループ,...
ユーザの属するサブグループ(補助グループ)のグループ名を列挙する。 グループ名はコンマで区切り、間に空白を入れてはならない。 指定できるグループには -g オプションと同様の制限がある。 【useraddのみ】指定がなければサブグループなし(メイングループのみに所属)。 【usermodのみ】現在そのユーザが、新しいリストにないグループのメンバーになっている場合は、そのグループから削除される。
【usermodのみ】-l 新ログイン名
ユ ーザのログイン名を新ログイン名に変更する。ホームディレクトリ名は自動的には変更されない。
【useraddのみ】-m -k テンプレートディレクトリ
ホームディレクトリが存在しない場合には、ホームディレクトリを作成する。-k オプションを同時に指定すると テンプレートディレクトリ 以下のファイルが、指定しないと /etc/skel 以下のファイルが、ホームディレクトリにコピーされる。ホームディレクトリには、テンプレートディレクトリ または /etc/skel に含まれるすべてのサブディレクトリも作成される。-k オプションは、-m オプションとともに使われる場合のみ有効である。デフォルトでは、ホームディレクトリを作らず、ファイルのコピーもしない。
【useraddのみ】-o
重複した (固有でない) UID でユーザを作成できるようにする。
-p パスワード
ユーザのパスワードをパスワードに設定する。 【useraddのみ】このオプションでパスワードを設定しない場合、そのままではそのアカウントは使えない。アカウントを有効化するには、ユーザ作成後passwdコマンドにてパスワードを設定する必要がある。
-s シェル
ユーザのログインシェルの名前。指定がない場合、システムが既定のログインシェルを選ぶ。/sbin/nologinを指定すれば、sshでのログインはできなくなる(sftp専用ユーザなど特定用途用ユーザ作成時に使用)。/bin/false も似ているが、FTPやログイン拒否のメッセージ表示もできなくなる[5]
-u UID
ユーザid(uid)を指定した値に設定する。-oオプションを指定する場合を除き、他のユーザと重複する値は指定できない。指定がない場合の既定値は999および他のあらゆる既存ユーザの ID よりも大きい、最小の非負整数。通常、0から999までの値はシステムアカウント用に予約されている。 【usermodのみ】ホームディレクトリ以下の、そのユーザ所有のすべてのファイルのユーザ ID は、自動的に新しい値に変更される。ホームディレクトリ以下にないファイルは手作業で変更しなければならない。
【usermodのみ】-L
ユーザのパスワードをロックする。これは暗号化されたパスワードの前に ’!’ を 追加し、実質的にパスワードを無効にする。このオプションを -p や -U と同時に用いることはできない。
【usermodのみ】-U
ユーザのパスワードロックを解除する。これは暗号化されたパスワードの先頭から ’!’ を取り除く処理を行い、パスワードを有効化する。このオプションを -p や -L と同時に用いることはできない。
【書式3】既定値表示、変更
useradd -D -g メイングループ
-b ユーザホームディレクトリ
-e 有効期限
-f 永久停止までの日数
-s シェル

既存ユーザの削除(userdel)

ユーザ削除のためのコマンドuserdelの書式は以下の通り。 このコマンドを実行するとシステムアカウントファイルを修正し、 指定したユーザ名に対応するすべてのエントリを削除する。 削除されるユーザは存在していなければならない。 また削除しようとするユーザがログインしている場合や、ユーザのプロセスが動作している場合は削除できない。プロセスはkillコマンドを使うなどして終了しなければならない。

【書式】
userdel -r ユーザ名
-r
ユーザのホームディレクトリ中のファイルを削除する。 ホームディレクトリ自体とユーザのメールスプールも消去する。 ファイルシステム中のほかの場所にあるそのユーザのファイルは、 手作業で探し出して削除しなければならない。

ユーザのパスワードを変更する(passwd)

【書式】
passwd ユーザ名

ログイン中ユーザのパスワードを変更する。正しい旧パスワード、そして新パスワードとして同じ値を2回入力するとパスワードが変更できる。ユーザ名を指定しない場合は現在ログイン中のユーザ自身のパスワードを変更する。ユーザ名を指定すれば他のユーザのパスワードも変更可能だが、この操作には管理者権限が必要。また管理者権限で操作する際、旧パスワードは要求されない。

NIS(Network Infomation Server)を用いてユーザを一括管理している場合はyppasswdを用いる。

mkpasswdを使うと、ランダムなパスワードを設定することができる。

-l オプションでアカウントをロックできる。

【書式】
passwd -l ユーザ名

ランダムなパスワードを生成する(mkpasswd)

mkpasswdコマンドは、ランダムなパスワード文字列の生成や、そのパスワードの設定を行う。このコマンドはexpectというパッケージで提供される。インストールされていない場合はyumコマンドなどでインストールする。

【書式】
mkpasswd オプション ユーザ名
ユーザ名
指定したユーザにランダムなパスワードを設定する。指定がない場合は生成したランダムなパスワードを標準出力に出力する。

オプション

-l
パスワードの文字数を指定する。指定がない場合の既定値は9(文字)。
-d
パスワードに含む数字の最小文字数を指定する。指定がない場合の既定値は2(文字)。
-c
パスワードに含む小文字の最小文字数を指定する。指定がない場合の既定値は2(文字)。
-C
パスワードに含む大文字の最小文字数を指定する。指定がない場合の既定値は2(文字)。
-s
パスワードに含む特殊文字(記号類)の最小文字数を指定する。指定がない場合の既定値は1(文字)。
-p
パスワード設定に利用するプログラムを指定する。指定がない場合、/etc/yppasswdがある場合はこれが、なければ/bin/passwdが用いられる。
-2
QWERTYタイプのキーボード配列で左右交互に文字が来るようにパスワード文字列を生成する。これによりパスワード入力しているところを他の人に見て読み取るのが難しくなる反面、パスワード推測プログラムにとってはパスワードを当てやすくなってしまう。
-v
パスワード設定のやりとりを表示する。既定ではこの設定はOFFになっている。
【例】ランダムな文字列を出力
$ mkpasswd
Je94uMwa#

ログインシェルの変更(chsh)

chshコマンドはユーザのログインシェルを変更する。これによって、ユーザがログインして最初に実行されるコマンドが決まる。

-s オプションを指定しなかった場合は、 chsh は対話的に動作する。ユーザの現在のログインシェルを表示し、新しい値の入力を促す。設定値を変更するなら新しい値を入力し、現在の値を使うなら空行のままリターンキーを押せばよい。現在のシェルは [ ] 記号の間に表示される[7]。各ユーザの現在のログインシェル設定値は/etc/passwdファイルに記載されている。

NISを設定している場合、NISクライアントではchshの代わりにypchsh(→NISユーザ情報閲覧・編集コマンド参照)を使う。これが使えない場合はNISサーバでchshを用いてログインシェルを変更し、NISクライアントへ情報反映する(/var/yp/make)。

【書式】
chsh -s ログインシェル ユーザ名

【例】
[user@server ~]$ chsh
user のシェルを変更します。
新しいシェル [/bin/bash]: 

NISを用いていてrootが一般ユーザのシェルを変更しようとした場合
[root@server ~]$ chsh user
chsh: ローカルの項目しか変更できません -- かわりに ypchsh を使いましょう
-s ログインシェル

変更後のログインシェル名を指定する。一般ユーザは自身のログインシェルのみ変更可能で、選べるコマンドは/etc/shellsに記載があるもののみ。スーパーユーザーならユーザ名を指定して任意ユーザのログインシェルを変更できる。また指定値も/etc/shellsに記載があるかどうかに関わらず任意。 機能を制限されたログインシェルを用いているアカウントからは、ログインシェルを変更できないかもしれない。この理由から、/bin/rsh は /etc/shells には書かないほうが良い。誤って機能が制限されたシェルに変更してしまうと、ログインシェルを元のものに戻せなくなってしまうからである。

ユーザ名
指定がない場合の既定値は現在のユーザ。但し、ユーザ名が指定できるのはスーパーユーザのみ。一般ユーザは自分の設定しか変更できない。

ユーザの氏名や情報の変更(chfn)

chshコマンドはユーザのフルネーム・オフィスの部屋番号・内線番号・自宅の電話番号といったアカウント情報を変更する。この情報は finger(1) のようなプログラムによって表示される。一般ユーザは自分自身のアカウント情報のみを変更できる。スーパーユーザは全てのアカウントに対して情報を変更できる。また -o オプションを用いて GECOS 欄の未定義部分を変更できるのもスーパーユーザだけである。

各フィールドに書く内容に関する制限は、コントロール文字・コンマ・コロン・等号を含んでいてはならない、ということのみである。 other 欄に対してはこの制限はないので、他のアプリケーションが用いるアカウンティング情報の記録に利用される。

いずれのオプションも指定されないと chfn は対話的に動作する。全ての欄に対して各々現在の設定値を表示し、新しい値の入力を促す。新しい値を設定する場合はそれを入力し、 現在の値を使うなら空行のままリターンキーを押せばよい。現在の値は [ ] 記号の間に表示される。オプションを指定しなかった場合、 chfn は現在のユーザアカウントに対して動作する[8]

ユーザ情報は/etc/passwd中に記載される?(RHEL5.8では反映されず空のままだった)。

NISを使用している場合、chshの代わりにypchfn(→NISユーザ情報閲覧・編集コマンド参照)を使用する。

【書式】
chfn オプション ユーザ名

【例】
[user@server ~]$ chfn
-f フルネーム
-r 部屋番号
-w 職場の電話番号
-h 自宅の電話番号
-o その他

ユーザ情報ファイルについて

現在登録中のユーザは/etc/passwdファイルに記載されている。このファイルの編集は/usr/sbin/vipwコマンドで行う。

ユーザの有効期限などは/etc/shadowファイルに記載されている。このファイルの編集は/usr/sbin/vipw -sコマンドで行う。一般的な記載項目は以下の通り。

【書式】
ユーザ名:符号化されたパスワード:最終更新日:パスワード変更の最小間隔:パスワード有効日数:
変更メッセージ表示日数:アカウント無効化までの日数:アカウント有効期限:無効化されているかどうか?

【例】
user:$1$cHw$vNafahRJuXbfxNyVr6t.VA./U50:14797:0:99999:7::14798:
最終更新日
1970/1/1からの積算日数で表示。
パスワード変更の最小間隔
0なら制限なし。
パスワード有効日数
99999なら事実上無期限。
変更メッセージ表示日数
パスワードを変更してから、次のパスワード変更を促すメッセージを表示するまでの日数?
アカウント無効化までの日数
値なしなら、無効化しない。
アカウント有効期限
アカウントを無効化する日を1970/1/1からの積算日数で表示。
無効化されているかどうか?
通常は値無し。無効化されると何か値が書き込まれる?

パスワード・アカウントの有効期限管理(chage)

chageはパスワードを最後に更新してから、次に変更しなければならない期日までの日数を変更する。chage コマンドを使えるのは root ユーザのみに限られている。ただし一般ユーザも -l オプションを指定すればこのコマンドを利用でき、自分のパスワードまたはアカウントがいつ切れるかを知ることができる。

【書式】設定変更
chage [-m mindays] [-M maxdays] [-d lastday] [-I inactive] [-E expiredate] [-W warndays] user  
【書式】情報確認
chage -l user  
-m mindays
パスワード変更の間隔の最短日数を指定する。0を指定すればユーザはいつでもパスワードを変更できる。
-M maxdays
パスワードが有効な最長日数を指定する。max-days と lastday を足した値が現在の日付より小さい場合、ユーザはアカウントを使用する前にパスワードを変更しなければならない。-W オプションを使えばこの期日がいつ来るかが分かるようにできる。この場合はユーザに事前に警告が与えられる。
-d lastday
パスワードの最終更新日を設定する。lastdayの値は1970年1月1日からの日数、またはYYYY-MM-DDなどの日付形式で指定する。
-E expireday
それ以降ユーザがアカウントにアクセスできなくなる日付を設定する。expiredayの値は1970年1月1日からの日数、またはYYYY-MM-DDなどの日付形式で指定する。ロックされたアカウントを再び有効化するにはシステム管理者の操作が必要となる。
-I inactive
パスワードの期限が切れてからアカウントがロックされるまでの日数を設定する。0を設定すればこの機能は無効となる。
-W warndays
パスワードの変更が必要となる前に警告を行う期間の日数を設定する。warndays には、パスワードの期限切れに先だって、ユーザに期限が切れかかっていることを警告する日数を指定する。
-l
パスワードやアカウントの期限に関する情報を出力する。
【例】
$ chage -l user
最終パスワード変更日				: 3月 23, 2018
パスワード期限:					: なし
パスワード無効化中					: なし
アカウント期限切れ						:  3月 31, 2022
パスワードが変更できるまでの最短日数		: 0
パスワードを変更しなくてよい最長日数		: 99999
パスワード期限が切れる前に警告される日数		: 7

グループ管理

コマンド 内容 書式と例
groupadd グループ作成
【書式】
groupadd オプション グループ名
-g gid -o
新規作成するグループのgidをgidで指定した値に設定する。-oオプションを合わせて指定した場合を除き、既存のものと重複した値は指定できない。指定可能なgidは0以上の整数。指定がない場合の既定値は、他のあらゆる既存グループのgidより大きく、かつ500より上の数値で最小のもの。通常0から499はシステムアカウント用に予約されている。
【例】newgroupグループを作成
shell> groupadd newgroup
※パスが通っていない場合、フルパスで /usr/sbin/groupadd とコマンド指定を行う。
groupmod グループ情報編集 【書式】 groupmod グループ名 【例】newgroupグループを編集 shell> groupmod newgroup ※パスが通っていない場合、フルパスで /usr/sbin/groupmod とコマンド指定を行う。
groupdel グループ削除 【書式】 groupdel グループ名 【例】newgroupグループを削除 shell> groupdel newgroup
groups ユーザの所属グループ取得 【書式】 groups ユーザ名 【例】ユーザ「root」が所属するグループ一覧 shell> groups root root : root bin daemon sys adm disk wheel ※グループ情報は /etc/group ファイルに記載されている。
gpasswd 所属ユーザの編集 【書式】ユーザ追加 gpasswd -a ユーザ名 グループ名 【例】rootグループにユーザwashiを追加 shell> gpasswd -a washi root 【書式】ユーザ削除 gpasswd -d ユーザ名 グループ名 【例】rootグループからユーザwashiを削除 shell> gpasswd -d washi root

なお、複数のグループに所属するユーザがコマンドを実行する場合、特別な変更を行わない限りプライマリグループのメンバーとしてコマンドを実行することになる。 プライマリグループ以外の権限を必要とする処理を実行する場合、パーミッションの設定によりアクセスできない可能性がある。その場合、newgrpコマンドで一時的に所属グループを変更する必要がある。このコマンドは現在ログイン中ユーザのプライマリグループを一時的に変更する。恒久的に変更するにはusermod -g グループ名 ユーザ名コマンドを用いる。

【書式】
newgrp グループ名
  

ログイン中ユーザの活動内容を表示(w)

w コマンドはどのユーザがログインしていて、その各ユーザが何をしているのかを表示する。また現在時刻、システム稼働時間、ログインしているユーザの数、ロードアベレージ(直近1、5、15分の平均)も表示される。

【書式】
w オプション ユーザ名1 ユーザ名2...
  
-d
-h
-i
-n
-M core
-N system
【例】
$ w
11:15  up  2:20, 2 users, load averages: 2.19 2.22 2.23
↑         ↑    ↑                      ↑   ↑   ↑
(1)        (2)   (3)                     (4)  (5)  (6)

(1)現在時刻 (2)稼働時間 (3)ログインユーザ数 
(4)過去1分のload average (5)過去5分のload average (6)過去15分のload average
USER TTY      FROM              LOGIN@  IDLE WHAT
user console  -                 8:56    2:19 -
user p1       -                 8:56       - w
↑   ↑       ↑                 ↑     ↑   ↑
(1)  (2)      (3)                (4)    (5)  (6)

(1)ユーザ名 (2)端末 (3)ログイン元 (4)ログイン時刻 (5)? (6)実行しているコマンド
  

なお、接続が強制切断されログイン状態が残ってしまった場合の対処方法は強制ログアウト - リモートマシンへのセキュアな接続(ssh)を参照のこと。

一時的に別ユーザになる(su)

suコマンドで、一時的に別のユーザになって操作を行うことができる。管理者権限の必要な操作を行う際などに用いる。

su ユーザ名 オプション
  
ユーザ名
なろうとしているユーザのユーザ名。省略した場合の既定値はスーパーユーザ(root)。
-, -l, --login
現在ログインしているユーザの環境変数等の指定を解除し、指定ユーザのログインの設定を反映したログインシェルにする。このオプションを付けずに root になっても、/usr/sbin/sbin配下にあるコマンドはパスが通っていないのでフルパスで指定する必要が生じる(CentOS、RHELのifconfigchkconfigなど)。

ユーザ名を指定しない(rootになる)場合は現在ログインしているユーザのパスワード、その他のユーザになる場合はなろうとしているユーザのパスワードが要求される。

uid/gidの最大・最小値を変更する

/etc/login.defsで規定されているとのこと[21]

#
# Min/max values for automatic uid selection in useradd
# useraddで自動的に選択されるuidの最大値・最小値
#
UID_MIN                   500 # uidの最小値
UID_MAX                 60000 # uidの最大値

#
# Min/max values for automatic gid selection in groupadd
# groupaddで自動的に選択されるuidの最大値・最小値
#
GID_MIN                   500 # gidの最小値
GID_MAX                 60000 # gidの最大値

ユーザ情報を他のサーバに移行する

RHEL/CentOSでユーザ情報をまるごと他のサーバに移すには、以下のファイル群を新サーバにコピーする[22]

ユーザ・グループ単位で移動するには該当ユーザ・グループ行のみを新サーバの該当ファイルに追記。

ユーザ単位でsshアクセスを制限する

[23][24][25]

/etc/pam.d/sshdの編集
下記記述がなければ追記する。
account required pam_access.so
/etc/ssh/sshd_configの編集
「UsePAM」という項目に「yes」が設定されていることを確認する。項目がない場合は項目を作成する。「no」が設定されている場合は「yes」に変更する。
UsePAM yes
/etc/security/access.confの編集

コロン(:)で区切られた3つの項目を記述する。

【書式】
許可禁止 : 対象 : 接続元
許可禁止
+」を記せば許可、「-」を記せば禁止。
対象
1つ以上のユーザ名を空白区切りで記載する。「ALL」を指定すると全てのユーザが対象になる。値を括弧で囲むとグループ名での指定となる。
接続元
完全なIPアドレスを記す場合、末尾にピリオド(.)を記す。IPアドレスの前方一部を記すと前方一致で判定される。IPアドレス/ネットマスク の形式で指定することもできる。ホスト名、ドメイン名での指定も可能。LOCALはlocalhost、ALLは全てを意味する。「EXCEPT」を続けて記し、例外(除外対象)を指定することもできる。

rootでのログインを禁止する

/etc/ssh/sshd_configでPermitRootLoginの値をnoに設定する[26]

PermitRootLogin no

ユーザホームディレクトリ配下のフォルダ名言語設定

表示言語が日本語の設定でユーザを作成すると、ユーザホームディレクトリ配下に「デスクトップ」「ドキュメント」「ダウンロード」など日本語でフォルダが作成される。GUI(Nautilus)で操作する場合はいいが、端末で操作する場合はフォルダ名が英数字であった方が操作しやすい(日本語入力のON/OFFを切り替える必要がないので)。一旦作成された日本語フォルダ名を「Desktop」「Documents」「Download」など英数字に変更するには以下のコマンドを実行し、表示されたウインドウ右下「Update names」ボタンをクリックすればいい[27]

$LANG=C xdg-user-dirs-gtk-update
ホームディレクトリ配下のサブディレクトリ名言語設定変更

ただこのままだと、日本語に戻そうとするダイアログが出るので、[システム]メニュー [設定]-[ユーザ向け]-[セッション]を選択して、[セッション]ダイアログボックスで[User folders update]の「有効」列チェックボックスオフにしておけばいい[27]