Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

UNIX(Linux)
Beginner

  1. What is UNIX (Linux)? - Japanese Only
  2. What are Distributions? - Japanese Only
  3. About CentOS, macOS, and CUI - Japanese Only
  4. Installing CentOS with Virtualization Software and macOS CUI Environment - Japanese Only
  5. Login, root User, and Shutdown - Japanese Only
  6. Command Structure and Important Notes - Japanese Only
  7. File System and Navigating Directories (cd and pwd) - Japanese Only
  8. Key Directories and Listing Contents (ls) - Japanese Only
  9. Advanced Directory Navigation (cd) and Paths - Japanese Only
  10. Advanced ls Command (Part 1) and Dotfiles - Japanese Only
  11. Advanced ls Command (Part 2) - Japanese Only
  12. Tab Completion for Input - Japanese Only
  13. Creating Directories (mkdir) - Japanese Only
  14. Quick File Creation (touch) and About Files - Japanese Only
  15. Standard I/O, Redirection (> and >>), echo, and cat - Japanese Only
  1. Deleting Files and Directories (rm) - Japanese Only
  2. Copying Files and Directories (cp) - Japanese Only
  3. Moving and Renaming Files and Directories (mv) - Japanese Only
  4. What is the vi Editor? - Japanese Only
  5. Basic vi Usage (Part 1) - Japanese Only
  6. Basic vi Usage (Part 2) - Japanese Only
  7. Remote Operations via Terminal (SSH and Tera Term) - Japanese Only
  8. Installing Software (yum and Package Managers) - Japanese Only
  9. User Overview, Verification, Creation, and Switching (adduser and su) - Japanese Only
  10. User Passwords, Deletion, Modification, and sudo (passwd, userdel, usermod) - Japanese Only
  11. About Groups and the groups Command - Japanese Only
  12. Adding, Deleting, and Modifying Groups (groupadd, groupdel, groupmod) - Japanese Only
  13. About Permissions - Japanese Only
  14. Setting Permissions (chmod and chown) - Japanese Only
  1. Home
  2. UNIX(Linux)Beginner - User Overview, Verification, Creation, and Switching (adduser and su)

User Overview, Verification, Creation, and Switching (adduser and su) - Japanese Only

みなさまどうも。

さてこれまでの記事でリモート操作やviの操作とかもOKな頃合いだと思いますのでそろそろUNIX系OSにおける『ユーザー』についてがっつりやっていきましょう。

これまでちょいちょいとユーザーについて紹介してきたわけでございますのでもう解説はいらないかもですが再度おさらいをしておきますと絶対権力というか絶対権限を持っていて一番偉いユーザーさんが『root』さんになり、その他のユーザーさんが一般ユーザーになる感じでしたね。

そしてUNIX系OSでは複数の人が同時に使うマルチユーザーシステムを基本としていますのでここでちょいと問題になるのが同時に沢山の人がログインして同時に使う可能性がある、つまり「管理者権限を持ったユーザーさんが沢山居るとセキュリティ的にまずい!」って感じになっちゃいます。

これは具体的にどういう状況かというと例えば皆様がちょうど閲覧している当サイトのサーバーについて考えてみましょう。

当サイトのサーバーは当サイトを閲覧しているイケメンかつ美少女な皆様にスーパーナイスでビューティフォーなサービスをお届けするために常にサーバーの電源が入っている状態にする必要があり、さらに当サイトを表示するために使ってる言語のエンジンやソフトウェア、ApacheやPHPやMySQL等は常に動いている状態にしなければいけません。

ここでちょいと思い出して頂きたいのですがCentOSのシャットダウンって管理者権限を持つ『root』さんじゃないと出来なかったですよね。多分「電源を切るだけなのになんで管理者権限が必要なんだろー?(*'▽'*)」って思った方もいらっしゃるかと思いますが上記の事をふまえると「電源を切るという事は管理者権限を持ったユーザーさんに限定しないときけん!」って感じがしてもらえるかなって思います。

弊社は小さい会社なのでこのウェブサイトが多少落ちようとまだ良いかもですが大手企業で「サービスが1時間止まった」なんて事になったら始末書もんの大惨事でございます。銀行とかテレビ局とかでそれをやるととんでもないことになるので想像するだけで「(:_;)」となってしまいますよね。

そんな理由から電源操作と同じようにウェブサイトを表示するためのソフトウェアであるApacheやデータを管理しているMySQLなどなどそういう重要なソフトウェアはちゃんと管理者権限が無いと操作できないようになっていますのでやはりUNIX系OSというかマルチユーザーシステムなデバイスではユーザーを意識することはとっても重要になるのでございます。

というわけで前置きが長くなりましたがユーザーを追加したり削除したりパスワードを変更したりってことをやっていきましょう。

まずユーザーをこにょこにょするには『root』ユーザーまたは管理者権限を持ったユーザーじゃないと出来ませんので『root』ユーザーさんでログインするようにして下さい。

ログイン出来たら「今現在、このOSにはどのようなユーザーが居るのか」という事を確認してみましょう。現在の全ユーザーを確認するには以下のコマンドを叩けばOKでございます。

[root@localhost ~]# cat /etc/passwd

ここで「あれ?catコマンドを使うの?」って思った方、素晴らしい着眼点でございます。そうなんです、実は「ユーザー一覧を出力するコマンドが用意されている」とかじゃなく「『/etc/pesswd』っていうテキストファイルに全ユーザーの情報が書いてあるのでそれをcatコマンドとかを使って確認するだけ」って感じなのでございます。なんだかすごく力技でございますね。

そしてCentOSの初期状態だと以下のような感じになっているはずです。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

これの見方なんですがユーザーごとに1行ずつ記述されているような感じで、さらに『:』で区切られていますよね。この一番左側の部分がユーザー名に該当する感じでユーザーをざざざっと確認するだけならば一番左側の部分だけ見ればOKです。

あと上記の情報で使うとすると『/root』って部分でそのユーザーのホームディレクトリが書いてあったり、一番右側の『/bin/bash』って部分がそのユーザーがデフォルトで使用しているシェルが書いてあったりユーザーID(UID)とかグループID(GID)とかが書かれていたりって感じですね。恐らく通常ではあまり使うことの無い情報でたまに使うかなー程度な感じになりますので必要になったら調べるくらいのノリでOKかなって思います。

そしたら早速ユーザーを新規作成してみましょう。新規で作成するユーザー名は『test』くんとしますね。

ユーザーを追加するには『adduser』ってコマンドを使います。んで第一引数に作成したいユーザー名を記述すればOKなので以下のコマンドを叩けば『test』くんが出来上がります。

[root@localhost ~]# adduser test

ちゃんと作成されたか『cat /etc/passwd』を実行して確認してみると

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test:x:500:500::/home/test:/bin/bash

最後の行に『test』くんがちゃんと追加されていますね。ユーザーの追加方法はこれでOKです。

ちょーーーーっというかかなりややこしいのですが今回紹介した『adduser』とは別に『useradd』コマンドが居たりします。

これ基本的にほぼ同じ動作になっているのですがOSによっては稀にユーザーを作ったときの動作に若干違いがあったりしますので基本的に『adduser』を使うのがベターです。

しかもややこしいのがユーザーを削除するコマンドが『userdel』で「user」が単語の頭に来てる形になるのでユーザーを追加する方は「『useradd』だな!(*'▽'*)」って思い込みがちなんですよね。

著者もよくどっちか分からなくなってゲシュタルト崩壊してますので皆様も超お気を付け下さい。今この記事を書いてる最中も「あれ?『adduser』が正だよな?」ってゲシュタルトが崩壊しつつあるのは内緒です。

今はネットに転がっている情報量が昔と比べて桁違いなので「ユーザーを追加するまえに検索!」って覚えておくと良いかもです。

※『userdel』については次の記事で解説します。

では次にユーザーの切り替えをやっていきましょう。ユーザーを切り替えるには『su』を使います。んで第一引数に切り替えたいユーザー名を記述する形になりますので以下のようにすると

[root@localhost ~]# su test
[test@localhost root]$

『test』くんになれちゃいます。バッチリでございますね。

さてここでちょっと注意点でございます。「今ユーザーを切り替えて『test』さんになったんだからまた『root』さんに戻るには『su root』ってやれば良いんだな!(*'▽'*)」って思いがちなのですが実はそうではありません。『su』コマンドは一時的なユーザー切り替えになりますので一番最初にログインしたユーザーが別のユーザーになりすましているような形になります

どういうことかと言うと上記の状態だとまず『root』さんでログインしてそれから『su test』と打って『test』くんになりましたよね。んでそこから更に『su root』と打ってみます。

[test@localhost root]$ su root
Password:
[root@localhost ~]#

これでまた『root』さんになっています。

そして『exit』と打つと現在のユーザーからログアウトする事ができるのですが上記の状態で『exit』と打つとこうなります。

[test@localhost root]$ su root
Password:
[root@localhost ~]# exit
exit
[test@localhost root]$

プロンプト部分の「test@localhost」って部分に注目ですね。なんとまた『test』くんになってしまいました。

そこからさらに『exit』と打つと

[test@localhost root]$ exit
exit
[root@localhost ~]#

今度は『root』さんになってますね。

この状態で『exit』を打つと

[root@localhost ~]# exit
logout
Connection to 192.168.56.1 closed.

これでやっとコンピューターからログアウト出来ました。

今の動作の流れを解説すると

最初に『root』さんとしてログインする。

次に『root』さんが『test』くんになりすます。

『root』さんが『test』くんになりすました状態から更に『root』さんになりすます。

『root』さんが『test』くんになりすました状態から更に『root』さんになりすました状態からログアウトする。

『root』さんが『test』くんになりすました状態からログアウトする。

『root』さんからログアウトする。

って感じになります。

このように『su』は一時的なユーザーの切り替えになりますので一番最初にログインしたユーザーとは全く別物になりますのでご注意です。

もし自分自身が誰なのか分からなくなってしまったら『whoami』コマンドを打つと自分が誰なのか教えてくれます。

[root@localhost ~]# whoami
root

ただ注意点ですが「現在のユーザー名を教えてくれるコマンド」になりますので『su』でユーザーを切り替えていた場合はその切替先のユーザー名となります。

[root@localhost ~]# whoami
root
[root@localhost ~]# su test
[test@localhost root]$ whoami
test

ここ勘違いしやすいので気を付けてくださいね。

そしてもちろん『whoami』の元となった言葉は『Who am I』(私は誰?)でございます。人生は色々とありますのでもし自分自身を見失ってしまったら『whoami』と打ってみて下さい。名前くらいなら教えてくれるでしょう。

続いて『su』の小テクとかを紹介しておきます。

まず『su』のオプションに『-』って子が用意されていましてこの子を使うと「新規ログインしたのと同じ状態になってからユーザー切り替えを行う」という動作に変更されます。

「新規ログインしたのと同じ状態ってどんな状態だぜ?」ってお話なのですがUNIX系OSでは『ホームディレクトリ』が用意されていて最初にログインした状態だとその『ホームディレクトリ』に居る状態から操作開始になりますよね。

『-』をつけないでユーザーを一時的に切り替えるとユーザーを切り替える前のカレントディレクトリがそのまま継続されるのですが『-』を付けるとその一時的に切り替えたユーザーの『ホームディレクトリ』に移動されます。

そしてその一時的に切り替えるユーザーが使っているデフォルトの『シェル』が使われるようになります。

※『シェル』を忘れてしまった方はこちらへどぞ。

というわけでちょいと試してみましょう。

まず『root』さんでログインして『pwd』コマンドを打ってみます。最初にログインした段階だとそのユーザーの『ホームディレクトリ』から開始されるので以下のように

[root@localhost ~]# pwd
/root

『pwd』の結果が『/root』になっていますね。

この状態で『su test』を打ってpwdを打つと

[root@localhost ~]# su test
[test@localhost root]$ pwd
/root

引き続き『/root』に居ますね。

そこでここから一旦ログアウトして

[test@localhost root]$ exit
exit
[root@localhost ~]#

『su - test』と打って『pwd』を叩くと

[root@localhost ~]# su - test
[test@localhost ~]$ pwd
/home/test

今度は『test』くんのホームディレクトリである『/home/test』へ移動されました。今回は『test』くんも『root』さんもデフォルトの『シェル』は同じ『bash』になりますので変更がありませんがちゃんと『シェル』も切り替えてくれます。

こんな感じで切り替えるユーザーの設定をそのまま使えるようになりますので状況によってはとっても便利です。

正直『ホームディレクトリ』の切り替えは結構どうでも良いのですが『シェル』の切り替えはとても強力ですね。UNIX系OSでは「とあるプログラムを動かす為のユーザー」なんてのも作成する機会が多々あり、そのときに「特定の『シェル』を使わないと動かせない」なんて場合があったりするので皆さんも機会があれば使ってみて下さい。

あと『-』は『ls -al』みたいに『-』の後ろにアルファベットとかを置く必要はありませんのでそのまま『-』をちょんっと置いてしまえばOKです。

そして『su』コマンドにユーザー名を指定しなかった場合は『root』さんへの切り替えとなります。以下のような感じですね。

[root@localhost ~]# su test
[test@localhost root]$ su
Password:
[root@localhost ~]#

『su』コマンドで切り替えるユーザーは『root』さんが圧倒的に多いので「『su』だけ打ったら『root』さんになれる!」って覚えておきましょう。『-』を使う場合は『su -』とだけ打てば『root』さんのデフォルトの環境を蹂躙しつつ『root』さんになれます。

[root@localhost ~]# su test
[test@localhost root]$ su -
Password:
[root@localhost ~]#

こちらも便利なので覚えておいて下さい。

次にユーザーを切り替える際のパスワードについてです。まず『root』さんみたいな管理者権限を持ったユーザーが『su』コマンドで他の一般ユーザーになりすます場合はパスワードは聞かれません。んで一般ユーザーが他のユーザーになりすます場合はパスワードを聞かれます。

かなり地味な情報かもですが『root』さんから他のユーザーに切り替える際にパスワードが聞かれなかったせいで「あれ?このユーザーのパスワード設定し忘れたかな?(´・ω・`)」って気持ちになって確認したり調べちゃったりすること結構あるあるだと思うのでご注意ですね。著者もこの仕様を忘れてて不安になっちゃった事結構あるのは内緒です。

さてここでパスワードの話が出てきたのでちょいとこれについて確認していきましょう。これまでは『root』さんが一般ユーザーである『test』くんになりすましていたのでパスワードを入力しなくてもユーザーの切り替えが出来ていました。

じゃあ一般ユーザーが『test』くんにユーザー変更したい場合のパスワードはどうなっているのでしょうか。

実はUNIX系OSって『root』さんが『root』さんになりすませたり『test』くんが『test』くんになりすませたりと『su』を使って自分自身になりすますという良く分からない事も出来るのですが以下のように『test』さんから『test』さんになりすますと

[root@localhost ~]# su test
[test@localhost root]$ su test
Password:

パスワードが聞かれますね。パスワードを設定していないのになんだかふしぎです。

というわけで次の記事ではパスワードとかユーザーの削除について色々とやっていきましょう。ではこの辺で失礼致します。

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .