【Linux】ユーザーの切り替えコマンドを紹介(su, exit)

Linux
スポンサーリンク

※本サイトにはプロモーション・広告が含まれています(はづきのブログより)
※この記事は初心者向けに平易に解説しています。正確な理解をしたい人は専門書・専門家をあたっていただければと思います。また、この記事の情報におけるCPの動作結果については自己責任でお願いします。

はづき
はづき

Linuxのユーザーの切り替え方法について解説します!

みなさんのお役に立てば嬉しいです!

この記事のまとめ:

  • suコマンドを使ってユーザーを切り替える
  • exitコマンドを使って切り替え前のユーザーに戻る
  • スーパーユーザーを使う場合、suコマンドよりもsudoコマンドがおすすめ

\お知らせ/
はづきのブログではLinuxに関する記事をたくさん書いています!
ブックマークしておくと便利です!

スポンサーリンク

ユーザー種別について

  • スーパーユーザー(root)
  • 一般ユーザー
  • システムユーザー

LinuxはひとつのLinux環境に対して、複数のユーザーがログインできるマルチユーザー環境です。

スーパーユーザーは、その中でも最も強い権限を持つユーザーです。このユーザーはLinux内のほぼすべてのファイルやディレクトリの編集・削除ができます。Linux内でユーザー名が「root」と表記されることから"rootユーザー"と呼ばれることもあります。

一般ユーザーは、利用者ごとに個別で作成される"定められた権限"を持つユーザーです。そのため、該当ユーザーからの操作が許可されたファイルやディレクトリにしか編集・削除をすることはできません。例えば、私がLinuxを使用する場合、「はづき」という名前の一般ユーザーを作成することができます。この「はづき」ユーザーが操作できるファイルやディレクトリの範囲は権限設定によって制限されます。

スーパーユーザーは権限が強いため、"削除してはいけないファイルを削除してしまう"といった誤操作でシステムを破壊してしまう恐れがあります。したがって、基本的には「一般ユーザー」をメインで使って、必要な場合のみ「スーパーユーザー」に切り替えることが推奨されています。

※ファイルやディレクトリへの個別の操作権限の設定は「chmod」コマンドを使います

システムユーザーは、Linuxサーバなどを構築した際に「プログラムの実行のために作成されたシステム上のユーザー」です。このユーザーは他のユーザーと異なり"人間"に紐づけられていません。そのため、本記事の「ユーザー切り替え」とは少しずれるため解説を割愛します。

 

ユーザーの切り替えコマンド

ユーザーの切り替えは「suコマンド」「exitコマンド」で行えます。

以下が主な用途です。

  • 一般ユーザーからスーパーユーザーへ切り替える(スーパーユーザーの権限が使える)
  • 一般ユーザーから別の一般ユーザーへ切り替える

suコマンドとsudoコマンド
スーパーユーザーの操作権限を得たい場合は、ユーザー切り替え(suコマンド)ではなく「sudoコマンドによる一時的な権限移譲」が一般的には推奨されています。

suコマンドで切り替えた場合、exitコマンドを実行するまで継続的にスーパーユーザーの操作権限を持つことになります。一方で、sudoコマンドは1個のコマンド操作に対してのみスーパーユーザーの権限を使うことができるため誤操作のリスクが低いとされています。ただし、sudoコマンドはLinuxディストリビューションの種類によって使用できない場合もあります。

 

ログイン:suコマンド

suコマンドは指定したユーザーへのログインができるコマンドです。

以下のように[オプション]と[ユーザー名]を指定して、別ユーザーへの切り替えを行います。

 su [オプション] [ユーザー名]

使う際のポイントを以下にまとめます。

  • スーパーユーザーに切り替えたい場合、[ユーザー名]は不要
  • [オプション]は「-」がおすすめ
  • 切り替え前に戻るためには「exit」コマンドを実行する

オプションは以降で詳しく解説しますが、「-」がおすすめです。このオプションは、ユーザー切り替え時に切り替え先のユーザーの環境変数を利用することができます。環境変数が切り替え前のユーザーのままになっていると、「操作ユーザーは切り替わっているはずなのに、環境変数は切り替える前のまま」といった齟齬が起こり動作不具合に繋がることがあります。

以下で、実際の実行の様子を紹介します。

例1.一般ユーザー(hazukiblog)からスーパーユーザー(root)への切り替え

#切り替え前に一般ユーザー(hazukiblog)の状態を確認します
#1:ホームディレクトリがhazukiblogであることを確認(=ログイン直後のカレントディレクトリを確認)
#2:環境変数の代表としてUSERとLOGNAMEの値を確認
hazukiblog@hazukiBlog:~$ pwd #1
/home/hazukiblog
hazukiblog@hazukiBlog:~$ echo $USER #2
hazukiblog
hazukiblog@hazukiBlog:~$ echo $LOGNAME #2
hazukiblog

#3:suコマンドに「-」オプションを指定してスーパーユーザーに切り替えます
#4:切り替え先(スーパーユーザー)のパスワードを指定してEnterを押下する
hazukiblog@hazukiBlog:~$ su - #3
Password: #4

#5:whoamiコマンドで現在のユーザーが「root」に切り替わったことを確認
#6:ホームディレクトリと環境変数が「#2」時点から切り替わったことを確認
root@hazukiBlog:~ whoami #5
root
root@hazukiBlog:~ pwd #6
/root
root@hazukiBlog:~ echo $USER #6
root
root@hazukiBlog:~ echo $LOGNAME #6
root

#7:exitコマンドでスーパーユーザーからログアウトする
#8:whoamiコマンドで現在のユーザーがhazukiblogに戻っていることを確認
root@hazukiBlog:~ exit #7
logout
hazukiblog@hazukiBlog:~$ whoami #8
hazukiblog

例2.一般ユーザー(hazukiblog)から一般ユーザー(sampleUser)への切り替え

#1:suコマンドに切り替え先のユーザー名(sampleUser)を指定します
#2:切り替え先(sampleUser)のパスワードを指定してEnterを押下する
#3:以降は切り替わったことの確認(例1を参考)
#※切り替え先のユーザーは先に作成しておく必要があります。
hazukiblog@hazukiBlog:~$ su - sampleUser #1
Password: #2
$ pwd #3
/home/sampleUser
$ whoami #3
sampleUser
$ echo $USER #3
sampleUser
$ echo $LOGNAME #3
sampleUser
$ exit

 

\もっと詳しく/

suコマンドのオプションと環境変数の引き継ぎについて

suコマンドのオプションは複数ありますが、注目すべきは「環境変数の引き継ぎ」になります。「切り替え前のユーザーの環境変数」を「切り替え後の環境変数」に引き継ぐかどうかがオプションの指定方法よって異なります。

例えば、manコマンドを使ってsuコマンドの詳細を調べると「-」オプションについて以下のような説明文が表示されます。※manコマンドは引数に指定したコマンドの説明を表示できる

-, -l, --login
• initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH
 (環境変数HOME、SHELL、USER、LOGNAME、PATHを初期化します。)

一方で、suコマンドの「-m」オプションでは以下のような説明が記載されています。

-m, -p, --preserve-environment
Preserve the entire environment, i.e., do not set HOME, SHELL, USER or LOGNAME. This option is ignored if the option --login is specified.
(環境全体を保存し、HOME、SHELL、USER、または LOGNAME を設定しません。--login オプションが指定されている場合、このオプションは無視されます。)

このことから以下のことがわかります。
suコマンドを使うときは「環境変数の引き継ぎ」に注目してみてください!

  • 「-」オプションは環境変数を切り替え先ユーザーに引き継がない
  • 「-m」オプションは環境変数を切り替え先ユーザーに引き継ぐ

例3.「-m」オプションを使って環境変数が引き継がれていることを確認


hazukiblog@hazukiBlog:~$ su -m sampleUser
Password:
sampleUser@hazukiBlog:~$ pwd
/home/hazukiblog
sampleUser@hazukiBlog:~$ whoami #ユーザーはsampleUserに切り替わっている
sampleUser
sampleUser@hazukiBlog:~$ echo $USER #環境変数は切り替え前のユーザー(hazukiblog)のまま
hazukiblog
sampleUser@hazukiBlog:~$ echo $LOGNAME
hazukiblog
sampleUser@hazukiBlog:~$ exit
exit
hazukiblog@hazukiBlog:~$
はづき
はづき

他のオプションについて知りたい方は「man su」とターミナルで実行してみてください!

 

ログアウト:exitコマンド

exitコマンドはsuコマンドで切り替えたユーザーから切り替え前のユーザーに戻りたいときに使用します。

実行方法は以下のように「exit」と入力してEnterを押下するだけです。

exit

使用例についてはさきほどの「suコマンド」の説明で紹介したので、ここではsuコマンドとexitコマンドの興味深い性質について説明します。

suコマンドのユーザー切り替えは"重ね掛け"が可能です。

例えば、ある一般ユーザー(hazukiblog)からスーパーユーザー(root)に切り替えたとします。そして、さらにスーパーユーザー(root)から先とは別の一般ユーザー(sampleUser)に切り替えたとします。

このとき一般ユーザー(sampleUser)がexitコマンドを実行すると、一つ前の切り替え元であるスーパーユーザー(root)に切り替わります。そして、スーパーユーザー(root)でexitコマンドを実行すると、最初の一般ユーザー(hazukiblog)に切り替わります。

suコマンドで以下のように切り替えを2度行うとする
hazukiblog
 ┗> rooot
   ┗> sampleUser

その後、exitコマンドを2度実行すると以下のようにユーザーが切り替わる
sampleUser
 ┗> root
   ┗> hazukiblog

⇒suコマンドは重ね掛けすることで階層構造を保持した状態でユーザーが切り替わる

 

はづき
はづき

今回はLinuxのユーザー切り替えの方法について書きました!

suコマンドとexitコマンドを使って実際に操作してみてください!

おしまい

コメント

タイトルとURLをコピーしました