PHP bashスクリプトからrootユーザー(すべての権限を持つ)で実行し、nobodyユーザー-phpデフォルトユーザーではない方法
それがSudovisudo後の私の出力です:
Defaults env_keep += "LINES COLUMNS"
Defaults env_keep += "LSCOLORS"
Defaults env_keep += "SSH_AUTH_SOCK"
Defaults env_keep += "TZ"
Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"
Defaults env_keep += "EDITOR VISUAL"
Defaults env_keep += "HOME MAIL"
#User privilege specification
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
Sudoを使用できます:
exec("Sudo /your/script");
パスワードプロンプトなしでスクリプトの実行を許可する必要があります。実行Sudo visudo
コンソールで、最後に次の文字列を追加します。
nobody ALL = NOPASSWD: /your/script
ファイルモードを適切に設定して、誰もこのスクリプトを変更したり、危険なコンテンツを(ルートコンソールで)スクリプトに入れたりできないようにする必要があります。
chown root:root /your/script
chmod 755 /your/script
Set-uidrootのプログラムを作ることができます。これにより、プログラムは常にrootとして実行されます。これはシェルスクリプトでは機能しないため、 スクリプトを呼び出すプログラム を使用する必要があります。
Linuxでは、通常、Sudo
を使用してこれを行います。スクリプトに多くの権限を与えないように、できるだけ具体的にするようにしてください。
Sudo
の使用方法の例: http://aplawrence.com/Basics/Sudo.html
nobody
を使用して、このスクリプトをSudo
ユーザーが呼び出せるようにする特定のルールを追加します。
私は最近、PHPが実際のBashシェルを取得して操作できるようにするプロジェクトを公開しました(ユーザーとして:Apache/www-データまたは必要に応じてroot)。ここで入手してください: https ://github.com/merlinthemagic/MTS
ダウンロードした後は、次のコードを使用するだけです。
$Shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $Shell->exeCmd('/full/path/to/script.sh');