কীভাবে ব্যবহারকারী পিএইচপি হিসাবে চলছে তা যাচাই করবেন?


115

পিএইচপি কারও হিসাবে চলছে কিনা তা আমার সনাক্ত করা দরকার। আমি এটা কিভাবে করবো?

"কেউ নেই" এর জন্য অন্য কোনও নাম আছে? "Apache"? অন্য কেউ?


"অন্য কোনও নাম আছে" প্রশ্নটি দিয়ে আপনার অর্থ কী? সিসাডমিন্স তারা যা খুশি নাম দিয়ে ব্যবহারকারী তৈরি করতে পারে।
vlvaro González

সার্ভার হিসাবে বিবেচিত হতে পারে এমন কোনও কিছুর জন্য অন্য কোনও ডিফল্ট নাম; Apache, কেউ, WWW-ডেটা, ইত্যাদি ..
ওয়েসলি

1
যদি আমি সঠিকভাবে স্মরণ করি তবে সিস্টেম ব্যবহারকারীদের সাধারণত একটি ছোট UID থাকে (1024 এর নীচে?) আপনি যা অর্জন করার চেষ্টা করছেন তার পক্ষে এটি আরও ভাল ক্লু হতে পারে।
আলভারো গঞ্জালেজ


9
get_current_user () বর্তমান স্ক্রিপ্টের মালিককে ফিরিয়ে দেয়, ব্যবহারকারী পিএইচপি বর্তমানে চলমান নয়।
দিমা এল

উত্তর:


85

প্রাপ্তিসাধ্য আপনি বর্তমান ব্যবহারকারীর অ্যাকাউন্ট অনুসন্ধানের করতে posix_geteuidএবং তারপর ব্যবহারকারীর নাম পেতে posix_getpwuid

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

আপনি যদি নিরাপদ মোডে চলছেন তবে (এক্সিকিউটি অক্ষম করা অবস্থায় এটি প্রায়শই ঘটে থাকে), তবে আপনার পিএইচপি প্রক্রিয়াটি ডিফল্ট www-dataবা apacheঅ্যাকাউন্ট ব্যতীত অন্য কোনও কিছুতে চলছে কিনা এমন সম্ভাবনা কম ।


10
নেই একটি মন্তব্যে get_current_user()র manpage যে এই পদ্ধতির শো। পিএইচপি 5.4 হিসাবে এটি এটিকে সংক্ষিপ্ত করা যেতে পারে:print posix_getpwuid(posix_geteuid())['name'];
প্যালেক

209

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


1
এক্সিকিউট বা সিস্টেম বা এ জাতীয় কোনও পাস্ত্রু ফাংশন সত্যিই ব্যবহার করতে পারে না।
ওয়েসলি

আমার যা দরকার ছিল তা ছিল। get_current_user () আমার যা প্রয়োজন তা অবশ্যই ছিল না।
ডিজিগ

5
কিছু ব্যবহারকারীর পক্ষে উপকারী হতে পারে: আপনি যদি কমান্ড লাইন ইন্টারফেস থেকে এটি চালনা করেন তবে আপনি যে পিএইচপি ব্যবহারকারী নয় , কমান্ডটি চালাও এমন ব্যবহারকারী পাবেন।
ব্রাম ভ্যানরোয়

@ ব্রামভানরোয় তাহলে আপনার এটি কোথায় চালানো উচিত? = |
অ্যান্ড্রু

@ ব্রামভানরোয় - আমি আপনার মন্তব্যটি বুঝতে চাই, কিন্তু আমি তা করি না। আপনি যদি তা ক্লিপ থেকে চালান, আপনি কি বর্তমান পিএইচপি প্রক্রিয়াটির মালিক নন? পিএইচপি ব্যবহারকারী আপনি ছাড়া অন্য কে এই ক্ষেত্রে থাকবেন?
বিলেণোহ

72

পিছনের দিকের ধরণ, তবে নির্বাহী / সিস্টেম ছাড়াই:

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

আপনি যদি কোনও ফাইল তৈরি করেন তবে মালিক হবেন পিএইচপি ব্যবহারকারী।

এটি সম্ভবত অস্থায়ী ফাইল ফাংশনগুলির সাথে চালানো যেতে পারে যেমন tempnam()অস্থায়ী ডিরেক্টরিতে একটি এলোমেলো ফাইল তৈরি করে এবং সেই ফাইলটির নাম ফেরত দেয়। অনুমতিগুলি open_basedirবা নিরাপদ মোডের মতো কোনও কারণে যদি সমস্যা থাকে যা কোনও ফাইল লিখতে বাধা দেয় তবে সাধারণত, অস্থায়ী ডিরেক্টরিটির অনুমতি দেওয়া হবে।


2
খুব চতুর ক্রস প্ল্যাটফর্ম সমাধান। ছি-ছি!
ম্যাট ফ্লেচার

3
চমৎকার: পিএইচপি যে গ্রুপটি চলছে সেগুলি খুঁজে পাওয়ার জন্য এখানে একমাত্র অ-সুযোগ সুবিধার সমাধান ।
tanius

2
একটি যোগ্য হ্যাক, একটি উচ্চ স্থানের দাবিদার
আব্রাহাম ফিলিপ

1
@ রবীন্দ্রপায়াল আপনি যতক্ষণ না আমার পরামর্শ মতো টেম্পম ফাংশন ব্যবহার করেন না। এটি প্রায় গ্যারান্টিযুক্ত যে ব্যবহারকারীরাই অস্থায়ী ডিরেক্টরিতে লিখতে পারে তারা নির্বিশেষে। অস্থায়ী ডিরেক্টরিতে লিখতে না পেরে আপনি অস্থায়ীভাবে একটি ফোল্ডারটি 777 অনুমতি দিতে পারেন এবং যদি সক্ষম করা থাকে তবে সেই পথটির জন্য সেলিনাক্স অক্ষম করুন।
জোনাথন কুহান

1
@ রবীন্দ্রপায়ালকে টেম্পের পথে ফেরানোর অতিরিক্ত কাজ রয়েছে। সুতরাং $temp_file = tempnam(sys_get_temp_dir(), 'TMP');বেশিরভাগ সিস্টেমে অস্থায়ী ফাইল তৈরি করতে পারে। তারপরে আপনি সেই ফাইলটি ব্যবহারকারী / গোষ্ঠীটি পেতে ব্যবহার করতে পারেন। আমি এটির কিছু খুঁজে বের করতে ব্যবহারকারীর কাছে রেখেছি।
জোনাথন কুহন

20

আরও বিশদ বিশদটি কার্যকর হবে, তবে ধরেই নেওয়া এটি একটি লিনাক্স সিস্টেম, এবং ধরে নিই যে পিএইচপি অ্যাপাচের অধীনে চলছে, এটি ব্যবহারকারী অ্যাপাচি যা চালায় তা চলবে।

চেক করার একটি সহজ উপায় (আবার পরিবেশের মতো কিছু ইউনিক্স ধরে ধরে) এই কোনও পিএইচপি ফাইল তৈরি করে:

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

যা আপনাকে ব্যবহারকারীকে দেবে।

আমার এডাব্লুএস উদাহরণস্বরূপ, আমি apacheএই স্ক্রিপ্টটি চালানোর সময় আমি আউটপুট হিসাবে পাচ্ছি।


16

আপনি এই জাতীয় ব্যাকটিক্স ব্যবহার করে দেখতে পারেন:

echo `whoami`;

7
এটি কেবল উপরের প্রশ্নের সদৃশ।
volter9

2
কিছু ব্যবহারকারীর পক্ষে উপকারী হতে পারে: আপনি যদি কমান্ড লাইন ইন্টারফেস থেকে এটি চালনা করেন তবে আপনি যে পিএইচপি ব্যবহারকারী নয় , কমান্ডটি চালাও এমন ব্যবহারকারী পাবেন।
ব্রাম ভ্যানরোয়

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 ফাইল ডেটা ফিল্টার করতে, আপনি গ্রেপ ব্যবহার করতে পারেন:

 more  /etc/apache2/envvars |grep APACHE_RUN_

1
grep "APACHE_RUN_" /etc/apache2/envvarsধন্যবাদ, ভাল কাজ করেছে।
তারিক

11

exec('whoami') এটি করবে

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

এক্সিকিউট বা সিস্টেম বা এ জাতীয় কোনও পাস্ত্রু ফাংশন সত্যিই ব্যবহার করতে পারে না।
ওয়েসলি

@ ওয়েসলি: সুতরাং এটি সম্ভব নয়।
উত্সব

2
কিছু ব্যবহারকারীর পক্ষে উপকারী হতে পারে: আপনি যদি কমান্ড লাইন ইন্টারফেস থেকে এটি চালনা করেন তবে আপনি যে পিএইচপি ব্যবহারকারী নয় , কমান্ডটি চালাও এমন ব্যবহারকারী পাবেন।
ব্রাম ভ্যানরোয়


1

আপনার ডিফল্ট HTTP / অ্যাপাচি ডিরেক্টরি - সাধারণত ডিরেক্টরিতে / var / www / html - ডিরেক্টরিটি নিম্নলিখিত ডিরেক্টরিতে info.php যুক্ত করুন

নিম্নলিখিত বিষয়বস্তু সহ

<?php                                                                           
phpinfo();                                                                    
?>  

তারপরে আপনার ডিফল্ট এইচটিএমএল ডিরেক্টরিতে HTTP / অ্যাপাচি পুনরায় চালু করুন http://enter.server.here/info.php

পুরো পিএইচপি বংশ বিতরণ করবে!


3
এবং সেই আউটপুটে আমরা কোন পরিবর্তনশীল / মানটি খুঁজছি?
অ্যান্ড্রু

আমি নিশ্চিত যে আপনি এটি ইতিমধ্যে খুঁজে পেয়েছেন তবে সেই পৃষ্ঠায় "ব্যবহারকারীর" সন্ধান করবেন?
CRTLBREAK

0

আমার সেটআপে আমি প্রক্রিয়া শুরু করার আগে বর্তমান প্রক্রিয়াটিতে ফোল্ডার, সাবফোল্ডার এবং ফাইলগুলি তৈরি করার অনুমতি আছে কিনা তা যাচাই করতে চাই এবং সমাধানটি প্রস্তাব করার মতো মনে হয় যদি আমি না পারি। stat(<file>)চলমান প্রক্রিয়াটির সাথে অনুমতিগুলির সাথে মেলে তা নিশ্চিত করার জন্য আমি বিভিন্ন বিষয়ে চালনা করতে চেয়েছিলাম (আমি পিএইচপি-এফএমপি ব্যবহার করছি যাতে এটি পুলের উপর নির্ভর করে পরিবর্তিত হয়)।
মারিও উপরোক্ত পোস্টিক্স ভিত্তিক সমাধানটি নিখুঁত বলে মনে হচ্ছে, তবে মনে হচ্ছে এটি পসিক্স এক্সটেনশন - অক্ষম হয়েছে তাই আমি উপরেরটি করতে পারিনি এবং আমি 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 () বর্তমান ব্যবহারকারীকে ফিরিয়ে দেয় না । এটি স্ক্রিপ্টটির মালিককে ফিরিয়ে দেয় ফাংশনটি ডাকা হয়
অ্যাসেমেন্সে

-1

আমি সাধারণত ব্যবহার করি

<?php echo get_current_user(); ?>

এটি আপনাকে সহায়তা করলে আমি খুশি হব


এটি ইতিমধ্যে প্রশ্নের অধীনে মন্তব্যে উল্লেখ করা হয়েছে এবং এটি স্ক্রিপ্টের অধীনে চলছে এমন ব্যবহারকারীর সাথে তার খুব কম সম্পর্ক রয়েছে।
প্লেক

get_current_user() - Gets the name of the owner of the current PHP script- পিএইচপি প্রক্রিয়া চালিত ব্যবহারকারী নয়
ফ্রান্সিসকো জারাবোজো

-1
$_SERVER["USER"]

$_SERVER["USERNAME"] 

echo $_SERVER["USER"];কাজ করে তবে এসএসএইচ-এ ব্যবহারকারীর নাম লগইন করে।
তারিক

-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
?>


বিবরণ

উপরের কোড-হাইলাইটিংটি সঠিক নয়, দয়া করে আপনার প্রিয় সম্পাদকটিতে অনুলিপি করুন এবং পেস্ট করুন এবং পিএইচপি কোড হিসাবে দেখুন, বা এটি নিজে সংরক্ষণ করুন এবং পরীক্ষা করুন।

আপনি সম্ভবত জানেন যে, get_current_user()"বর্তমান চলমান স্ক্রিপ্ট" এর মালিককে ফেরত দেয় - সুতরাং আপনি যদি সার্ভারে কোনও স্ক্রিপ্ট ওয়েব-সার্ভার-ব্যবহারকারীর কাছে "ছেঁকা" না করেন তবে সম্ভবত এটি সম্ভবত "কেউ নেই", অথবা যদি বিকাশকারী- ব্যবহারকারী একই ওএসে বিদ্যমান, এটি বরং সেই ব্যবহারকারীর নামটি প্রদর্শন করবে।

এটির কাজ করার জন্য, আমরা বর্তমান চলমান প্রক্রিয়া সহ একটি ফাইল তৈরি করি। আপনি যদি কেবল require()চলমান চলমান স্ক্রিপ্টটিতে এটি করেন তবে এটি উল্লিখিত হিসাবে পিতাম-স্ক্রিপ্টের মতোই ফিরে আসবে; সুতরাং, কার্যকর করার জন্য আমাদের এটি একটি পৃথক অনুরোধ হিসাবে চালানো দরকার।

প্রক্রিয়া প্রবাহ

এটি কার্যকর করার জন্য, "রানটাইম-মোড" অন্তর্ভুক্ত এমন একটি নকশার প্যাটার্ন চালানো বিবেচনা করুন, সুতরাং যখন সার্ভারটি "বিকাশ-মোড বা টেস্ট-মোড" এ থাকে তখন কেবল এটি এই ফাংশনটি চালাতে পারে এবং এর আউটপুটটিকে কোথাও অন্তর্ভুক্ত করে সংরক্ষণ করতে পারে , - অথবা কেবল সরল পাঠ্য বা ডাটাবেস বা যে কোনও।

আপনি আরও কোডটিকে আরও গতিশীল করার ইচ্ছে হিসাবে অবশ্যই উপরের কোডের কয়েকটি বিবরণ পরিবর্তন করতে পারেন তবে যুক্তিটি নিম্নরূপ:

  • অন্যান্য ব্যবহারকারীর সাথে হস্তক্ষেপ সীমাবদ্ধ করতে একটি অনন্য রেফারেন্স সংজ্ঞায়িত করুন
  • অস্থায়ী ফাইল লেখার জন্য একটি স্থানীয় ফাইল-পাথ নির্ধারণ করুন
  • এই ফাইলটিকে নিজস্ব প্রক্রিয়াতে চালানোর জন্য একটি সর্বজনীন url / পাথ সংজ্ঞায়িত করুন
  • অস্থায়ী পিএইচপি ফাইল লিখুন যা স্ক্রিপ্টের মালিকের নামকে ছাড়িয়ে যায়
  • এটিতে অনুরোধ করে এই স্ক্রিপ্টটির আউটপুট পান
  • এখন আর দরকার না হওয়ায় ফাইলটি মুছুন - বা আপনি চাইলে ছেড়ে দিন
  • ফাংশনের রিটার্ন-মান হিসাবে অনুরোধের আউটপুট ফেরত দিন

-1
<?php phpinfo(); ?>

info.php এবং হিসাবে সংরক্ষণ করুন

আপনার ব্রাউজারে info.php খুলুন

ctrl + f এর পরে এগুলির যে কোনওটি টাইপ করুন:

APACHE_RUN_USER
APACHE_RUN_GROUP
user/group

আপনি দেখতে পাচ্ছেন যে ব্যবহারকারী এবং গ্রুপ অ্যাপাচি চলছে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.