यह पता लगाना कि Apache उपयोगकर्ता किस रूप में चल रहा है?


212

मैं अपने सर्वर पर एक फ़ाइल अपलोड निर्देशिका को सुरक्षित करना चाहता हूं जैसा कि यहां सुंदर रूप से वर्णित किया गया है, लेकिन इन निर्देशों का पालन करने से पहले मुझे एक समस्या है। मुझे नहीं पता कि उपयोगकर्ता Apache किस रूप में चल रहा है।

मुझे एक सुझाव मिला है कि आप httpd.conf में देख सकते हैं और एक "उपयोगकर्ता" लाइन होगी, लेकिन मेरी httpd.conf फ़ाइल में ऐसी कोई लाइन नहीं है, इसलिए मुझे लगता है कि अपाचे डिफ़ॉल्ट उपयोगकर्ता के रूप में चल रहा है। मैं यह नहीं जान सकता कि वह क्या है, हालाँकि।

तो, मेरा सवाल है (हैं):

  • मुझे कैसे पता चलेगा कि डिफ़ॉल्ट उपयोगकर्ता क्या है
  • क्या मुझे डिफ़ॉल्ट उपयोगकर्ता को बदलने की आवश्यकता है
  • यदि उत्तर हां है और मैं httpd.conf को संपादित करके डिफ़ॉल्ट उपयोगकर्ता को बदल देता हूं, तो क्या इससे कुछ भी खराब होने की संभावना है?

धन्यवाद!


12
इस प्रश्न को नीचा क्यों दिखाया गया है? हां, इसे अपडेट कर दिया गया है क्योंकि इसका उत्तर कहीं नहीं दिया गया है, लेकिन मुझे वोट डाउन करने की कोई आवश्यकता नहीं है? यह एक अच्छा सवाल है? शायद हमारा मतदाता इस बारे में रचनात्मक टिप्पणी करना चाहेगा?
ब्रायन

2
आप उस अद्यतन को उत्तर के रूप में पोस्ट कर सकते हैं, और उसे स्वीकार कर सकते हैं, जैसा कि आप वर्तमान में अनुत्तरित कतार में हैं।
फहद सदह

7
StackOverflow पर बंद होने के लिए +1; कुछ उपयोगकर्ता नए उपयोगकर्ताओं को चलाने के लिए जिद करते हैं
जुआन

लिंक किए गए प्रश्न का कोई और अस्तित्व नहीं है
pal4life

अगला सवाल: क्या करना है क्योंकि इसके दो उपयोगकर्ताओं में से एक, जैसे rootऔर www-data। आप "सही" अपाचे समूह को कुछ एक्सेस करने की अनुमति कैसे देते हैं?

जवाबों:


228

ps aux | egrep '(apache|httpd)' आमतौर पर दिखाएगा कि अपाचे किस रूप में चल रहा है।

आमतौर पर आपको डिफ़ॉल्ट उपयोगकर्ता को बदलने की आवश्यकता नहीं होती है, "कोई नहीं" या "अपाचे" आमतौर पर ठीक उपयोगकर्ता होते हैं। जब तक इसकी "जड़" नहीं;)

संपादित करें: अपाचे बायनेरिज़ को पकड़ने के लिए अधिक सटीक आदेश


42
हाँ, या यह Ubuntu पर www-data होगा।
ग्रेविफेस

10
... और डेबियन। :)
क्यूबसप्लि २२

7
वह कमांड मुझे चीजों की एक सूची दिखाती है, जिसमें से सबसे अधिक भी apache1 rootहै।
यूजर

2
मेरे पास 3 प्रक्रियाएं हैं ( /usr/sbin/apache2 -k start), एक का उपयोगकर्ता है rootऔर अन्य दो हैं www-data। क्या मुझे चिंतित होना चाहिए?
zundi

3
@ ज़ुंडी, सेवा को रूट के रूप में आरक्षित बंदरगाहों (जैसे 80 और 443) से बांधने के लिए शुरू होता है। फिर यह शुरू होता है जो भी कॉन्फ़िगर की गई संख्याएं हैं, वेब-सर्वर काम करने के लिए, और किसी भी अन्य कार्यों को परिभाषित उपयोगकर्ताओं के रूप में। इस तरह अनुरोधों को गैर-विशेषाधिकार प्राप्त प्रक्रियाओं द्वारा नियंत्रित किया जा रहा है। आप देखेंगे कि मूल आईडी (PPID) अन्य सभी प्रक्रियाओं के लिए समान है। रूट के रूप में चल रही उस एक प्रक्रिया के लिए यह विचार पीआईडी ​​हो।
केविन

41

आप निम्न आदेश आज़मा सकते हैं:

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

1
मुझे यह उत्तर, सबसे उत्कट उत्तर से बेहतर (अधिक सामान्य) लगता है। धन्यवाद
PGR

14

उपयोग apachectl -S, जो कुछ अपाचे उपयोगकर्ता और समूह को दिखाएगा, कुछ इस प्रकार है:

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

धन्यवाद, मेरे मैक पर मैं देख रहा हूं कि अपाचे '_www' के रूप में चल रहा है।
बुध

यह एक अच्छा जवाब है, क्योंकि यह एक आदेश है जो आपको आपके चलने वाले वेब सर्वर के बारे में बहुत कुछ बताता है और इसे व्यापक तरीके से प्रस्तुत करता है।
kontur

9

Ubuntuforums.org के अनुसार , Ubuntu पर apache2 के लिए डिफ़ॉल्ट उपयोगकर्ता है www-data

Ubuntu 13.10 Saucy पर सच हो गया।


उपरोक्त मंच पर लार्स नूडेन से ।

यह सुनिश्चित करने के लिए कि क्या [उपयोगकर्ता] वास्तव में सेट है, वास्तविक कॉन्फ़िगरेशन फ़ाइलों की जांच करें। छत्र फ़ाइल, apache2.confमें निम्न जैसा कुछ होगा,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

यह पर्यावरण के चर का एक संदर्भ है जिसमें सेट किया गया है /etc/apache2/envvarsmod_suexecस्क्रिप्ट को एक अलग उपयोगकर्ता और समूह के रूप में चलाने की अनुमति देता है।

किसी भी वर्चुअल होस्ट को खोजने के लिए, जो वैकल्पिक उपयोगकर्ताओं, समूहों या दोनों का उपयोग कर सकता है, कॉन्फ़िगरेशन की जाँच करें।

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

Red Hat आधारित वितरण के लिए यह (आमतौर पर httpd चलाने वाला उपयोगकर्ता है apache):

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

8

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन इसे अभी भी अनुत्तरित के रूप में सूचीबद्ध किया गया है, इसलिए मैं एक सुझाव दूंगा। यदि आप नहीं पाते हैं कि कौन सा उपयोगकर्ता या समूह अपाचे के रूप में चल रहा है, तो शायद httpd.conf फ़ाइल खोलने का प्रयास करें। "उपयोगकर्ता" और "समूह" के लिए वहां एक प्रविष्टि होनी चाहिए। न केवल आप देख सकते हैं कि अपाचे किस उपयोगकर्ता के रूप में चल रहा है, लेकिन यदि आप ऐसा करने की आवश्यकता महसूस करते हैं, तो आप इसे बदल सकते हैं।


7

आप अपनी PHP स्क्रिप्ट में कोड की एक पंक्ति शामिल कर सकते हैं:

echo exec('whoami');

8
यहां देखें, यह उस उपयोगकर्ता को दिखाता है जो PHP के तहत चलता है, न कि अपाचे उपयोगकर्ता। यदि mod_php का उपयोग कर रहे हैं तो ये समान हैं लेकिन यदि, जैसा कि अब बहुत आम है, आप कुछ और का उपयोग कर रहे हैं (जैसे php_fpm) तो वे आसानी से भिन्न हो सकते हैं।
बेंज़001

5

यह कोड अधिक या कम - वर्णानुक्रम में उन सभी गैर-रूट उपयोगकर्ताओं को सूचीबद्ध करेगा, जिनमें प्रक्रियाएँ चल रही हैं apache(या जिनका नाम शामिल है apache)

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

इस सूची में संभवतया ऐसे उपयोगकर्ता शामिल होंगे जो 'grep apache' जैसी प्रक्रियाएँ चला रहे हैं, जैसे कि आपका ठीक-ठाक स्व।
mwfearnley

4
  • उपयोगकर्ता का पता लगाने के लिए, आप ps aux | grep apacheइसे चलाने के दौरान उपयोग कर सकते हैं ।
  • आप की जरूरत नहीं है, लेकिन अगर अपाचे जड़ के रूप में चल रहे हैं तो सुरक्षा मुद्दे हैं।
  • तीसरा, अपाचे के उपयोगकर्ता को बदलने से कुछ निर्देशिकाओं तक पहुंचने के उनके अधिकार बदल जाएंगे। आपको यह सुनिश्चित करने की आवश्यकता है कि नए उपयोगकर्ता और समूह के लिए / var / www (या आपके पास जहां भी आपकी वेबसाइटें हैं) पहुंच योग्य है।
  • जिन प्रणालियों को मैंने देखा है, उन पर अपाचे को हमेशा उपयोगकर्ता और समूह के रूप में अपाचे: (या समान) का उपयोग करके स्थापित किया गया था, इसलिए इसे शायद पहले से ही इस तरह सेट किया जाना चाहिए।

नोट: यह वही उत्तर है जो मैंने स्टैकओवरफ़्लो पर दिया था ।


2

या आप अपाचे कॉन्फ़िगरेशन फ़ाइल की जांच कर सकते हैं और स्वामी और समूह को देख सकते हैं।


2

जैसा कि नोयो ने यहां सुझाया है :

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

और तब:

echo $APACHE_USER

1
उपयोगकर्ता प्राप्त करें (ubuntu कमांड-लाइन): echo $ APACHE_USER
Jadeye

1

एक वैकल्पिक दृष्टिकोण, कम से कम डेबियन / उबंटू-आधारित डिस्ट्रोस के लिए, उसी विधि/etc/apache2/envvars का उपयोग करने के लिए अपाचे अपने उपयोगकर्ता और समूह को सेट करने के लिए करता है - स्रोत !

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

यदि आप फैंसी प्राप्त करना चाहते हैं, तो यदि फ़ाइल नहीं मिली है, तो आप त्रुटियों को दबा सकते हैं और डिफ़ॉल्ट मान प्रदान कर सकते हैं:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     इको "$ APACHE_RUN_GROUP" ||
     गूंज कोई नहीं  
)
$ गूंज "$ अपाचेसर"
कोई भी नहीं

1

मैंने पाया कि यहां दिए गए अधिकांश समाधान सिस्टम- या कॉन्फ़िगरेशन-विशिष्ट हैं (विशेष रूप से, अधिकांश समाधान MacOS पर बिल्कुल काम नहीं करते हैं) और कुछ उपयोगकर्ता उस उपयोगकर्ता पर भरोसा करते हैं, जहां अपाचे की कॉन्फ़िगरेशन फ़ाइलें पहले स्थान पर हैं .. ।

इसलिए मैं थोड़ा धोखा देता हूं और अपाचे को खुद बता देता हूं कि क्या है।

सरल कमांड apachectl -Sआपको बताएगा कि अपाचे के एक चल रहे उदाहरण के बारे में आपको क्या जानने की जरूरत है, और इसके परिणामों को काफी आसानी से पार्स किया जा सकता है। यहां मेरा समाधान है, जिसका उपयोग मैं कुछ bashस्क्रिप्ट के शीर्ष पर करता हूं, विभिन्न प्रकार की चीजों को निर्धारित करने के लिए जो मुझे किसी भी समय की आवश्यकता हो सकती है ...

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

इन मानों का उपयोग इस प्रकार किया जा सकता है:

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

0

मुझे यह आदेश CakePHP डॉक्स में मिला ।

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

अब HTTPDUSERजो उपयोगकर्ता सर्वर चलाता है, के उपयोगकर्ता नाम रखती है echo $HTTPDUSERमेरे मामले आउटपुट में www-dataउपयोग करना rlerdorf / php7dev


0

Lsof का प्रयोग करें और पोर्ट अपाचे को पास करें तर्क के रूप में सुनें। उपयोगकर्ता अपाचे के लिए USER कॉलम को इस रूप में चला रहा है देखें।

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

lsof धीमा हो सकता है जब आपके पास कुछ 100k खुली फाइलहैंडल और / या काफी व्यस्त सर्वर हो।
डेनिस नोल्टे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.