Mencari tahu apa yang dijalankan pengguna Apache?


212

Saya ingin mengamankan direktori unggah file di server saya seperti yang dijelaskan dengan indah di sini, tetapi saya punya satu masalah sebelum saya dapat mengikuti instruksi ini. Saya tidak tahu pengguna berjalan seperti apa Apache.

Saya telah menemukan saran bahwa Anda dapat mencari di httpd.conf dan akan ada baris "Pengguna", tetapi tidak ada baris seperti itu di file httpd.conf saya, jadi saya kira Apache berjalan sebagai pengguna default. Tapi aku tidak tahu apa itu.

Jadi, pertanyaan saya adalah:

  • bagaimana cara mengetahui apa pengguna default itu
  • saya harus mengubah pengguna default
  • jika jawabannya adalah ya dan saya mengubah pengguna default dengan mengedit httpd.conf, apakah ada kemungkinan untuk mengacaukan sesuatu?

Terima kasih!


12
mengapa pertanyaan ini tidak diturunkan? Ya, itu telah diperbarui karena telah dijawab di mana saja, tetapi saya melihat tidak perlu untuk memilih? Itu pertanyaan yang sangat bagus? Mungkin pemilih bawah kita mau menambahkan komentar yang konstruktif tentang ini?
Bryan

2
Anda mungkin ingin memposting pembaruan itu sebagai jawaban, dan menerimanya, karena Anda saat ini sedang dalam antrian Belum Dijawab.
Fahad Sadah

7
+1 karena diberitahukan di StackOverflow; beberapa pengguna tampaknya ngotot ingin lari dari pengguna baru
wruckie

Pertanyaan terkait tidak ada lagi
pal4life

Pertanyaan selanjutnya: apa yang harus dilakukan karena salah satu dari dua penggunanya, suka rootdan www-data. Bagaimana Anda memberi izin kepada kelompok Apache "benar" untuk mengakses sesuatu?

Jawaban:


228

ps aux | egrep '(apache|httpd)' biasanya akan menunjukkan apache berjalan seperti apa.

Biasanya Anda tidak perlu mengubah pengguna default, "tidak ada" atau "apache" biasanya adalah pengguna yang baik. Selama itu bukan "root";)

sunting: perintah yang lebih akurat untuk menangkap binari apache juga


42
Yup, atau itu akan menjadi www-data di Ubuntu.
gravyface

10
... dan Debian. :)
cubuspl42

7
Perintah itu menunjukkan kepada saya daftar hal-hal, kebanyakan dari apachetetapi 1 dari rootjuga.
Pengguna

2
Saya memiliki 3 proses ( /usr/sbin/apache2 -k start), satu pengguna rootdan dua lainnya www-data. Haruskah saya khawatir?
zundi

3
@zundi, layanan dimulai sebagai root untuk melakukan hal-hal seperti ikat ke port yang dicadangkan (mis. 80 dan 443). Kemudian mulai apa pun jumlah proses yang dikonfigurasi, untuk melakukan pekerjaan server web, dan tugas lainnya, sebagai pengguna yang ditentukan. Dengan cara itu permintaan ditangani oleh proses yang tidak diistimewakan. Anda akan melihat bahwa ID induknya (PPID) sama untuk semua proses lainnya. Gagasan itu dengan menjadi PID untuk satu proses yang berjalan sebagai root.
Kevin

41

Anda dapat mencoba perintah berikut:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

1
Saya suka jawaban ini, lebih baik (lebih umum) daripada jawaban yang paling banyak dipilih. Terima kasih
pgr

14

Gunakan apachectl -S, yang akan menampilkan sesuatu pengguna dan grup Apache, sesuatu seperti ini:

User: name="_www" id=70
Group: name="_www" id=70

Terima kasih, pada mac saya, saya melihat apache berjalan sebagai '_www'.
Merkuri

Ini adalah jawaban yang baik, karena itu adalah satu perintah yang memberi tahu Anda lebih banyak tentang server web Anda yang sedang berjalan dan menyajikannya dengan cara yang komprehensif.
kontur

9

Menurut ubuntuforums.org , di Ubuntu pengguna default untuk apache2 adalah www-data.

Terlihat benar di Ubuntu 13.10 Cakep.


Dari Lars Noodén di forum di atas.

Untuk memastikan apa yang [pengguna] benar-benar set untuk, periksa file konfigurasi yang sebenarnya. File payung, apache2.confakan memiliki sesuatu seperti berikut ini,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Itu adalah referensi ke variabel lingkungan yang ditetapkan /etc/apache2/envvars. mod_suexecjuga memungkinkan skrip untuk dijalankan sebagai pengguna dan grup yang berbeda.

Untuk menemukan host virtual apa pun, yang dapat menggunakan pengguna alternatif, grup, atau keduanya, periksa konfigurasi.

$ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf

Untuk distribusi berbasis Red Hat, biasanya (biasanya penggunanya yang menjalankan httpd apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

8

Saya tahu bahwa ini adalah posting lama, tetapi masih terdaftar sebagai belum dijawab, jadi saya akan memberikan saran. Jika Anda tidak dapat menemukan pengguna atau grup yang menjalankan Apache, mungkin coba buka file httpd.conf. Seharusnya ada entri di sana untuk "Pengguna" dan "Grup". Anda tidak hanya dapat melihat pengguna mana yang seharusnya dijalankan oleh Apache, tetapi Anda dapat mengubahnya jika Anda merasa perlu melakukannya.


7

Anda dapat memasukkan satu baris kode dalam skrip PHP Anda:

echo exec('whoami');

8
Tonton di sini, ini menunjukkan pengguna yang menjalankan PHP di bawah, bukan pengguna Apache. Jika menggunakan mod_php ini sama tetapi jika, seperti sekarang sangat umum, Anda menggunakan sesuatu yang lain (seperti php_fpm) mereka dapat dengan mudah berbeda.
benz001

5

Kode ini akan - lebih atau kurang - secara alfabetis mencantumkan semua pengguna non-root yang menjalankan proses yang mengandung apache(atau yang namanya berisi apache)

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq

Daftar ini mungkin akan menyertakan pengguna yang menjalankan proses seperti 'grep apache', seperti diri Anda yang bagus.
mwfearnley

4
  • Untuk mengetahui pengguna, Anda cukup menggunakan ps aux | grep apachesaat sedang berjalan.
  • Anda tidak perlu, tetapi jika Apache berjalan sebagai root ada masalah keamanan.
  • Ketiga, mengubah pengguna Apache akan mengubah haknya untuk mengakses beberapa direktori. Anda perlu memastikan bahwa / var / www (atau di mana pun Anda memiliki situs web Anda) dapat diakses oleh pengguna dan grup baru.
  • Pada sistem yang saya lihat, apache selalu diinstal menggunakan apache: apache (atau serupa) sebagai pengguna dan grup, jadi mungkin harus sudah diatur seperti itu.

CATATAN: Ini adalah jawaban yang sama yang saya berikan di Stackoverflow .


2

Atau Anda dapat memeriksa file konfigurasi apache dan mencari pemilik & grup.


2

Seperti yang disarankan oleh Noyo di sini :

APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

Lalu:

echo $APACHE_USER

1
Dapatkan pengguna (ubuntu command-line): echo $ APACHE_USER
Jadeye

1

Pendekatan alternatif, setidaknya untuk distro berbasis Debian / Ubuntu, adalah dengan menggunakan metode yang sama yang dilakukan Apache untuk mengatur pengguna dan grupnya: sumber/etc/apache2/envvars !

$ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")"
www-data

Jika Anda ingin menjadi mewah, Anda dapat menekan kesalahan jika file tidak ditemukan, dan memberikan nilai default:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     ga ada yang  
)
$ echo "$ apacheuser"
tak seorangpun

1

Saya menemukan sebagian besar solusi yang ditawarkan di sini adalah sistem atau konfigurasi khusus (khususnya, sebagian besar solusi tidak bekerja sama sekali pada MacOS) dan beberapa bergantung pada pengguna yang mengetahui di mana file konfigurasi Apache berada di tempat pertama .. .

Jadi saya sedikit menipu dan membiarkan Apache sendiri memberi tahu saya apa apa.

Perintah sederhana apachectl -Sakan memberi tahu Anda apa yang perlu Anda ketahui tentang instance Apache yang sedang berjalan, dan hasilnya dapat diuraikan dengan cukup mudah. Inilah solusi saya, yang saya gunakan di bagian atas beberapa bashskrip untuk menentukan berbagai hal yang mungkin saya butuhkan pada waktu tertentu ...

# Store the results so we don't have to keep calling apachetl...
astatus=`apachectl -S`

# Now grab whatever you want from the result... 
HTTPD_ROOT_DIR=$(expr "`echo "$astatus" | grep ServerRoot`" : ".*\"\(.*\)\".*")
HTTPD_DOC_DIR=$(expr "`echo "$astatus" | grep \"Main DocumentRoot\" `" : ".*\"\(.*\)\".*")
HTTPD_USER=$(expr "`echo "$astatus" | grep \"User:.*name=\" `" : ".*\"\(.*\)\".*")
HTTPD_GROUP=$(expr "`echo "$astatus" | grep \"Group:.*name=\" `" : ".*\"\(.*\)\".*")

Nilai-nilai ini kemudian dapat digunakan sebagai berikut:

echo $HTTPD_ROOT_DIR // /etc/httpd
echo $HTTPD_DOC_DIR  // /var/www
echo $HTTPD_USER     // www-data
echo $HTTPD_GROUP    // www-data

0

Saya menemukan perintah ini di dokumen CakePHP .

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

Sekarang HTTPDUSERmemegang nama pengguna dari pengguna yang menjalankan server, echo $HTTPDUSERdalam kasus saya keluaran www-data- menggunakan rlerdorf / php7dev .


0

Gunakan lsof dan lulus port apache mendengarkan sebagai argumen. Lihat kolom USER untuk menjalankan apache pengguna.

# lsof -i :80
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd     21058   root    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     21111 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     24915 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)

Ini mungkin lambat ketika Anda memiliki beberapa filehandles 100k terbuka dan / atau server yang cukup sibuk.
Dennis Nolte
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.