私はこれを理解しようと半日を費やしており、多くの調査を行ってきました。また、このトピックに関する既存の議論の多くにも精通しています。たとえば、次のようなものです: How to run PHP exec() as root?
残念ながら、私が見つけた提案はどれも私にはうまくいかないようです。
まず第一に、私は仕様に何かを書いているので、これを避けることはできません。また、すべてのマシンは、インターネットに接続されていないプライベート ネットワーク上に存在します。ある程度のセキュリティを確保することは重要ですが、ほとんどの場合、間違いを防ぐ必要があります。私の目的は、いくつかの「シンサーバー」を構成することです。PHP スクリプトを使用して、ネットワーク構成 (静的または DHCP) を変更し、ネットワークを再起動できるようにする必要があります。
私が最初に試みたのは、SUID ルートである C プログラムを作成することでした。ネットワーク構成ファイルの読み取り、変更、および書き込みを行います。通常のユーザーとして実行すると、問題なく動作し、ルートが所有するファイルにアクセスして変更できます。しかし、PHP スクリプトから実行すると、アクセス エラーが発生します。どうやら Apache が SUID root を何らかの形で防いでいるようです。
他の議論からの提案に基づいて、「sudo」メソッドを試しました。一時的に、これを /etc/sudoers に追加しました: apache ALL=(ALL) NOPASSWD: ALL
私が得るエラーはこれです:sudo:監査システムを開くことができません:許可が拒否されました
ロシア語のこのページによると、これは、RHEL (私は Fedora を使用しています) などのシステムがデフォルトで sudoers に対して requiretty になっているために発生しています。そこで、次の行を /etc/sudoers に追加しました: Defaults !requiretty
それでも同じエラーが発生します。sudo: 監査システムを開くことができません: 権限が拒否されました
私はここで完全に困惑しています。つまり、Apache 自体を root で実行したい場合を除き、何よりも不便です。
誰でもここで何か提案できますか? 自分のやろうとしていることがおかしいことに気づきます。また、Fedora マシンをリモートで構成するための既存のシステムを教えてくれる人もいるでしょう (思いついたので、今すぐ調べてみます)。
ところで、私は SELinux を実行しています。これは、Fedora 15 がデフォルトで構成されているためです。
ありがとう。
編集:
このチュートリアルを見つけました:
http://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/
残念ながら、「setsebool httpd_disable_trans 1」を実行すると、次のエラーが表示されます:
アクティブなブール値を変更できませんでした: ブール値が無効です
また、存在しない「/etc/selinux/targeted/booleans」を直接編集してapacheを再起動してみましたが、やはりダメでした。