ユーザースイッチ(切り替え)と管理者権限での実行
- 2015/08/31
- 10:27
一般ユーザで作業をしていると、root権限がないと作業できない、
特定のアカウントの環境でないと作業ができないという事態に
遭遇することがあります。
そんな時に利用するのが「su」コマンドまたは「sudo」コマンドと
呼ばれるコマンドです。
suコマンド
「su」コマンドはSwitch Userの略で一時的に別のユーザになることが
できます(ユーザー切り替え)。
■特定のユーザにスイッチする場合
$ su - USERNAME
※「USERNAME」の部分はユーザ名となります。
スイッチしたい対象のユーザを指定します。
前回作成した一般ユーザである「testuser」から、OSインストール時に
作成した管理者権限が利用できる「test」へ切り替わってみます。
(1)現在のユーザを確認する
$ whoami
testuser
表示結果から「testuser」であることが確認できました。
(2)「su」コマンドを実行してユーザスイッチ
$ su - test

パスワード入力を求められるので、対象ユーザのパスワードを入力します。
ログインが成功すると前回ログインした日にちが表示されます。
(3)ユーザが切り替わっているかどうか確認してみます。
$ whoami
test
表示結果から「test」ユーザになっていることが確認できました。
■元のユーザに戻る場合
「logout」または「exit」コマンドを使います。
どちらを利用してもかまいません。
「logout」は特にメッセージが出ずプロンプトが返ってくるだけですが、
「exit」は「ログアウト」とメッセージが出てきます。
$ logout

$ exit

私はもっぱら「exit」を使ってます・・・。
どっちを使うかは好みでいいのではないだろうか?
ちなみにユーザを切り替えているので「exit」や「logout」を
しない限りずっとそのユーザのままでいます。
■rootにスイッチする場合
$ su -
※「USERNAME」を指定しない
ユーザIDを指定せずに「su」コマンドを実行すると「root」ユーザへの
スイッチとなります。
(1)現在のユーザを確認する
$ whoami
testuser
表示結果から「testuser」であることが確認できました。
(2)「su」コマンドを実行してユーザスイッチ
$ su -

パスワード入力を求められるので、rootユーザのパスワードを入力します。
ログインが成功すると前回ログインした日にちが表示されます。
(3)ユーザが切り替わっているかどうか確認してみます。
$ whoami
root
表示結果から「root」ユーザになっていることが確認できました。
ログアウトする場合は「exit」または「logout」コマンドを使います。
■「su」と「su -」の違い
「su」コマンドを実行する際に「su」の場合と「su -」の場合があります。
「 - 」がついていてもついていなくてもユーザスイッチ自体は可能です。
ただしついている場合とついていない場合では動作がかわります。
【su -】
指定したユーザに新規でログインしなおしているようなイメージです。
指定したユーザのホームディレクトリに変わります。
PATHなどの環境変数や使用するシェルも指定したユーザが設定している
ものを使用します。
【su】
ちょっと指定ユーザの権限借りてくるみたいなイメージです。
覆面作家的な?・・・ゴーストライター的な?・・・
現在の(コマンドを実行した)ユーザの操作環境(使用するシェル、
環境変数、ホームディレクトリなど)をそのまま指定ユーザが
利用して作業をすることになります。
より詳しく丁寧な説明はこちらをご参照下さい。
su~ログイン中のアカウントを変更する
suとsu - の違い
su と su - の違い
「sudo」コマンド
「sudo」コマンドは「Super User Do」はまたは「Switch User Do」の略です。
ユーザを切り替えはしないけれど、違うユーザの権限でコマンドを実行したい時に
使います。ただしrootユーザによってsudoが利用できるように設定されていることが
前提条件となります。
「Super User Do」つまり「rootユーザで実行」ということになります。
ユーザを指定したらrootユーザに限らず、別のユーザの権限でも実行ができるので
「Switch User Do」でもあるわけです。
■「sudo」コマンドを使ってみる!
(1)現在のユーザを確認する
$ whoami
testuser
(2)ユーザ「test」のホームディレクトリの内容を表示する
$ ls -l /home/test
ls: ディレクトリ /home/test を開くことが出来ません: 許可がありません
現在コマンドを実行しているのは「testuser」さんです。
「test」さんのお家を覗き見しようとしたら怒られました・・・( ;・∀・)
権限を持っていないの見せてくれません。
ではroot権限をいただいて実行したいと思います。
この場合root権限とは大家さんのマスターキーみたいなものです。
鍵を借りて入らせていただくような感じです。
(3)sudoコマンドを実行する
$ sudo ls -l /home/test
[sudo] password for testuser: ←testuserのパスワードを入力
testuser は sudoers ファイル内にありません。この事象は記録・報告されます。
testuserにはsudoを実行する権限が与えられていなかったため怒られました・・・
大家さんからお前誰だよ、通報しますよ・・・って言われた感じ・・・( ゚∀゚; )
sudo使えるIDって誰だ?!!!
・・・管理者権限を持つユーザをOSインストール時に作成しています。
【参照】ゲストOSのインストール
そのユーザにスイッチしてからsudoを実行してみましょう!
(4)「su -」コマンドでユーザ:testにスイッチ
$ su - test
パスワード: ←testのパスワード入力
最終ログイン: 2015/08/28 (金) 13:04:32 JST日時 pts/0
(5)ユーザ:testにスイッチしていることを確認する
$ whoami
test
(6)ホームディレクトリを確認する
$ pwd
/home/test
testユーザにスイッチしたのでホームディレクトリは「/home/test」になります。
(7)ユーザ「test」のホームディレクトリの内容を表示する
$ ls -l /home/test

表示できたっ(*'∀'*)
・・・と、思ってはいけませんw
自分のホームディレクトリです。表示できなくては困りますwww
今はスイッチして「test」さんになっています。
先ほどとは逆に「testuser」さんのお家を覗かなくては意味がないのです。
(8)ユーザ「testuser」のホームディレクトリの内容を表示する
$ ls -l /home/testuser
ls: ディレクトリ /home/testuser を開くことが出来ません: 許可がありません
おや?!覗けない・・・
この時点では「test」ユーザになっただけなのでroot権限は持っていません。
鍵を持ってないけど覗き見しようとしているだけなのです。
なので大家さんから鍵を借りましょう!!
(8)sudoコマンド実行する
$ sudo ls -l /home/testuser
[sudo] password for test: ←testのパスワードを入力
合計 0
今度こそ表示されました(*'▽'*)ノ
あいにくと中身空っぽのディレクトリでしたが・・・。
sudoコマンドはこんな感じです。
■「sudo」コマンドが利用できるユーザかのチェック
「sudo」コマンドはrootが許可したユーザしか利用できません。
オプション「-l」を利用することによって自身が「sudo」コマンドを
利用できるユーザかチェックすることが可能です。
【testuserで確認してみる】
$ sudo -l
[sudo] password for testuser: ←testuserのパスワード入力
ユーザー testuser は TEST 上で sudo を実行できません。すみません。
「sudo」コマンドの許可がありませんでした。残念( ;´-ω-)
【testで確認しみる】
(1)testユーザにスイッチ
$ su - test
パスワード: ←testのパスワード入力
最終ログイン: 2015/08/31 (月) 11:26:25 JST日時 pts/0
(2)sudoコマンド実行
$ sudo -l
[sudo] password for test: ←testのパスワード入力
このホスト上でユーザー test に一致したデフォルト項目:
~ 中略 ~
ユーザー test は次のコマンドをこのホスト上で実行できます:
(ALL) ALL
「sudo」コマンドの許可があります。
「ALL」と出ているのですべてのコマンドが実行可能ですねo(*`ω´*)o
スポンサーサイト