LoginSignup
18
16

More than 5 years have passed since last update.

sudoでroot権限は渡さずに別ユーザにパスワード無しでスイッチすることを許可する

Posted at

やりたいこと

別ユーザ(例:foo)にスイッチする場合、su - foosudo 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へスイッチすることができる。

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16