sudoとsuコマンドの使い方


root権限での実行に用いられることが多い両者を改めて調べた

sudo

  • substitute user doの略称
  • 他の人誰かに代わって、コマンドを実行できる
  • 特定コマンドのみroot権限で実行するときに、利用されることが多い
  • sudoを実行するためには、sudoを実行できるuserとして登録されておく必要あり
  • sudoを実行するためには
    • etc/sudoersファイルに、sudoを実行できるuserとして登録しておく必要あり
    • このファイルを編集するには visudo コマンドを用いる
    • 記載方法によって、実行できるコマンドの限定、など細かい設定が可能

su

  • substitute user
  • 書式
    • su [option][username]
  • ユーザーを切り替えるコマンド
    • 引数でuserを指定しない場合、root userに切り替わる
    • root権限が必要なコマンドを実行する際に使用
    • exit コマンドを実行して、元のユーザーに戻る
      • exit コマンドを実行するまでは、元のユーザーに戻らない。root権限のままのため、注意が必要
    • 指定した場合、特定のuserに切り替わる(切り替え先のuserのpasswordを知っておく必要がある)
      • su USERNAME
  • -c
  • - オプションの指定の有無(-l- と同様)
    • - なし
      • ユーザー変更しても環境変数やホームディレクトリを引き継ぐ場合
    • - あり
      • 環境変数やホームディレクトリを引き継がない場合
      • 変更後のユーザーの設定が適用される
      • シェルを「ログインシェル」にする(ログイン時のスタートアップファイルを読み、環境変数を再設定する)

https://atmarkit.itmedia.co.jp/ait/articles/1611/24/news028.html https://codezine.jp/unixdic/w/su

- オプションの使い所

以下の通り、一般的には -をつけた方が良い模様

suでrootユーザーになった場合、変更前のユーザーの環境変数などがrootユーザーでの操作に悪影響を与えることがある。このため、rootとして作業する場合は、su -のように-を指定してsuを使うように説明されることがある。 https://news.mynavi.jp/techplus/article/20180207-linux_su/

参考)suとsudoの違い

sudo は

  • root のパスワードでなくてユーザーのパスワードを必要とする
  • sudo を許す許さないは管理者 root が決める
  • sudo でやったこと/やろうとして失敗したことは、すべてログに残る

su は substitute user ユーザーの置換ですので上記と状況が違い

  • root のパスワードを知っている必要がある
  • root のパスワードを知っている人が su することを禁じることができない
  • su 後はやりたいほうだい(ログが残らない)

UNIX において「システムデバイスは単にファイル」なので、任意のコマンドでシステムを破壊することができます。それこそ rm なら当然ですし dd でも、いや cat でもシステムを破壊することは可能です。知識がある人が権限を得てしまえば内側からはやりたい放題、破壊工作をしたくなったら su でも sudo でも止められません。そういう意味で

  • 攻撃者であれ、善意のユーザであれ root のパスワードを教えるってのは論外
  • 攻撃者になりそうな人には sudo 権限を与えない
  • 悪意の攻撃者でなく無能な味方が不注意でシステムを壊すことは防げない
  • が、そもそもそういう無能な味方には sudo 権限を渡さなきゃいい
  •  sudo ならば、ログが残る
    あたりの差は大きくて sudo のほうが安全なのは確かです。

https://ja.stackoverflow.com/questions/49070/sudoにはrootのパスワードが必要ないので意味がないのでは