Apa yang Anda maksud dengan pertanyaan "adakah nama lain"? Sysadmin dapat membuat pengguna dengan nama apapun yang mereka inginkan.
Álvaro González
Nama default lainnya untuk apa pun yang mungkin dianggap sebagai server; apache, tidak ada, www-data, dll ..
Wesley
1
Jika saya ingat dengan benar, pengguna sistem biasanya memiliki UID kecil (di bawah 1024?). Itu mungkin petunjuk yang lebih baik untuk apa pun yang ingin Anda capai.
Namun jika Anda menjalankan mode aman (yang sering terjadi ketika exec dinonaktifkan), maka tidak mungkin proses PHP Anda berjalan di bawah apa pun kecuali default www-dataatau apacheakun.
Ada komentar di get_current_user()halaman manual yang menunjukkan pendekatan ini. Mulai dari PHP 5.4, dapat disingkat menjadi ini:print posix_getpwuid(posix_geteuid())['name'];
Tidak dapat benar-benar menggunakan exec atau sistem atau fungsi passthru semacam itu.
Wesley
Hanya yang saya butuhkan. get_current_user () bukanlah yang saya butuhkan.
dgig
5
Mungkin berguna untuk beberapa pengguna: jika Anda menjalankan ini dari antarmuka baris perintah, Anda akan mendapatkan pengguna yang menjalankan perintah, dan bukan pengguna PHP.
Bram Vanroy
@BramVanroy lalu di mana Anda harus menjalankannya? = |
Andrew
@BramVanroy - Saya ingin memahami komentar Anda, tetapi saya tidak. jika Anda menjalankannya dari cli, bukankah Anda yang memiliki proses php saat ini? Dalam kasus ini, siapa pengguna PHP selain Anda?
Jika Anda membuat file, pemiliknya adalah pengguna PHP.
Ini juga mungkin dapat dijalankan dengan salah satu fungsi file sementara seperti tempnam(), yang membuat file acak di direktori sementara dan mengembalikan nama file itu. Jika ada masalah karena sesuatu seperti izin, open_basediratau mode aman yang mencegah penulisan file, biasanya, direktori temp akan tetap diizinkan.
Nice: satu-satunya solusi non-hak istimewa di sini untuk juga menemukan grup yang menjalankan PHP.
tanius
2
peretasan yang layak, layak mendapatkan tempat yang lebih tinggi
Abraham Philip
1
@RavinderPayal Kecuali Anda menggunakan fungsi tempnam seperti yang saya sarankan. Hampir dijamin bahwa pengguna dapat menulis ke direktori sementara tanpa memandang siapa mereka. Tanpa bisa menulis ke direktori sementara, Anda bisa sementara memberikan izin folder 777 dan jika diaktifkan, nonaktifkan selinux untuk jalur itu.
Jonathan Kuhn
1
@RavinderPayal ada fungsi tambahan untuk mengembalikan jalur temp. Jadi $temp_file = tempnam(sys_get_temp_dir(), 'TMP');akan membuat file sementara di direktori temp di sebagian besar sistem apa pun. Anda kemudian dapat menggunakan file itu untuk mendapatkan pengguna / grup. Saya menyerahkan sebagian kepada pengguna untuk mencari tahu.
Jonathan Kuhn
20
Rincian lebih lanjut akan berguna, tetapi dengan asumsi itu adalah sistem linux, dan dengan asumsi php berjalan di bawah apache, itu akan berjalan seperti apa pun yang dijalankan oleh apache pengguna.
Cara mudah untuk memeriksa (sekali lagi, dengan asumsi beberapa lingkungan seperti unix) adalah dengan membuat file php dengan:
<?php
print shell_exec('whoami');?>
yang akan memberi Anda pengguna.
Untuk instance AWS saya, saya mendapatkan apachesebagai output saat menjalankan skrip ini.
Mungkin berguna untuk beberapa pengguna: jika Anda menjalankan ini dari antarmuka baris perintah, Anda akan mendapatkan pengguna yang menjalankan perintah, dan bukan pengguna PHP.
Bram Vanroy
12
saya akan menggunakan:
lsof -i
lsof -i | less
lsof -i | grep :http
semua ini. Anda dapat mengetikkan em di baris perintah ssh Anda dan Anda akan melihat pengguna apa yang mendengarkan layanan apa.
Tidak dapat benar-benar menggunakan exec atau sistem atau fungsi passthru semacam itu.
Wesley
@Wesley: jadi itu tidak mungkin.
kejadian
2
Mungkin berguna untuk beberapa pengguna: jika Anda menjalankan ini dari antarmuka baris perintah, Anda akan mendapatkan pengguna yang menjalankan perintah, dan bukan pengguna PHP.
dan variabel / nilai manakah dalam keluaran tersebut yang kita cari?
Andrew
Saya yakin Anda sudah menemukan ini tetapi cari "pengguna" di halaman itu?
CRTLBREAK
0
Dalam pengaturan saya, saya ingin memeriksa apakah proses saat ini memiliki izin untuk membuat folder, subfolder dan file sebelum saya memulai proses dan menyarankan solusi jika sepertinya saya tidak bisa. Saya ingin menjalankan stat(<file>)berbagai hal untuk memastikan izin sesuai dengan proses yang sedang berjalan (saya menggunakan php-fpm sehingga bervariasi tergantung pada kolam).
Solusi berbasis posix yang diberikan Mario di atas, tampaknya sempurna, namun tampaknya ekstensi posix dinonaktifkan sehingga saya tidak dapat melakukan hal di atas dan karena saya ingin membandingkan hasilnya dengan respons dari menjalankan stat () yang berjalan whoamidi shell terpisah juga tidak membantu (saya perlu uid dan gid bukan nama pengguna).
Namun saya menemukan petunjuk yang berguna, saya bisa stat(/proc/self)dan stat(/proc/self/attr)dan melihat uid dan gid dari file tersebut.
Penyorotan kode di atas tidak akurat, silakan salin & tempel di editor favorit Anda dan lihat sebagai kode PHP, atau simpan dan uji sendiri.
Seperti yang mungkin Anda ketahui, get_current_user()mengembalikan pemilik "skrip yang sedang berjalan" - jadi jika Anda tidak "menyisipkan" skrip di server ke pengguna-server-web, kemungkinan besar skrip itu "bukan siapa-siapa", atau jika pengembang- pengguna ada di OS yang sama, itu akan menampilkan nama pengguna itu.
Untuk mengatasi ini, kami membuat file dengan proses yang sedang berjalan. Jika Anda hanya require()memasukkan ini ke dalam skrip yang sedang berjalan, ini akan mengembalikan sama seperti skrip induk seperti yang disebutkan; jadi, kita perlu menjalankannya sebagai permintaan terpisah agar berlaku.
Alur proses
Untuk membuatnya efektif, pertimbangkan untuk menjalankan pola desain yang menggabungkan "mode-runtime", jadi ketika server dalam "mode-pengembangan atau mode-uji" maka hanya server yang dapat menjalankan fungsi ini dan menyimpan keluarannya di suatu tempat dalam penyertaan , -atau hanya teks biasa atau database, atau yang mana saja.
Tentu saja Anda dapat mengubah beberapa keterangan kode di atas sesuai keinginan Anda untuk membuatnya lebih dinamis, tetapi logikanya adalah sebagai berikut:
tentukan referensi unik untuk membatasi gangguan dengan pengguna lain
menentukan jalur file lokal untuk menulis file sementara
tentukan url / jalur publik untuk menjalankan file ini dalam prosesnya sendiri
tulis file php sementara yang menampilkan nama pemilik skrip
dapatkan hasil dari skrip ini dengan membuat permintaan padanya
hapus file karena tidak lagi diperlukan - atau tinggalkan jika Anda mau
mengembalikan output dari permintaan sebagai nilai-kembali dari fungsi
Jawaban:
Jika tersedia, Anda dapat menyelidiki akun pengguna saat ini dengan
posix_geteuid
dan kemudian mendapatkan nama pengguna denganposix_getpwuid
.Namun jika Anda menjalankan mode aman (yang sering terjadi ketika exec dinonaktifkan), maka tidak mungkin proses PHP Anda berjalan di bawah apa pun kecuali default
www-data
atauapache
akun.sumber
get_current_user()
halaman manual yang menunjukkan pendekatan ini. Mulai dari PHP 5.4, dapat disingkat menjadi ini:print posix_getpwuid(posix_geteuid())['name'];
<?php echo exec('whoami'); ?>
sumber
Jenis cara mundur, tetapi tanpa exec / system:
Jika Anda membuat file, pemiliknya adalah pengguna PHP.
Ini juga mungkin dapat dijalankan dengan salah satu fungsi file sementara seperti
tempnam()
, yang membuat file acak di direktori sementara dan mengembalikan nama file itu. Jika ada masalah karena sesuatu seperti izin,open_basedir
atau mode aman yang mencegah penulisan file, biasanya, direktori temp akan tetap diizinkan.sumber
$temp_file = tempnam(sys_get_temp_dir(), 'TMP');
akan membuat file sementara di direktori temp di sebagian besar sistem apa pun. Anda kemudian dapat menggunakan file itu untuk mendapatkan pengguna / grup. Saya menyerahkan sebagian kepada pengguna untuk mencari tahu.Rincian lebih lanjut akan berguna, tetapi dengan asumsi itu adalah sistem linux, dan dengan asumsi php berjalan di bawah apache, itu akan berjalan seperti apa pun yang dijalankan oleh apache pengguna.
Cara mudah untuk memeriksa (sekali lagi, dengan asumsi beberapa lingkungan seperti unix) adalah dengan membuat file php dengan:
yang akan memberi Anda pengguna.
Untuk instance AWS saya, saya mendapatkan
apache
sebagai output saat menjalankan skrip ini.sumber
Anda dapat mencoba menggunakan backticks seperti ini:
sumber
saya akan menggunakan:
semua ini. Anda dapat mengetikkan em di baris perintah ssh Anda dan Anda akan melihat pengguna apa yang mendengarkan layanan apa.
Anda juga dapat pergi dan memeriksa file ini:
dan cari baris ini:
untuk memfilter data file envars, Anda dapat menggunakan grep:
sumber
grep "APACHE_RUN_" /etc/apache2/envvars
bekerja dengan baik, terima kasih.exec('whoami')
akan melakukan inisumber
Langsung dari cangkang Anda dapat menjalankan:
sumber
tambahkan file info.php ke direktori berikut - direktori http / apache default Anda - biasanya / var / www / html
dengan isi sebagai berikut
Kemudian httpd / apache restart pergi ke direktori html default Anda http://enter.server.here/info.php
akan memberikan seluruh silsilah php!
sumber
Dalam pengaturan saya, saya ingin memeriksa apakah proses saat ini memiliki izin untuk membuat folder, subfolder dan file sebelum saya memulai proses dan menyarankan solusi jika sepertinya saya tidak bisa. Saya ingin menjalankan
stat(<file>)
berbagai hal untuk memastikan izin sesuai dengan proses yang sedang berjalan (saya menggunakan php-fpm sehingga bervariasi tergantung pada kolam).Solusi berbasis posix yang diberikan Mario di atas, tampaknya sempurna, namun tampaknya ekstensi posix dinonaktifkan sehingga saya tidak dapat melakukan hal di atas dan karena saya ingin membandingkan hasilnya dengan respons dari menjalankan stat () yang berjalan
whoami
di shell terpisah juga tidak membantu (saya perlu uid dan gid bukan nama pengguna).Namun saya menemukan petunjuk yang berguna, saya bisa
stat(/proc/self)
danstat(/proc/self/attr)
dan melihat uid dan gid dari file tersebut.Harapan yang membantu orang lain
sumber
Anda dapat menggunakan perintah ini:
atau
atau
atau
atau
sumber
Saya biasanya menggunakan
Saya akan senang jika itu membantu Anda
sumber
get_current_user() - Gets the name of the owner of the current PHP script
- bukan pengguna yang menjalankan proses PHP.sumber
echo $_SERVER["USER"];
berfungsi tetapi memberikan nama pengguna yang masuk saat ini di SSH.Usul
Sedikit terlambat, tetapi meskipun berikut ini adalah solusi, itu menyelesaikan persyaratan karena ini berfungsi dengan baik:
Deskripsi
Penyorotan kode di atas tidak akurat, silakan salin & tempel di editor favorit Anda dan lihat sebagai kode PHP, atau simpan dan uji sendiri.
Seperti yang mungkin Anda ketahui,
get_current_user()
mengembalikan pemilik "skrip yang sedang berjalan" - jadi jika Anda tidak "menyisipkan" skrip di server ke pengguna-server-web, kemungkinan besar skrip itu "bukan siapa-siapa", atau jika pengembang- pengguna ada di OS yang sama, itu akan menampilkan nama pengguna itu.Untuk mengatasi ini, kami membuat file dengan proses yang sedang berjalan. Jika Anda hanya
require()
memasukkan ini ke dalam skrip yang sedang berjalan, ini akan mengembalikan sama seperti skrip induk seperti yang disebutkan; jadi, kita perlu menjalankannya sebagai permintaan terpisah agar berlaku.Alur proses
Untuk membuatnya efektif, pertimbangkan untuk menjalankan pola desain yang menggabungkan "mode-runtime", jadi ketika server dalam "mode-pengembangan atau mode-uji" maka hanya server yang dapat menjalankan fungsi ini dan menyimpan keluarannya di suatu tempat dalam penyertaan , -atau hanya teks biasa atau database, atau yang mana saja.
Tentu saja Anda dapat mengubah beberapa keterangan kode di atas sesuai keinginan Anda untuk membuatnya lebih dinamis, tetapi logikanya adalah sebagai berikut:
sumber
simpan sebagai info.php dan
buka info.php di browser Anda
ctrl + f lalu ketik salah satu dari ini:
Anda dapat melihat pengguna dan apache grup berjalan sebagai.
sumber
http://php.net/manual/en/reserved.variables.server.php
Pengguna terotentikasi
sumber