一般ユーザーとスーパーユーザー: suやsudoコマンドでの切り替え

2013年7月5日

今年の3月に下書きして、そのまま途中でやめてしまった記事があったので再利用。
一般ユーザーとか管理者権限とかがよくわかってなかった頃に書いたものにいろいろ書き足し。

ユーザーの権限

ユーザーには一般ユーザーとスーパーユーザーがあり、スーパーユーザーはroot権限を持つ管理者のことをいいます。一般ユーザーは管理者権限を持っていないので、コマンド操作に制限があります。
サーバーを複数人で操作するときはこの一般ユーザーを複数作り、それぞれの環境設定を行って操作します。操作に制限があるので誤操作によって大変な事態になることも避けられるし(?)、セキュリティ的にもこのほうが安心。

ユーザー情報は「/etc/passwd」ファイルに記述されています。lessはテキストファイルを閲覧するコマンド。
$ less /etc/passwd
自分が今スーパーユーザーなのか一般ユーザーなのかは、シェルプロンプトで確認できます。プロンプトは自分で設定変更が可能なので全てに当てはまるわけではないですが、「$」なら一般ユーザー、「#」ならスーパーユーザーと考えて問題ないです。

Osukiniサーバーは最初から一般ユーザーが作成されている

多くのサーバーは、管理者権限でログイン後、普段使う用の一般ユーザーを自分で作成し、設定します。
Osukiniサーバーは利用開始時にすでに一般ユーザーが1つ作成されているので、この手間が省け、最初から一般ユーザーでログインできます。また管理者権限ではログインできないように設定されています。

スーパーユーザーへの昇格

Osukiniサーバーで管理者権限でログインができないなんて、じゃあ権限が必要な設定するときはどうするんだって?
普段は一般ユーザーで操作をして、必要な場合のみスーパーユーザーに切り替えることができます。このブログでもしょっちゅうやっていますが。

suコマンド

一般ユーザーからスーパーユーザー(rootユーザー)になるためのコマンド。rootのパスワードが必要になります。Osukiniの場合はら設定報告書に書いてあります。
$ su
パスワード:
#
スーパーユーザーになると「$」が「#」に変わります。
また一般ユーザーに戻るときはexitコマンド。
# exit
exit
$

su -コマンド

「-(ハイフン)」を付けるやり方もあります。この場合は一般ユーザーの環境を引き継ぎません。今自分がいるディレクトリの場所に関係なく、ログインするとrootのホームディレクトリに移動します。
例えば今一般ユーザーでhtmlディレクトリにいるとすると、「su -」なら
[user html]$ su -
Password:
[root ~]#
ハイフンなしだとディレクトリは移動しないので
[user html]$ su
Password:
[root html]#
上手く使い分けられるといいですね。

sudoコマンドでパスワードレス

管理者権限がないと閲覧できないファイルの設定をしたりするとき、いちいちいちいちrootパスワードを入力してスーパーユーザーに切り替えるのはめんどくさい。
(↑これやりすぎて自動発行されたランダムな文字列のパスワードでさえ暗記してしまった私)
ということで、指定したユーザーにだけ、パスワードレスでroot権限が必要なコマンドを実行できるように設定してしまったほうが楽です。
この設定をしてしまえば、実行したいコマンドの前に「sudo」を付けるだけでOK。

/etc/sudoersファイルを編集する

sudoコマンドを使えるようにするには、「/etc/sudoers」ファイルにユーザー名を登録する必要があります。このファイルは管理者権限があってもviでは開けないのでvisudoコマンドを使います。
# visudo
ファイルの最終行に1行追記し、上書き保存します。
ユーザー名 ALL=NOPASSWD:ALL
これによって、指定したユーザーは全ての操作を制限なく行えるようになります。全てではなく管理者権限の必要な一部の操作のみに指定したい場合は、そのコマンドを記述すればOK。
再起動の操作だけを指定するのであれば
ユーザー名 ALL=NOPASSWD: /sbin/reboot
といった感じに、最後の「ALL」をコマンド名に書き換えてください。
この設定が完了したら、次からは管理者権限が必要なコマンド操作も下記の1ステップで行えます。
$ sudo コマンド

sudoのメリット

sudoコマンドは別にパスワードレスにさせることがメインではありません。重要なのはセキュリティ面。
suコマンドだとユーザーがexitするまでずっと管理者権限で行うことができますが、sudoの場合は一定時間が経つとこの権限が消失します。また、suコマンドではログが残らないのに対し、sudoはログが残ります。何かあったときにログがないと原因がわからないし、sudoのほうが安心。複数人でサーバーを使うとき、/etc/sudoersファイルにユーザー登録さえしてしまえば、全員にrootパスワードを教える必要もないので、パスワードが意図しないところに漏洩する危険性もなくなります。
  • 一定時間(デフォルト5分)で権限消失
  • 操作ログが残る
  • rootパスワードをユーザーに教える必要がない
  • コマンド単位で権限を設定できる
サーバーを触るのが自分1人のときはあまり関係ないかもしれませんが、何人もの人と共有するときはこれが重要になってきますね。


——————–

今日はちょっと真面目ちゃんな記事だから面白くない(;′Д`)
「マン・オブ・スティール」の日本公開まであと2ヶ月弱ですね。まだかなーまだかなー。

それではよい七夕を~ヾ(・д・。)