「Su」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
(他の1人の利用者による、間の1版が非表示)
3行目: 3行目:
 
[[en:su]]
 
[[en:su]]
 
[[es:su]]
 
[[es:su]]
  +
[[fa:su]]
 
[[fr:su]]
 
[[fr:su]]
  +
[[zh-hans:Su]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ユーザーとグループ}}
 
{{Related|ユーザーとグループ}}
{{Related2|sudo|sudo}}
+
{{Related|sudo}}
 
{{Related articles end}}
 
{{Related articles end}}
   
24行目: 26行目:
   
 
== セキュリティ ==
 
== セキュリティ ==
セキュリティの観点から、おそらく su の代わりに [[sudo|sudo]] を設定して使うほうがベターと言えます。sudo システムは、ターゲットユーザー(あなたが使おうとしているユーザーアカウント)のパスワードではなく、あなた自身のパスワードを要求します(設定によっては全くパスワードを使いません)。ユーザー間でパスワードを共有する必要がないため、ユーザーからの root 権限へのアクセス(もしくはその他のアカウントへのアクセス)を止めなくてはならない場合、root パスワードを変更しなくてもよいのです。あなた以外のユーザーにとっては不自由でしょうが、あなたはユーザーの sudo を無効にするだけになります。
+
セキュリティの観点から、おそらく su の代わりに [[sudo]] を設定して使うほうがベターと言えます。sudo システムは、ターゲットユーザー(あなたが使おうとしているユーザーアカウント)のパスワードではなく、あなた自身のパスワードを要求します(設定によっては全くパスワードを使いません)。ユーザー間でパスワードを共有する必要がないため、ユーザーからの root 権限へのアクセス(もしくはその他のアカウントへのアクセス)を止めなくてはならない場合、root パスワードを変更しなくてもよいのです。あなた以外のユーザーにとっては不自由でしょうが、あなたはユーザーの sudo を無効にするだけになります。
   
ユーザーが root のシェルを使えるように sudo を設定している場合、{{ic|sudo -s}} や {{ic|sudo -i}} で、{{ic|su}} や {{ic|su -}} と同じことができます、それぞれ、root パスワードではなくユーザーのパスワードを使います(もしくはパスワードを使わない)。同様に、john のシェルを実行することが許可されているなら、{{ic|sudo -u john -i}} が {{ic|su - john}} と同じになります。
+
ユーザーが root のシェルを使えるように sudo を設定している場合、{{ic|sudo -s}} や {{ic|sudo -i}} で、{{ic|su}} や {{ic|su -l}} と同じことができます、それぞれ、root パスワードではなくユーザーのパスワードを使います(もしくはパスワードを使わない)。同様に、john のシェルを実行することが許可されているなら、{{ic|sudo -u john -i}} が {{ic|su -l john}} と同じになります。
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
 
=== ログインシェル ===
 
=== ログインシェル ===
 
su はデフォルトで、現在のディレクトリとユーザーの環境変数を維持します(新しいユーザーのそれにはスイッチしません)。
 
su はデフォルトで、現在のディレクトリとユーザーの環境変数を維持します(新しいユーザーのそれにはスイッチしません)。
38行目: 40行目:
 
* しかし、多くの場合、一般ユーザーのシェルから root ユーザーが作業を行う(そのアカウントの環境変数を使う)ことは望ましくなく、また危険でもあります。不注意に一般ユーザーのシェルアカウントを使っていると、プログラムのインストールなどのシステム作業が root アカウントとは違う結果を生むことがあります。例えば、インストールされたプログラムが、偶然にも一般ユーザーにシステムにダメージを与える権限や、データへの許されざるアクセス権を与えてしまう可能性があるのです。
 
* しかし、多くの場合、一般ユーザーのシェルから root ユーザーが作業を行う(そのアカウントの環境変数を使う)ことは望ましくなく、また危険でもあります。不注意に一般ユーザーのシェルアカウントを使っていると、プログラムのインストールなどのシステム作業が root アカウントとは違う結果を生むことがあります。例えば、インストールされたプログラムが、偶然にも一般ユーザーにシステムにダメージを与える権限や、データへの許されざるアクセス権を与えてしまう可能性があるのです。
   
よって、管理者ユーザーは(さらに他のユーザーも)、su を使う時(su を使うこともできるだけ避けましょう)はいつも su コマンドにスペースとハイフンを加えるべきです。ハイフンにはつの意味があります:
+
よって、管理者ユーザーは(さらに他のユーザーも)、su を使う時(su を使うこともできるだけ避けましょう)はいつも su コマンドに {{ic|-l}}/{{ic|--login}} オプションを加えるべきです。オプションには2つの意味があります:
 
# そのユーザーに''ログイン''する際に現在のディレクトリから、新しいユーザーのホームディレクトリ(root ユーザーの場合、{{ic|/root}})に移動します
 
# そのユーザーに''ログイン''する際に現在のディレクトリから、新しいユーザーのホームディレクトリ(root ユーザーの場合、{{ic|/root}})に移動します
# 環境変数を {{ic|~/.bashrc}} によって指定された、新しいユーザーのものに変更します。つまり、su にハイフンをつけると、現在のディレクトリと環境変数が新しいユーザーが(現在のセッションではなく)新しいセッションにログインしたときと同じようになるということです。
+
# 環境変数を {{ic|~/.bashrc}} によって指定された、新しいユーザーのものに変更します。つまり、su に {{ic|-l}}/{{ic|--login}} オプションをつけると、現在のディレクトリと環境変数が新しいユーザーが(現在のセッションではなく)新しいセッションにログインしたときと同じようになるということです。
   
 
管理者は su を使う時は次のようにすべきです:
 
管理者は su を使う時は次のようにすべきです:
$ su -
+
$ su -l
   
 
ユーザーネームとして root を付け加えても同じ結果になります:
 
ユーザーネームとして root を付け加えても同じ結果になります:
$ su - root
+
$ su -l root
   
 
また、他のユーザーでも同じことができます (例: archie という名前のユーザー):
 
また、他のユーザーでも同じことができます (例: archie という名前のユーザー):
# su - archie
+
# su -l archie
   
 
{{ic|~/.bashrc}} に次のようにエイリアスを追加してもいいでしょう:
 
{{ic|~/.bashrc}} に次のようにエイリアスを追加してもいいでしょう:
   
alias su="su -"
+
alias su="su -l"
   
 
=== su と wheel ===
 
=== su と wheel ===

2017年11月5日 (日) 18:18時点における版

関連記事

su コマンド (substitute user) はシステム上の他のユーザーになりかわるために使われます、一般的にそのユーザーとは root です。su を使うことでユーザーを変えるためにログイン/ログアウトする手間を省くことができます。つまり、あなたのセッション内で一種の"サブセッション"を使って他のユーザーとしてログインし、その後あなたのセッションに戻ることになります。

インストール

su は util-linux パッケージに入っています。util-linux は base グループの一部として Arch ではデフォルトでインストールされます。

使用方法

他のユーザーのログインとして、su になりたいユーザー名を入力します:

# su user_name

使用したいユーザーのパスワードを求めるプロンプトが表示されます。

ユーザー名を入力しなかった場合、su は root ユーザーだと認識し、root ユーザーのパスワードを要求します。

セキュリティ

セキュリティの観点から、おそらく su の代わりに sudo を設定して使うほうがベターと言えます。sudo システムは、ターゲットユーザー(あなたが使おうとしているユーザーアカウント)のパスワードではなく、あなた自身のパスワードを要求します(設定によっては全くパスワードを使いません)。ユーザー間でパスワードを共有する必要がないため、ユーザーからの root 権限へのアクセス(もしくはその他のアカウントへのアクセス)を止めなくてはならない場合、root パスワードを変更しなくてもよいのです。あなた以外のユーザーにとっては不自由でしょうが、あなたはユーザーの sudo を無効にするだけになります。

ユーザーが root のシェルを使えるように sudo を設定している場合、sudo -ssudo -i で、susu -l と同じことができます、それぞれ、root パスワードではなくユーザーのパスワードを使います(もしくはパスワードを使わない)。同様に、john のシェルを実行することが許可されているなら、sudo -u john -isu -l john と同じになります。

ヒントとテクニック

ログインシェル

su はデフォルトで、現在のディレクトリとユーザーの環境変数を維持します(新しいユーザーのそれにはスイッチしません)。

重要な対照的考察事項:

  • 管理者のシェルアカウントを使うよりも、標準的なユーザーのシェルアカウントを使う方が都合の良い場合があります。特に、ユーザーの問題を解決するとき、そのユーザーアカウントにログインして問題を再現・デバッグするのが一番効果的かもしれません。
  • しかし、多くの場合、一般ユーザーのシェルから root ユーザーが作業を行う(そのアカウントの環境変数を使う)ことは望ましくなく、また危険でもあります。不注意に一般ユーザーのシェルアカウントを使っていると、プログラムのインストールなどのシステム作業が root アカウントとは違う結果を生むことがあります。例えば、インストールされたプログラムが、偶然にも一般ユーザーにシステムにダメージを与える権限や、データへの許されざるアクセス権を与えてしまう可能性があるのです。

よって、管理者ユーザーは(さらに他のユーザーも)、su を使う時(su を使うこともできるだけ避けましょう)はいつも su コマンドに -l/--login オプションを加えるべきです。オプションには2つの意味があります:

  1. そのユーザーにログインする際に現在のディレクトリから、新しいユーザーのホームディレクトリ(root ユーザーの場合、/root)に移動します
  2. 環境変数を ~/.bashrc によって指定された、新しいユーザーのものに変更します。つまり、su に -l/--login オプションをつけると、現在のディレクトリと環境変数が新しいユーザーが(現在のセッションではなく)新しいセッションにログインしたときと同じようになるということです。

管理者は su を使う時は次のようにすべきです:

$ su -l

ユーザーネームとして root を付け加えても同じ結果になります:

$ su -l root

また、他のユーザーでも同じことができます (例: archie という名前のユーザー):

# su -l archie

~/.bashrc に次のようにエイリアスを追加してもいいでしょう:

alias su="su -l"

su と wheel

BSD の su はデフォルトで root を使うことができるのが "wheel" グループのユーザーだけになっています。これは GNU su のデフォルトとは違いますが、PAM を使うことで BSD と同じようにできます。/etc/pam.d/su/etc/pam.d/su-l にある次の行をアンコメントしてください:

auth required pam_wheel.so use_uid