Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - ユーザーの概要と確認と追加と切り替え(adduserとsu)について

ユーザーの概要と確認と追加と切り替え(adduserとsu)について

みなさまどうも。

さてこれまでの記事でリモート操作や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:

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

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

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。