Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
UNIX(Linux)
入門編
- UNIX(Linux)とは
- ディストリビューションとは
- CentOSとMacOSとCUIについて
- 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
- ログインとrootユーザーとシャットダウン等について
- コマンドの構造と注意点について
- ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
- 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
- ちょっと高度なディレクトリの移動(cd)とパスについて
- 『ls』コマンドの応用(1)とドットファイルについて
- 『ls』コマンドの応用(2)
- タブキーを使った入力補完について
- ディレクトリの作成方法(mkdir)について
- ファイルの簡易作成(touch)とファイルについて
- 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
- ファイルとディレクトリの削除(rm)について
- ファイルとディレクトリのコピー(cp)について
- ファイルとディレクトリの移動と名前変更(mv)について
- viエディタとは
- viの基本的な使い方(1)
- viの基本的な使い方(2)
- ターミナル(sshとTera Term)を使ったリモート操作について
- ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
- ユーザーの概要と確認と追加と切り替え(adduserとsu)について
- ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
- グループの概要と確認方法(groups)について
- グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
- パーミッション(権限)について
- パーミッションの設定方法(chmodとchown)について
- トップページ
- 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 HarutoISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。 |
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。