やりたいこと
別ユーザ(例:foo)にスイッチする場合、su - foo
かsudo su - foo
のどちらかを使うだろう。
fooのパスワードを開示することなくスイッチさせるためには後者のsudo
を使わざるを得ないが、root権限は渡したくない場合がある。(rootへのスイッチは拒否したい場合など)
そのため、
- fooのパスワードを教えること無く
- fooへのみパスワード無しでスイッチでき
- ただしrootへはスイッチはさせない
ようにする必要がある。
やりかた1
例:ユーザhogeに対してパスワード無しでユーザfooへスイッチを許可する場合
/etc/sudoers
に以下を記述する。(visudo
コマンドで編集しましょう)
hoge ALL=(ALL) NOPASSWD: /bin/su - foo, /bin/su foo
この場合、ユーザhogeは自身がログインした後、以下のようにすればユーザfooへスイッチすることができる。
[hoge@localhost ~]$ sudo su - foo
[foo@localhost ~]$
もちろん、rootや別ユーザにスイッチすることは出来ないし、sudo権限で別コマンドを実行することもできない
[hoge@localhost ~]$ sudo su - root
ユーザー hoge は'/bin/su - root' を root として localhost.localdomain 上で実行することは許可されていません。すみません。
[hoge@localhost ~]$ sudo date
ユーザー hoge は'/bin/date' を root として localhost.localdomain 上で実行することは許可されていません。すみません。
やりかた2
やりかた1の場合、ユーザごとにエントリを記述する必要があるため手間である。
そのため、特定のグループへ権限を付与することもできる。
例:fooadminsグループに属しているユーザはパスワード無しでユーザfooへスイッチを許可する場合
1.fooadminsグループに必要な人を所属させる。
# groupadd fooadmins
# usermod -G fooadmins -a hoge
2./etc/sudoers
に以下を記述する。(visudo
コマンドで編集しましょう)
%fooadmins ALL=(ALL) NOPASSWD: /bin/su - foo, /bin/su foo
これでやり方1と同様に、fooadminsへ所属しているユーザのみがfooへスイッチすることができる。