No.1
- 回答日時:
system関数で子プロセスでsudoしても、sudoで権限が変わるのはsudoが実行した子プロセスだけです。
system("sudo su user1")した場合、
1. PHP が sudo を起動する
2. sudo がroot権限で su user1 を起動する
3. su は権限をuser1に変えるが、suに他の引数がなく、入力も無いため、何もせずに終了。
という流れになります。呼び出し元のPHP実行環境側はユーザー権限は変わってません。
system関数を呼び出すたびに、毎回子プロセスが起動されますから、
次にsystem("whoami")しても、元の権限で実行されます。
sudoで「権限を変えてから何かのコマンドを実行する」場合は、
system("sudo -u user1 whoami");
といった形で、sudoに実行すべきコマンドを指定する必要があります。
あるいは、sudo で su は使えるが whoami を使えるようにしていないのなら、
system("sudo su user1 -c whoami");
という方法もあります。
ですが、sudo 経由で su を起動するのは回りくどいですし、一旦 root を経由するのはセキュリティ的にも非常に危険です。
sudo の設定で、ユーザー apache は user1 にはなれるが、rootにはなれないように設定してから、sudo から直接user1権限でコマンドを実行すべきです。
コメントどうもありがとうございます。
system("whoami")の出力結果はapacheです。
現在の環境では、whoamiにsudoをする必要はなさそうです。
ちなみに、
system("sudo -u user1 whoami")はエラーを生じますが、
system("sudo su user1 -c whoami")の出力結果はuser1です。
しかしながら、実際的にはユーザは変更されていないようです。
それはその直後にメールを発信してみたのですが、
発信元はapache@mydomain.domとなり、user1@mydomain.domとはなりませんでした。
(mydomain.domは所有ドメイン)
表面的ではなく、実効的にユーザを変更したい、というのが主旨なのです。
No.2ベストアンサー
- 回答日時:
> 表面的ではなく、実効的にユーザを変更したい、というのが主旨なのです。
それは根本的に考え方が間違えてます。
system 関数は、「子プロセスを作る」関数ですから、子プロセス側で実効ユーザーを変えるようなコマンドを実行したところで、呼び出し元であるPHP実行環境側のユーザーIDは変わりません。
セキュリティ的に、PHPの実行環境側の実効ユーザーIDを変更するような機能は提供されていません。そういうことは不可能です。
> system("sudo su user1 -c whoami")の出力結果はuser1です。
> しかしながら、実際的にはユーザは変更されていないようです。
これは当然の結果です。あくまで「whoamiコマンドをuser1権限で実行した」だけですから。
質問の「PHPからLinux(Fedora10)にアクセス」という意味の問題になりますが、
質問者さんが「Linux にアクセス」というのが、「権限を変えてコマンドを実行したい」のだったら、
実行したいコマンドごとにsudoを実行してください。
繰り返しになりますが、PHPの実行環境側の実効ユーザーIDを変更することは不可能です。
> 発信元はapache@mydomain.domとなり、user1@mydomain.domとはなりませんでした。
単にメールの発信元を変えたいだけでしたら、実効ユーザを変えてからメール送信なんてしなくても、
正しいヘッダを設定して送信するだけで可能です。
メール送信に mail 関数か、mb_send_mail 関数を使ってるのであれば、第4引数に追加ヘッダを指定できますから、
mb_send_mail($to, $subject, $message, "From: user1@mydomain.dom", "-fuser1@mydomain.dom");
とすれば、送信者を変えてメール送信できます。
度々ご回答いただきありがとうございました。
mtaka2さんが仰るsudoの概念が少しだけでも分かったような気がします。
試行錯誤だけでは到底分かり得ない問題で、貴重なご説明を賜ることができて、
とても嬉しいです。
No.3
- 回答日時:
なんか書き込みに失敗?したみたいなので再挑戦。
返答がダブってしまったらごめんなさい。
> 表面的ではなく、実効的にユーザを変更したい、というのが主旨なのです。
それは根本的に考え方が間違えてます。
system 関数は、「子プロセスを作る」関数ですから、子プロセス側で実効ユーザーを変えるようなコマンドを実行したところで、呼び出し元であるPHP実行環境側のユーザーIDは変わりません。
セキュリティ的に、PHPの実行環境側の実効ユーザーIDを変更するような機能は提供されていません。そういうことは不可能です。
> system("sudo su user1 -c whoami")の出力結果はuser1です。
> しかしながら、実際的にはユーザは変更されていないようです。
これは当然の結果です。あくまで「whoamiコマンドをuser1権限で実行した」だけですから。
質問の「PHPからLinux(Fedora10)にアクセス」という意味の問題になりますが、
質問者さんが「Linux にアクセス」というのが、「権限を変えてコマンドを実行したい」のだったら、
実行したいコマンドごとにsudoを実行してください。
繰り返しになりますが、PHPの実行環境側の実効ユーザーIDを変更することは不可能です。
> 発信元はapache@mydomain.domとなり、user1@mydomain.domとはなりませんでした。
単にメールの発信元を変えたいだけでしたら、実効ユーザを変えてからメール送信なんてしなくても、
正しいヘッダを設定して送信するだけで可能です。
メール送信に mail 関数か、mb_send_mail 関数を使ってるのであれば、第4引数に追加ヘッダを指定できますから、
mb_send_mail($to, $subject, $message, "From: user1@mydomain.dom", "-fuser1@mydomain.dom");
とすれば、送信者を変えてメール送信できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- PHP プログラミング教えてください。 3 2022/10/12 10:37
- MySQL Mac です。ローカルホストの phpMyAdmin にアクセスできません。 1 2023/06/06 17:14
- UNIX・Linux fessカスタマイズ 1 2022/09/27 17:29
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- PHP バージョン情報の取得方法について 1 2023/03/15 11:56
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- UNIX・Linux raspberrypi に bluealsaを入れようにも見つからない 1 2023/02/04 10:55
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
ubuntuのシャットダウンが進ま...
-
Ubuntu20.04からUbuntu22.04に...
-
lubuntuでフォントをインストー...
-
bashでシングルクォート内の変...
-
ssl_error_logのエラー内容(AH...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu系とCentOS系の違いはな...
-
Windowsのローカルディレクトリ...
-
ホストオンリーアダプタで接続...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
disktopのアイコン
-
Ubuntuで数字だけのユーザーア...
-
プログラミングPC、LinuxのOSパ...
-
Rasberry pi のオンボードNICの...
-
新しく買ったWin11のPCでLinux...
-
redmineにメールを飛ばす方法
-
ssl_request_logの必要性について
-
ログにserver reached MaxReque...
-
Ubuntu on Xorgのログインについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashでシングルクォート内の変...
-
ubuntu(linux)のシャットダウン...
-
AWSでSSH接続をしたいのですが...
-
Linuxのパーティション番号の変...
-
ubuntuで デイスク/deb/loopと...
-
自作のウェブサイトを友人に見...
-
ubuntuのシャットダウンが進ま...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
Ubuntu系とCentOS系の違いはな...
-
Ubuntu on Xorgのログインについて
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Ubuntuで数字だけのユーザーア...
-
linuxサーバーのキャッシュをク...
-
shellscript内のコマンドを、su...
-
ssl_request_logの必要性について
-
ubuntuのサーバー(virtual box)...
-
Kali Linuxで起動できない - Mi...
-
ホストオンリーアダプタで接続...
おすすめ情報