Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Perintah Luaran sebagai Pengguna Khusus dalam PHP?

Bagaimana untuk Melaksanakan Perintah Luaran sebagai Pengguna Khusus dalam PHP?

DDD
DDDasal
2024-10-31 11:55:01961semak imbas

How to Execute External Commands as a Specific User in PHP?

Melaksanakan Perintah Luaran sebagai Pengguna Khusus dalam PHP

Apabila bekerja dengan persekitaran sisi pelayan, adalah perkara biasa untuk menghadapi situasi di mana anda perlu melaksanakan program baris perintah luaran daripada skrip PHP. Walau bagaimanapun, pengguna lalai di mana PHP berjalan mungkin tidak mempunyai kebenaran atau akses yang mencukupi kepada aplikasi tertentu.

Masalah

Pertimbangkan senario di mana anda menjalankan Apache pada localhost dan cuba mengawal main balik Rhythmbox daripada skrip PHP yang berjalan sebagai pengguna-www. Melaksanakan arahan rhythmbox-client --pause berfungsi dengan sempurna apabila dijalankan secara manual, tetapi gagal apabila dilaksanakan sebagai www-user kerana Rhythmbox tidak mengecam atau mengakses tika pengguna.

Penyelesaian

Satu yang berkesan penyelesaiannya ialah memanfaatkan arahan sudo, membolehkan anda melaksanakan program luaran sebagai pengguna tertentu. Ini melibatkan pengubahsuaian fail sudoers (visudo) untuk memberikan pengguna pelayan web (cth., wwwuser) kebenaran untuk menjalankan arahan tertentu:

wwwuser ALL=/usr/bin/rhythmbox-client

Ini menyekat keupayaan Apache untuk melaksanakan hanya arahan yang diperlukan, menghalang potensi risiko keselamatan .

Penyelesaian Lanjutan

Dalam kes khusus ini, Rhythmbox mungkin masih tidak mengenali tika pengguna kerana PHP berjalan sebagai pengguna-www. Untuk menangani masalah ini, buat skrip bash yang memanggil rhythmbox-client dan dapatkan DBUS_SESSION_BUS_ADDRESS daripada persekitaran pengguna yang melaksanakan:

<code class="bash">#! /bin/bash
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`
if [ "x$DBUS_ADDRESS" != "x" ]; then
        export $DBUS_ADDRESS
        /usr/bin/rhythmbox-client --pause
fi</code>

Skrip bash ini kemudiannya boleh dilaksanakan oleh PHP sebagai wwwuser, membolehkan anda mengawal main balik Rhythmbox sebagai pengguna anda daripada aplikasi PHP anda.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah Luaran sebagai Pengguna Khusus dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn