Apache'nin hangi kullanıcı olarak çalıştığını öğrenmek?


212

Sunucumda güzel bir şekilde tanımlandığı şekilde dosya yükleme dizinini güven altına almak istiyorum ancak bu talimatları izlemeden önce bir sorunum var. Apache'nin hangi kullanıcı olarak çalıştığını bilmiyorum.

Httpd.conf'a bakabileceğiniz bir öneri buldum ve bir "Kullanıcı" satırı olacak, ancak httpd.conf dosyamda böyle bir satır yok, bu yüzden Apache'nin varsayılan kullanıcı olarak çalıştığını düşünüyorum. Ne olduğunu bulamıyorum.

Yani sorum şu:

  • varsayılan kullanıcının ne olduğunu nasıl öğrenebilirim
  • varsayılan kullanıcıyı değiştirmem gerekiyor mu
  • Eğer cevabım evet ise ve httpd.conf dosyasını düzenleyerek varsayılan kullanıcıyı değiştirirsem, herhangi bir şeyi mahvetmek olası mıdır?

Teşekkürler!


12
Bu soru neden indirildi? Evet, başka yerde yanıtlandığı için güncellendi, ancak oy kullanmaya gerek yok mu? Mükemmel bir soru mu? Belki de aşağı seçmenimiz bu konuda yapıcı bir yorum eklemek ister?
Bryan

2
Bu güncellemeyi bir cevap olarak göndermek ve şu anda Cevaplanmamış sırasındaki gibi kabul etmek isteyebilirsiniz.
Fahad Sadah

7
StackOverflow'ta söylendiği için +1; bazı kullanıcılar yeni kullanıcıların
kaçması

Bağlantılı soru artık yok
pal4life

Sonraki soru: ne yapılması gerektiği gibi rootve iki kullanıcıdan biri www-data. "Doğru" Apache grubuna bir şeye erişme izni nasıl veriyorsunuz?

Yanıtlar:


228

ps aux | egrep '(apache|httpd)' genellikle hangi apache'nin çalıştığını gösterir.

Genellikle varsayılan kullanıcıyı değiştirmeniz gerekmez, "hiç kimse" veya "apache" genellikle iyi kullanıcılar değildir. "Kök" olmadığı sürece;)

düzenleme: apache ikili dosyalarını yakalamak için daha doğru komut


42
Evet, yoksa Ubuntu’da www-veri olacak.
gravyface

10
... ve Debian. :)
cubuspl42

7
Bu komut bana en çok apacheama en rootçok 1 olanların listesini gösterir .
Kullanıcı

2
3 işlemim var ( /usr/sbin/apache2 -k start), birinin kullanıcısı rootdiğeri iki www-data. Endişelenmeli miyim?
zundi

3
@zundi, servis ayrılmış limanlara bağlanmak gibi şeyleri yapmak için kök olarak başlar (örn. 80 ve 443). Ardından, yapılandırılmış işlem sayısı ne olursa olsun, web sunucusu çalışması ve diğer kullanıcılar tarafından tanımlanan kullanıcılar olarak başlar. Bu şekilde talepler ayrıcalıklı olmayan süreçler tarafından ele alınmaktadır. Ana kimliğin (PPID) diğer tüm işlemler için aynı olduğunu göreceksiniz. Bu fikir, kök olarak çalışan bir işlem için PID'dir.
Kevin,

41

Aşağıdaki komutu deneyebilirsiniz:

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

1
Bu cevabı seviyorum, en çok oylanan cevabından daha iyi (daha genel). Teşekkürler
pgr

14

apachectl -SApache kullanıcısı ve grubunu gösteren bir şey kullanın , şunun gibi:

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

Teşekkürler, mac'umda apache'nin '_www' olarak çalıştığını görüyorum.
Mercury

Bu iyi bir cevap, çünkü çalışan web sunucunuz hakkında size çok daha fazla şey söyleyen ve kapsamlı bir şekilde sunan tek komut.
kontur

9

Ubuntuforums.org'a göre , Ubuntu'da apache2 için varsayılan kullanıcı www-data.

Ubuntu 13.10 Saucy'da doğru olduğu görülüyor.


Gönderen Lars Noodén yukarıdaki forumunda.

[Kullanıcının] gerçekte neye ayarlanmış olduğundan emin olmak için gerçek yapılandırma dosyalarını kontrol edin. Şemsiye dosyası, apache2.confaşağıdaki gibi bir şey olacak,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Bu, ayarlanan ortam değişkenlerine bir referanstır /etc/apache2/envvars. mod_suexecAyrıca betiklerin farklı bir kullanıcı ve grup olarak çalıştırılmasına izin verir.

Alternatif kullanıcılar, gruplar veya her ikisini birden kullanabilecek herhangi bir sanal ana bilgisayarı bulmak için yapılandırmaları kontrol edin.

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

Red Hat tabanlı dağıtımlarda şöyle olacaktır (genellikle httpd çalıştıran kullanıcısı apache):

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

8

Bunun eski bir gönderi olduğunu biliyorum, ancak hala cevapsız olarak listeleniyor, bu yüzden bir öneride bulunacağım. Apache'nin hangi kullanıcı veya grupla çalıştığını bulamıyorsanız, belki httpd.conf dosyasını açmayı deneyin. Orada "Kullanıcı" ve "Grup" için bir giriş olmalı. Yalnızca Apache'nin hangi kullanıcı olarak çalıştığını görmekle kalmaz, aynı zamanda bunu yapmanız gerektiğini hissederseniz değiştirebilirsiniz.


7

PHP betiğinize bir kod satırı ekleyebilirsiniz:

echo exec('whoami');

8
Buraya dikkat edin, bu Apache kullanıcısını değil PHP'nin altında çalışan kullanıcıyı gösterir. Mod_php kullanıyorsanız bunlar aynıdır, fakat şimdi çok yaygın olduğu gibi başka bir şey kullanıyorsanız (php_fpm gibi) kolayca farklı olabilirler.
benz001

5

Bu kod - az ya da çok - içeren apache(veya adını içeren apache) işlem yapan kök olmayan kullanıcıları alfabetik olarak listeler.

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

Listede muhtemelen sizin iyi kişiliğiniz gibi 'grep apache' gibi işlemler yapan kullanıcılar yer alacak.
mwfearnley

4
  • Kullanıcıyı bulmak için ps aux | grep apacheçalışırken kolayca kullanabilirsiniz .
  • Buna gerek yok ama Apache root olarak çalışıyorsa güvenlik sorunları var.
  • Üçüncüsü, Apache kullanıcısının değiştirilmesi bazı dizinlere erişme hakkını değiştirecektir. / Var / www'nin (veya web sitenizin olduğu her yerde) yeni kullanıcı ve grup tarafından erişilebilir olduğundan emin olmanız gerekir.
  • Baktığım sistemlerde, apache her zaman kullanıcı ve grup olarak apache: apache (ya da benzeri) kullanılarak kuruldu, bu yüzden muhtemelen böyle ayarlanmış olması gerekiyordu.

NOT: Bu Stackoverflow'ta verdiğim cevapla aynı .


2

Veya apache yapılandırma dosyasını kontrol edebilir ve sahibi ve grubu arayabilirsiniz.


2

Noyo tarafından burada önerildiği gibi :

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

Ve sonra:

echo $APACHE_USER

1
Kullanıcıyı al (ubuntu komut satırı): echo $ APACHE_USER
Jadeye

1

En azından Debian / Ubuntu tabanlı dağıtımlar için alternatif bir yaklaşım, Apache'nin kullanıcı ve grubunu ayarlamak/etc/apache2/envvars için kullandığı yöntemi kullanmaktır: kaynak !

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

Süslü olmak istiyorsanız, dosya bulunamazsa hataları bastırabilir ve varsayılan bir değer sağlayabilirsiniz:

$ apacheuser = $ (
     kaynak / başarısız / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     yankı kimse  
)
$ echo "$ apacheuser"
kimse

1

Burada sunulan çözümlerin çoğunun sisteme veya yapılandırmaya özgü olduğunu (özellikle çözümlerin çoğunun MacOS'ta çalışmadığını) ve birkaçının Apache'nin yapılandırma dosyalarının ilk sırada nerede olduğunu bilen kullanıcıya güvendiğini gördüm. .

Bu yüzden biraz hile yapıyorum ve Apache'nin bana ne olduğunu söylemesine izin verdim.

Basit komut apachectl -S, çalışan Apache örneği hakkında bilmeniz gerekenleri size söyler ve sonuçları oldukça kolay bir şekilde ayrıştırılabilir. İşte bashherhangi bir zamanda ihtiyaç duyabileceğim çeşitli şeyleri belirlemek için birkaç betiğin en üstünde kullandığım çözümüm ...

# 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=\" `" : ".*\"\(.*\)\".*")

Bu değerler daha sonra şu şekilde kullanılabilir:

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


0

Lsof kullanın ve port apache'yi argüman olarak dinleyiniz. Olarak çalışan appache için USER sütununa bakınız.

# 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)

Birkaç 100k açık dosya tutacağınız ve / veya oldukça meşgul bir sunucunuz olduğunda, yavaş olabilir.
Dennis Nolte
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.