質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

5回答

1713閲覧

sudo -sでrootになれる理由

frazz

総合スコア14

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/06/29 06:22

タイトルのとおりです。

https://qastack.jp/ubuntu/34329/su-command-authentication-failure

ここを読んで思ったのですが、sudo -s または sudo -i を使用すると一般ユーザからrootユーザになれる理由がわかりません。

-s, --shell 環境変数 SHELL が設定されていれば、そのシェルを、 設定されていなければ、パスワード・データベースで sudo を 起動するユーザのシェルとして指定されているシェルを実行する。 コマンドが指定されている場合は、それをシェルに渡し、シェルの -c オプションを使って実行する。コマンドが指定されていない場合は、 対話的シェルを開く。

man sudo(8)を読んでも、sudoを実行するユーザのシェルが実行されるだけで、これが「rootになる」という挙動と繋がっているのかがわかりません。

ご説明できる方いらっしゃいますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

man sudo(8)を読んでも、sudoを実行するユーザのシェルが実行されるだけで、これが「rootになる」という挙動と繋がっているのかがわかりません。

全部読んでいますか?

sudo を使用すると、許可されたユーザが、セキュリティポリシーの設定の範囲内で、スーパーユーザや他のユーザに変身して、command を実行することが可能になる。

-u user, --user=user

コマンドをデフォルトの変身対象ユーザ (通常は root) 以外のユーザとして実行する。

これらを読むと、-uオプションを使わない限り、rootユーザーとして実行することが分かります。

rootのshellを実行することによってターミナル上ではrootになれているように見えるが、

「rootになれているように見える」じゃなくて、プロセスの実ユーザーがrootなので、rootになっています。

実際はrootにログインしているわけではないということでしょうか?

-sだとシェルの初期化ファイルの何をどう読むかはログインした場合とは異なります。-iを付けると、ログインしたのと同じようシェルの初期化ファイルを読みますので、環境変数はログインしたのとほぼ同じになります(sudo関連の環境変数が追加される)。

OSとしてのログイン処理を行っているわけじゃ無いので、ログインの記録ファイルutmp``wtmpは更新されませんので、whoで見ると元のユーザーのままです。

投稿2020/06/29 07:52

otn

総合スコア84503

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

frazz

2020/06/29 08:29

> これらを読むと、-uオプションを使わない限り、rootユーザーとして実行することが分かります。 sudo -uとsuの違いがわからずsudo -uの意義がわからなかったのですが、 rootから`sudo -u [一般ユーザ] cat /etc/sudoers`したら許可がありませんとエラーが返ってきました。rootにログインしていながらrootでできることができない、権限がないというのはこういうことなんですね。 > OSとしてのログイン処理を行っているわけじゃ無いので、ログインの記録ファイルutmp``wtmpは更新されませんので、whoで見ると元のユーザーのままです。 こちらも確認できました。
otn

2020/06/29 08:51

> rootから`sudo -u [一般ユーザ] cat /etc/sudoers`したら許可がありませんとエラーが返ってきました。 だと、指定した一般ユーザー権限で cat が実行されますので、読めません。
guest

0

実質的に root と同じ権限になるのであって、
「rootになる」ということとは微妙に異なります

sudo を実行すると、通常、 /etc/sudoers という設定ファイルに従って実行されます
このファイルには、次のような記述があります:

ini

1# Allow members of group sudo to execute any command 2%sudo ALL=(ALL:ALL) ALL

これは、sudo コマンドを実行したとき、sudo グループに属しているユーザーであれば
すべての権限を持っている状態となることを示しています

参考: sudoers覚え書き - Qiita

そのため、権限は root ですが、root の持つ環境変数などを参照するには
-i オプションが必要となります:

sudo でスイッチ後のユーザーの環境変数を使う方法 - bacchi.me

投稿2020/06/29 07:01

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

man sudo(8)を読んでも、sudoを実行するユーザのシェルが実行されるだけで

そのとおりです。root権限でコンソールを使うことはできますが、厳密にはrootにはなれません。

-i パスワード・データベースの変身対象ユーザの項目でログイン・シェルとして指定されているシェルを実行する。すなわち、 .profile や .login といったログイン用のリソース・ファイルが、 シェルによって読み込まれることになる。コマンドを指定すると、 それがシェルに渡され、シェルの -c オプションを使って実行される。 コマンドを指定しない場合は、対話的シェルが起動される。sudo は、 シェルを実行する前に、変身対象ユーザのホームディレクトリに移動しようとする。 コマンドの実行は、ユーザが普通にログインしたときの環境とほぼ同じ環境で行われる。 sudoers ポリシーを使用している場合に、 -i オプションがコマンドの実行環境にどんな影響を与えるかについては、 sudoers(5) のマニュアルの「コマンド環境」セクションに説明がある。

投稿2020/06/29 06:30

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

suはユーザを変更するコマンドで、sudoはそのユーザの権限を一時的に使ってコマンドを実行するコマンドなので、rootのshellを実行することによってターミナル上ではrootになれているように見えるが、実際はrootにログインしているわけではないということでしょうか?

投稿2020/06/29 06:28

編集2020/06/29 06:53
frazz

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問の意図がわかりかねますが、suできなくでもsudoでroot権限の実行ができるわけですか?
OSにもよりますがsudoersでそう設定されているからでは?

投稿2020/06/29 06:28

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問