[Ubuntu] ユーザの追加・修正・削除をコマンドで実行
Last Update : 2007-12-12 11:16
 NISクライアントにFedora8、NISマスターサーバにUbuntu7.10を使おうとしていたらユーザID(uid)を統一する必要があることが分かった。ついでなのでuidの変更だけでなくユーザの追加・削除の詳細なメモも残すことにした。
 
 ユーザを新規に追加する場合は特に問題はないが、ユーザID(uid)だけを変更する場合などは落とし穴があるので注意。Ubuntuのユーザ管理ツールのusers-admin(システム-システム管理-ユーザとグループ)で操作した時に自動で行われている処理をすべて手打ちで実行する。GUIでやれば簡単だけど、GUIツールはブラックボックスなのでシステムを理解する上では害悪。
 
ユーザ情報に関するファイルは以下の3つ。
/etc/passwd ユーザ情報
/etc/shadow パスワード情報
/etc/group グループ情報
各コマンドはこれらのファイルに変更を加えている。
 
 

■ユーザを追加する

ユーザ名hogeをuid:2000、gid:2000で追加する。権限は管理者ユーザであるitmstと同じにする。赤文字は後で解説を加えてある。
1:hogeのプライマリグループを先に作成
itmst@mv1c3e:~$ sudo groupadd -g 2000 hoge
2:手本にするitmstの所属グループを確認
itmst@mv1c3e:~$ id itmst
uid=1000(itmst) gid=1000(itmst) 所属グループ=1000(itmst),4(adm),20(dialout), 21(fax),24(cdrom),25(floppy),26(tape),29(audio),30(dip),44(video), 46(plugdev),104(scanner),112(netdev),113(lpadmin),115(powerdev), 117(admin),119(fuse)
3:ユーザhogeを追加
itmst@mv1c3e:~$ sudo useradd -u 2000 -g 2000 -c hoge -d /home/hoge -s /bin/bash -G 4,20,21,24,25,26,29,30,44,46,104,112,113,115,117,119 hoge
4:パスワード設定
itmst@mv1c3e:~$ sudo passwd hoge
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
5:追加したhogeの情報を確認する
itmst@mv1c3e:~$ id hoge
uid=2000(hoge) gid=2000(hoge) 所属グループ=2000(hoge),4(adm),20(dialout), 21(fax),24(cdrom),25(floppy),26(tape),29(audio),30(dip),44(video), 46(plugdev),104(scanner),112(netdev),113(lpadmin),115(powerdev), 117(admin),119(fuse)
6:デフォルト設定ファイルをhogeのホームディレクトリとしてコピー
itmst@mv1c3e:~$ sudo cp -r /etc/skel/ /home/hoge
7:ファイル所有者の変更
itmst@mv1c3e:~$ sudo chown -R hoge /home/hoge
itmst@mv1c3e:~$ sudo chgrp -R hoge /home/hoge
8:ファイル所有者の確認
itmst@mv1c3e:~$ ls -al /home/hoge
合計 20
drwxr-xr-x 2 hoge hoge 4096 2007-12-11 14:26 .
drwxr-xr-x 7 root root 4096 2007-12-11 14:26 ..
-rw-r--r-- 1 hoge hoge 220 2007-12-11 14:26 .bash_logout
-rw-r--r-- 1 hoge hoge 2298 2007-12-11 14:26 .bashrc
-rw-r--r-- 1 hoge hoge 603 2007-12-11 14:26 .profile
lrwxrwxrwx 1 hoge hoge 26 2007-12-11 14:26 Examples -> /usr/share/example-content
9:GUIツールを起動して正しく設定できたか確認する
itmst@mv1c3e:~$ sudo users-admin
10:hogeで正しくログインできるか確認する
 
1:hogeのプライマリグループを先に作成
先にhogeのプライマリグループを作成しておく。3でユーザを追加するときに-gオプションで所属グループを指定する際にそのグループが既に存在している必要があるため。
 
2:手本にするitmstの所属グループを確認
所属しているグループ名を確認する。GUIツールでプロフィールの選択を「管理者」にした場合に、これらのグループに自動的に所属することになる。
 
3:ユーザhogeを追加
ユーザhogeを以下のオプションを指定して追加する。
useraddの主要オプション
-u <ユーザID>ユーザIDを指定
-g <グループID>プライマリグループのグループIDを指定
-c <文字列>フルネームもしくはコメント
-d <ディレクトリパス>ホームディレクトリのパスを指定
-s <シェルのパス>ログインシェルを指定
-G <サブグループID,[...]>サブグループgid(名前も可)をカンマ区切りで列挙
2で確認した所属グループを-Gオプションで列挙しているので少し長くなっている。
 
4:パスワード設定
hogeのパスワードを設定する。ユーザを追加しただけではパスワードは空で、このままではログインできない。パスワードの設定にはpasswdコマンドを使用する。
 
5:追加したhogeの情報を確認する
手本にしたitmstと同じようになっていればOK。
 
6:デフォルト設定ファイルをhogeのホームディレクトリとしてコピー
新規ユーザのデフォルトの設定ファイルは/etc/skel以下に格納されている。この/etc/skelをhogeのホームディレクトリ用にディレクトリごと/home/hogeにリネームしてコピーする。/etc/skel内のファイルをあらかじめカスタマイズしておくと便利。
 
7-8:ファイル所有者の変更と確認
/home/hogeのオーナがrootになっているのでhogeに所有権を移す。以下のようにすればchownコマンドだけでグループIDもいっしょに変更することができる。
$ sudo chown -R hoge:hoge /home/hoge
-Rはディレクトリ内のファイルも再帰的に処理するオプション。
 
9:GUIツールを起動して正しく設定できたか確認する
GUIツールを使った時と同じように設定できていることを確認する。実際の各設定ファイルも
itmst@mv1c3e:~$ sudo grep hoge /etc/passwd
hoge:x:2000:2000:hoge:/home/hoge:/bin/bash
itmst@mv1c3e:~$ sudo grep hoge /etc/shadow
hoge:$1$L5BJ$BtOS9ATz7HW3LQuTWGmcy15fB.:13858:0:99999:7:::
などとして確認する。
 
10:hogeで正しくログインできるか確認する
hogeでログインできれば完了。ロケール設定や日本語入力ができるかなども一応確認する。
 
 

■ユーザID(uid)とプライマリグループID(gid)を変更する

ユーザhoge(uid2000,gid2000)のuidを2001に変更する。
既に存在するユーザのプロパティを変更するにはusermodコマンドを使用する。ただこれだけではGNOMEやKDEが起動できなくなるので注意。この点に関しては後述する。
 
usermodコマンドのオプションはuseraddコマンドとほぼ同じ。
usermodの主要オプション
-l <ユーザ名>ユーザ名を指定(パスワードは保持される)
-u <ユーザID>ユーザIDを指定
-g <グループID>プライマリグループのグループIDを指定
-c <文字列>フルネームもしくはコメント
-d <ディレクトリパス>ホームディレクトリのパスを指定
-G <サブグループid,[...]>サブグループgid(名前も可)をカンマ区切りで列挙
今回の変更点から必要になるのは-uと-gオプション。その他の詳細なオプションは以下を参照。
 
Linux ユーザ情報の変更 - usermod
 
uidの変更は何の問題もないが、プライマリグループを同じグループ名で違うgidに変更する場合は以下のような挙動になる為、若干手間がかかる。一時的に避難用gidを作成してそちらに移動しておく必要がある。
プライマリgidの変更
$ sudo useradd -u 2100 test ←gidを指定せず、uid2100で追加
$ id test
uid=2100(test) gid=2100(test) 所属グループ=2100(test) ←gid2100
$ sudo usermod -u 2200 test ←uidを2200に
$ id test
uid=2200(test) gid=2100(test) 所属グループ=2100(test) ←gid変化なし
$ sudo usermod -g 2200 test ←gidの変更を試みる
usermod: グループ 2200 は不明です
$ sudo groupadd -g 2200 test ←同名グループの違うgidでの作成を試みる
groupadd: グループ test は既に存在します
$ sudo groupdel test ←削除を試みる
groupdel: ユーザのプライマリグループは削除できません。
$ sudo groupadd -g 2300 tmpgroup ←避難グループを作成
$ sudo usermod -g tmpgroup test ←避難グループにとりあえず移動
$ id test
uid=2200(test) gid=2300(tmpgroup) 所属グループ=2300(tmpgroup)
$ sudo groupdel test ←gid2100のtestグループを削除
$ sudo groupadd -g 2200 test ←gid2200でtestを再作成
$ sudo usermod -g 2200 test ←gid2200をtestのプライマリグループに
$ id test
uid=2200(test) gid=2200(test) 所属グループ=2200(test)
$ sudo groupdel tmpgroup ←避難グループを削除
 
では実際にさっき作ったhogeのuidとgidを2000→2001に変更する。
$ id hoge
uid=2000(hoge) gid=2000(hoge) 所属グループ=2000(hoge),4(adm),20(dialout),21(fax), 24(cdrom),25(floppy),26(tape),29(audio),30(dip),44(video),46(plugdev), 104(scanner),112(netdev),113(lpadmin),117(admin),119(fuse)
$ sudo usermod -g 2001 hoge
$ sudo groupadd -g 3000 tmpgroup
$ sudo usermod -g 3000 hoge
$ sudo groupdel hoge
$ sudo groupadd -g 2001 hoge
$ sudo groupdel tmpgroup
$ sudo usermod -u 2001 hoge
$ id hoge
uid=2001(hoge) gid=2001(hoge) 所属グループ=2001(hoge),4(adm),20(dialout),21(fax), 24(cdrom),25(floppy),26(tape),29(audio),30(dip),44(video),46(plugdev), 104(scanner),112(netdev),113(lpadmin),117(admin),119(fuse)
ユーザ名を変更した場合などは/home/hogeなどのディレクトリ名変更、オーナ変更も忘れずに行う。  
 
GNOMEやKDEなどが起動できなくなった場合
 これでhogeでログインしようとするとGNOMEやKDEが起動できないという状況に陥る場合がある。マシンごと再起動すれば問題はないが、再起動できない状況も考えられる。この現象は、GNOMEやKDEがログインしたユーザごとに、/tmp内に専用ディレクトリを作成して管理しているため、uidやgidを変更したことでパーミッションエラーを起こしていることが原因。usermodコマンドが修正してくれるのは/etc内の各設定ファイルだけなので、その他のファイルは手動でなんとかしなければならない。
 具体的な作業は、マシンごと再起動するか、該当ユーザ名の入った/tmp以下のファイルやディレクトリを削除すればよい。
[参考]
落穂拾い uidの変更 @ Momonga  
 

■ユーザを削除する

ホームディレクトリごと削除する
$ sudo userdel -r hoge
-rオプションでホームディレクトリも削除できる。ホームディレクトリを残してユーザを削除した場合は、該当ホームディレクトリの所有者が存在しなくなるので所有者名、所有グループ名の変わりにuid、gidがそのまま表示される。
hogeのuid、gidの2001がそのまま表示されている
itmst@mv1c3e:~$ ls -al /home
合計 28
drwxr-xr-x 5 root root 4096 2007-12-12 06:50 .
drwxr-xr-x 21 root root 4096 2007-12-11 06:59 ..
drwxr-xr-x 24 2001 2001 4096 2007-12-12 09:54 hoge
drwxr-xr-x 68 itmst itmst 12288 2007-12-12 10:07 itmst
 
この状態でuid2001、gid2001で新たなユーザを作成した場合、/home/hogeはその新規ユーザのものになる。
同じuidとgidでユーザを新規作成する
$ sudo groupadd -g 2001 foo
$ sudo useradd -u 2001 -g 2001 foo
$ ls -al /home
合計 28
drwxr-xr-x 5 root root 4096 2007-12-12 06:50 .
drwxr-xr-x 21 root root 4096 2007-12-11 06:59 ..
drwxr-xr-x 24 foo foo 4096 2007-12-12 09:54 hoge
drwxr-xr-x 68 itmst itmst 12288 2007-12-12 10:07 itmst
/home/hogeディレクトリの所有者が新規ユーザのfooになっている。
 
 
 
[参考]
Linux 新規ユーザの作成 - useradd
Linux ユーザ情報の変更 - usermod
Linux資格 LPICを受けようLV1第04回:デバイス、ファイルシステム、FHS編
落穂拾い uidの変更 @ Momonga
 
2007-12-12 11:16 | Linux | Comment(0) | Trackback(0)
Comment
コメントを書く
#

管理者にだけ表示
Trackback
Trackbak URL:http://itmst.blog71.fc2.com/tb.php/38-e7d7892b