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


115

मुझे यह पता लगाने की जरूरत है कि क्या php कोई नहीं है। मैं यह कैसे करु?

क्या "कोई नहीं" के लिए कोई अन्य नाम हैं? "अमरीका की एक मूल जनजाति"? अन्य कोई?


"क्या कोई अन्य नाम हैं" प्रश्न के साथ आपका वास्तव में क्या मतलब है? Sysadmins उपयोगकर्ताओं को जो भी नाम चाहते हैं के साथ बना सकते हैं।
अलवारो गोंजालेज

किसी भी चीज़ के लिए कोई अन्य डिफ़ॉल्ट नाम जिसे सर्वर माना जा सकता है; अपाचे, कोई नहीं, www-data, आदि ..
वेस्ले

1
यदि मैं सही ढंग से याद करता हूं, तो सिस्टम उपयोगकर्ताओं के पास आमतौर पर एक छोटा यूआईडी (1024 से नीचे?) होता है। जो भी आप पूरा करने की कोशिश कर रहे हैं, उसके लिए यह एक बेहतर सुराग हो सकता है।
एल्वारो गोंजालेज


9
get_current_user () वर्तमान स्क्रिप्ट का स्वामी है, न कि उपयोगकर्ता php जो वर्तमान में चल रहा है।
दीमा एल।

जवाबों:


85

यदि उपलब्ध हो तो आप वर्तमान उपयोगकर्ता खाते की जांच कर सकते हैं posix_geteuidऔर फिर उपयोगकर्ता नाम प्राप्त कर सकते हैं posix_getpwuid

$username = posix_getpwuid(posix_geteuid())['name'];

यदि आप सुरक्षित मोड में चल रहे हैं (जो कि अक्सर ऐसा होता है जब निष्पादन अक्षम हो जाता है), तो यह संभावना नहीं है कि आपकी PHP प्रक्रिया डिफ़ॉल्ट www-dataया apacheखाते के तहत कुछ भी चल रही हो ।


10
नहीं है पर एक टिप्पणी get_current_user()मैनपेज है कि इस दृष्टिकोण से पता चलता है। PHP 5.4 के रूप में, इसे इसे छोटा किया जा सकता है:print posix_getpwuid(posix_geteuid())['name'];
Palec

209

<?php echo exec('whoami'); ?>


1
वास्तव में निष्पादन या प्रणाली या इस तरह के किसी भी pststhru कार्यों का उपयोग नहीं कर सकते।
वेस्ले

सिर्फ वही था जो मुझे चाहिए था। get_current_user () वह नहीं था जिसकी मुझे निश्चित रूप से आवश्यकता थी।
dgig

5
कुछ उपयोगकर्ताओं के लिए उपयोगी हो सकता है: यदि आप इसे कमांड लाइन इंटरफ़ेस से चलाते हैं, तो आपको वह उपयोगकर्ता मिलेगा जो कमांड चलाता है, कि PHP उपयोगकर्ता।
ब्रैम वेनरो सेप

@BramVanroy तो आपको इसे कहां चलाना चाहिए? = |
एंड्रयू

@BramVanroy - मैं आपकी टिप्पणी को समझना चाहता हूं, लेकिन मैं नहीं। यदि आप इसे cli से चलाते हैं, तो क्या आप नहीं हैं जो मौजूदा php प्रक्रिया का मालिक है? आपके अलावा इस मामले में PHP उपयोगकर्ता कौन होगा?
बिलिन्हा

72

पिछड़े रास्ते की तरह, लेकिन निष्पादन / प्रणाली के बिना:

file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");

यदि आप एक फ़ाइल बनाते हैं, तो स्वामी PHP उपयोगकर्ता होगा।

यह संभवतः किसी भी अस्थायी फ़ाइल फ़ंक्शन के साथ चलाया जा सकता है जैसे कि tempnam(), जो अस्थायी निर्देशिका में एक यादृच्छिक फ़ाइल बनाता है और उस फ़ाइल का नाम देता है। यदि अनुमतियाँ, open_basedirया सुरक्षित मोड जैसी किसी चीज़ के कारण समस्याएँ हैं, जो फ़ाइल लिखने से रोकती हैं, तो आमतौर पर, अस्थायी निर्देशिका की अनुमति दी जाएगी।


2
बहुत चालाक पार मंच समाधान। वाह!
मैट फ्लेचर

3
नीस: केवल गैर-विशेषाधिकारित समाधान यहां उस समूह को भी ढूंढना है जो PHP के रूप में चल रहा है।
तनीस

2
एक योग्य हैक, एक उच्च स्थान का हकदार है
अब्राहम फिलिप

1
@RavinderPayal जब तक आप मेरे द्वारा सुझाए गए टेंपनाम फ़ंक्शन का उपयोग नहीं करते हैं। यह लगभग गारंटी है कि उपयोगकर्ता अस्थायी निर्देशिका को लिख सकते हैं, चाहे वे कोई भी हो। अस्थायी निर्देशिका में लिखने में सक्षम होने के बिना, आप अस्थायी रूप से एक फ़ोल्डर 777 अनुमतियाँ दे सकते हैं और यदि सक्षम है, तो उस पथ के लिए सेलिनक्स को अक्षम करें।
जोनाथन कुह्न

1
@RavinderPayal अस्थायी पथ को वापस करने के लिए अतिरिक्त कार्य हैं। तो $temp_file = tempnam(sys_get_temp_dir(), 'TMP');किसी भी सिस्टम पर अस्थायी निर्देशिका में एक अस्थायी फ़ाइल बनाएगा। फिर आप उस फ़ाइल का उपयोग उपयोगकर्ता / समूह प्राप्त करने के लिए कर सकते हैं। मुझे पता लगाने के लिए उपयोगकर्ता में से कुछ को छोड़ दिया।
जोनाथन कुह्न

20

अधिक विवरण उपयोगी होगा, लेकिन यह एक लिनक्स प्रणाली है, और यह मानते हुए कि php एपाचे के तहत चल रहा है, यह कभी भी उपयोगकर्ता के अपाचे के रूप में चलता है।

जाँच करने का एक आसान तरीका (फिर से, पर्यावरण की तरह कुछ यूनिक्स मानकर) इसके साथ एक php फ़ाइल बनाना है:

<?php
    print shell_exec( 'whoami' );
?>

जो आपको उपयोगकर्ता देगा।

मेरे AWS उदाहरण के लिए, apacheजब मैं यह स्क्रिप्ट चलाता हूं तो मुझे आउटपुट के रूप में मिल रहा है।


16

आप इस तरह backticks का उपयोग करने की कोशिश कर सकते हैं:

echo `whoami`;

7
यह केवल ऊपर दिए गए प्रश्नों का डुप्लिकेट है।
volter9

2
कुछ उपयोगकर्ताओं के लिए उपयोगी हो सकता है: यदि आप इसे कमांड लाइन इंटरफ़ेस से चलाते हैं, तो आपको वह उपयोगकर्ता मिलेगा जो कमांड चलाता है, कि PHP उपयोगकर्ता।
ब्रैम वेनरो सेप

12

मै इस्तेमाल करूंगा:

lsof -i
lsof -i | less
lsof -i | grep :http

इनमें से कोई भी। आप अपनी ssh कमांड लाइन में उन्हें टाइप कर सकते हैं और आप देखेंगे कि उपयोगकर्ता किस सेवा को सुन रहा है।

आप भी जा सकते हैं और इस फाइल को देख सकते हैं:

more /etc/apache2/envvars

और इन लाइनों के लिए देखो:

export APACHE_RUN_USER=user-name
export APACHE_RUN_GROUP=group-name

envvars फ़ाइल डेटा को फ़िल्टर करने के लिए, आप grep का उपयोग कर सकते हैं:

 more  /etc/apache2/envvars |grep APACHE_RUN_

1
grep "APACHE_RUN_" /etc/apache2/envvarsअच्छा काम किया, धन्यवाद।
तारिक

11

exec('whoami') यह करेंगे

<?php
echo exec('whoami');
?>

वास्तव में निष्पादन या प्रणाली या इस तरह के किसी भी pststhru कार्यों का उपयोग नहीं कर सकते।
वेस्ले

@Wesley: तो यह संभव नहीं है।
उत्पत्ति

2
कुछ उपयोगकर्ताओं के लिए उपयोगी हो सकता है: यदि आप इसे कमांड लाइन इंटरफ़ेस से चलाते हैं, तो आपको वह उपयोगकर्ता मिलेगा जो कमांड चलाता है, कि PHP उपयोगकर्ता।
ब्रैम वेनरो सेप


1

निम्न निर्देशिका में फ़ाइल info.php जोड़ें - आपकी डिफ़ॉल्ट http / apache निर्देशिका - सामान्य रूप से / var / www / html

निम्नलिखित सामग्री के साथ

<?php                                                                           
phpinfo();                                                                    
?>  

तब httpd / apache अपने डिफ़ॉल्ट html निर्देशिका http://enter.server.here/info.php पर जाएं

पूरे php वंशावली वितरित करेंगे!


3
और उस आउटपुट में कौन सा वैरिएबल / वैल्यू हम खोज रहे हैं?
एंड्रयू

मुझे यकीन है कि आप इसे पहले ही पा चुके हैं, लेकिन उस पृष्ठ पर "उपयोगकर्ता" खोजें?
CRTLBREAK 15

0

अपने सेटअप में मैं जांचना चाहता हूं कि क्या वर्तमान प्रक्रिया में फ़ोल्डर, सबफ़ोल्डर और फाइलें बनाने की अनुमति है, इससे पहले कि मैं एक प्रक्रिया शुरू करूं और समाधान का सुझाव दूं अगर ऐसा लगता है कि मैं नहीं कर सकता। मैं stat(<file>)विभिन्न चीजों पर चलना चाहता था ताकि अनुमतियाँ चल रही प्रक्रिया से मेल खा सकें (मैं php-fpm का उपयोग कर रहा हूँ ताकि यह पूल के आधार पर भिन्न हो)।
मारियो के ऊपर दिया गया पोज़िक्स आधारित समाधान, एकदम सही लगता है, हालाँकि ऐसा लगता है कि पॉज़िक्स का विस्तार है -डिज़ाइन किया हुआ है, इसलिए मैं ऊपर नहीं कर सका और जैसा कि मैं whoamiएक अलग शेल में चल रहे स्टेटिंग () रनिंग रिस्पॉन्स से परिणामों की तुलना करना चाहता हूँ या तो सहायक नहीं है (मुझे यूआईडी की जरूरत है और उपयोगकर्ता नाम नहीं है)।

हालांकि मैं एक उपयोगी संकेत मिल गया है, मैं कर सकता stat(/proc/self)और stat(/proc/self/attr)और यूआईडी देख सकते हैं और फ़ाइल के gid।

आशा है कि किसी और की मदद करता है


0

आप इन आदेशों का उपयोग कर सकते हैं:

<? system('whoami');?>

या

<? passthru('whoami');?>

या

<? print exec('whoami');?>

या

<? print shell_exec('whoami');?>

या

<? print get_current_user();?>

get_current_user () वर्तमान उपयोगकर्ता को वापस नहीं करता है । यह उस स्क्रिप्ट के मालिक को लौटाता है जिसे फंक्शन में कहा जाता है।
andsens

-1

मैं आमतौर पर उपयोग करता हूं

<?php echo get_current_user(); ?>

मुझे खुशी होगी अगर इसने आपकी मदद की


यह सवाल के तहत टिप्पणियों में पहले ही उल्लेख किया गया है और यह उस उपयोगकर्ता के साथ बहुत कम है जिसका स्क्रिप्ट के तहत चल रहा है।
पलक

get_current_user() - Gets the name of the owner of the current PHP script- PHP प्रक्रिया चलाने वाला उपयोगकर्ता नहीं
फ्रांसिस्को ज़ाराबोज़ो

-1
$_SERVER["USER"]

$_SERVER["USERNAME"] 

echo $_SERVER["USER"];काम करता है, लेकिन SSH में उपयोगकर्ता नाम में वर्तमान लॉग देता है।
तारिक

-1

प्रस्ताव

एक बालक देर से, लेकिन भले ही निम्नलिखित एक काम के आसपास है, यह आवश्यकता को हल करता है क्योंकि यह ठीक काम करता है:

<?
    function get_sys_usr()
    {
        $unique_name = uniqid();  // not-so-unique id
        $native_path = "./temp/$unique_name.php";
        $public_path = "http://example.com/temp/$unique_name.php";
        $php_content = "<? echo get_current_user(); ?>";
        $process_usr = "apache";  // fall-back

        if (is_readable("./temp") && is_writable("./temp"))
        {
            file_put_contents($native_path,$php_content);
            $process_usr = trim(file_get_contents($public_path));
            unlink($native_path);
        }

        return $process_usr;
    }


    echo get_sys_usr();  // www-data
?>


विवरण

ऊपर दिया गया कोड-हाइलाइटिंग सटीक नहीं है, कृपया अपने पसंदीदा संपादक में कॉपी और पेस्ट करें और PHP कोड के रूप में देखें, या इसे स्वयं सहेजें और परीक्षण करें।

जैसा कि आप शायद जानते हैं, get_current_user()"चालू रनिंग स्क्रिप्ट" के मालिक को लौटाता है - इसलिए यदि आपने सर्वर पर वेब-सर्वर-उपयोगकर्ता के लिए एक स्क्रिप्ट को "चाउन" नहीं किया है, तो यह संभवतः "कोई नहीं" होगा, या यदि डेवलपर- उपयोगकर्ता एक ही OS पर मौजूद है, यह उस उपयोगकर्ता नाम को प्रदर्शित करेगा।

इसके चारों ओर काम करने के लिए, हम वर्तमान चल रही प्रक्रिया के साथ एक फ़ाइल बनाते हैं। यदि आप require()इसे वर्तमान में चल रही स्क्रिप्ट में शामिल करते हैं, तो यह माता-पिता की स्क्रिप्ट के अनुसार ही वापस आएगा; इसलिए, हमें इसे प्रभावी करने के लिए एक अलग अनुरोध के रूप में चलाने की आवश्यकता है।

प्रक्रिया प्रवाह

इसे प्रभावी बनाने के लिए, एक डिज़ाइन पैटर्न चलाने पर विचार करें जो "रनटाइम-मोड" को शामिल करता है, इसलिए जब सर्वर "विकास-मोड या परीक्षण-मोड" में होता है, तब केवल यह फ़ंक्शन चला सकता है और इसके आउटपुट को कहीं न कहीं शामिल कर सकता है। , और सिर्फ सादा पाठ या डेटाबेस, या जो भी हो।

बेशक आप ऊपर दिए गए कोड के कुछ विवरणों को बदल सकते हैं क्योंकि आप इसे और अधिक गतिशील बनाना चाहते हैं, लेकिन तर्क इस प्रकार है:

  • अन्य उपयोगकर्ताओं के साथ हस्तक्षेप को सीमित करने के लिए एक अद्वितीय संदर्भ को परिभाषित करें
  • एक अस्थायी फ़ाइल लिखने के लिए एक स्थानीय फ़ाइल-पथ को परिभाषित करें
  • इस फ़ाइल को अपनी प्रक्रिया में चलाने के लिए एक सार्वजनिक url / पथ परिभाषित करें
  • स्क्रिप्ट स्वामी नाम को आउटपुट करने वाली अस्थायी php फ़ाइल लिखें
  • अनुरोध करने के द्वारा इस स्क्रिप्ट का आउटपुट प्राप्त करें
  • फ़ाइल को हटा दें क्योंकि अब इसकी आवश्यकता नहीं है - या यदि आप चाहें तो इसे छोड़ दें
  • फ़ंक्शन के रिटर्न-वैल्यू के रूप में अनुरोध का आउटपुट लौटाएं

-1
<?php phpinfo(); ?>

info.php और के रूप में सहेजें

अपने ब्राउज़र में जानकारी खोलें

ctrl + f फिर इनमें से कोई भी टाइप करें:

APACHE_RUN_USER
APACHE_RUN_GROUP
user/group

आप उपयोगकर्ता को देख सकते हैं और समूह अपाचे के रूप में चल रहा है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.