পিএইচপি কারও হিসাবে চলছে কিনা তা আমার সনাক্ত করা দরকার। আমি এটা কিভাবে করবো?
"কেউ নেই" এর জন্য অন্য কোনও নাম আছে? "Apache"? অন্য কেউ?
পিএইচপি কারও হিসাবে চলছে কিনা তা আমার সনাক্ত করা দরকার। আমি এটা কিভাবে করবো?
"কেউ নেই" এর জন্য অন্য কোনও নাম আছে? "Apache"? অন্য কেউ?
উত্তর:
প্রাপ্তিসাধ্য আপনি বর্তমান ব্যবহারকারীর অ্যাকাউন্ট অনুসন্ধানের করতে posix_geteuid
এবং তারপর ব্যবহারকারীর নাম পেতে posix_getpwuid
।
$username = posix_getpwuid(posix_geteuid())['name'];
আপনি যদি নিরাপদ মোডে চলছেন তবে (এক্সিকিউটি অক্ষম করা অবস্থায় এটি প্রায়শই ঘটে থাকে), তবে আপনার পিএইচপি প্রক্রিয়াটি ডিফল্ট www-data
বা apache
অ্যাকাউন্ট ব্যতীত অন্য কোনও কিছুতে চলছে কিনা এমন সম্ভাবনা কম ।
get_current_user()
র manpage যে এই পদ্ধতির শো। পিএইচপি 5.4 হিসাবে এটি এটিকে সংক্ষিপ্ত করা যেতে পারে:print posix_getpwuid(posix_geteuid())['name'];
<?php echo exec('whoami'); ?>
পিছনের দিকের ধরণ, তবে নির্বাহী / সিস্টেম ছাড়াই:
file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");
আপনি যদি কোনও ফাইল তৈরি করেন তবে মালিক হবেন পিএইচপি ব্যবহারকারী।
এটি সম্ভবত অস্থায়ী ফাইল ফাংশনগুলির সাথে চালানো যেতে পারে যেমন tempnam()
অস্থায়ী ডিরেক্টরিতে একটি এলোমেলো ফাইল তৈরি করে এবং সেই ফাইলটির নাম ফেরত দেয়। অনুমতিগুলি open_basedir
বা নিরাপদ মোডের মতো কোনও কারণে যদি সমস্যা থাকে যা কোনও ফাইল লিখতে বাধা দেয় তবে সাধারণত, অস্থায়ী ডিরেক্টরিটির অনুমতি দেওয়া হবে।
$temp_file = tempnam(sys_get_temp_dir(), 'TMP');
বেশিরভাগ সিস্টেমে অস্থায়ী ফাইল তৈরি করতে পারে। তারপরে আপনি সেই ফাইলটি ব্যবহারকারী / গোষ্ঠীটি পেতে ব্যবহার করতে পারেন। আমি এটির কিছু খুঁজে বের করতে ব্যবহারকারীর কাছে রেখেছি।
আরও বিশদ বিশদটি কার্যকর হবে, তবে ধরেই নেওয়া এটি একটি লিনাক্স সিস্টেম, এবং ধরে নিই যে পিএইচপি অ্যাপাচের অধীনে চলছে, এটি ব্যবহারকারী অ্যাপাচি যা চালায় তা চলবে।
চেক করার একটি সহজ উপায় (আবার পরিবেশের মতো কিছু ইউনিক্স ধরে ধরে) এই কোনও পিএইচপি ফাইল তৈরি করে:
<?php
print shell_exec( 'whoami' );
?>
যা আপনাকে ব্যবহারকারীকে দেবে।
আমার এডাব্লুএস উদাহরণস্বরূপ, আমি apache
এই স্ক্রিপ্টটি চালানোর সময় আমি আউটপুট হিসাবে পাচ্ছি।
আপনি এই জাতীয় ব্যাকটিক্স ব্যবহার করে দেখতে পারেন:
echo `whoami`;
আমি ব্যবহার করব:
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_
grep "APACHE_RUN_" /etc/apache2/envvars
ধন্যবাদ, ভাল কাজ করেছে।
exec('whoami')
এটি করবে
<?php
echo exec('whoami');
?>
সোজা শেল থেকে আপনি চালাতে পারেন:
php -r "echo exec('whoami');"
আপনার ডিফল্ট HTTP / অ্যাপাচি ডিরেক্টরি - সাধারণত ডিরেক্টরিতে / var / www / html - ডিরেক্টরিটি নিম্নলিখিত ডিরেক্টরিতে info.php যুক্ত করুন
নিম্নলিখিত বিষয়বস্তু সহ
<?php
phpinfo();
?>
তারপরে আপনার ডিফল্ট এইচটিএমএল ডিরেক্টরিতে HTTP / অ্যাপাচি পুনরায় চালু করুন http://enter.server.here/info.php
পুরো পিএইচপি বংশ বিতরণ করবে!
আমার সেটআপে আমি প্রক্রিয়া শুরু করার আগে বর্তমান প্রক্রিয়াটিতে ফোল্ডার, সাবফোল্ডার এবং ফাইলগুলি তৈরি করার অনুমতি আছে কিনা তা যাচাই করতে চাই এবং সমাধানটি প্রস্তাব করার মতো মনে হয় যদি আমি না পারি। stat(<file>)
চলমান প্রক্রিয়াটির সাথে অনুমতিগুলির সাথে মেলে তা নিশ্চিত করার জন্য আমি বিভিন্ন বিষয়ে চালনা করতে চেয়েছিলাম (আমি পিএইচপি-এফএমপি ব্যবহার করছি যাতে এটি পুলের উপর নির্ভর করে পরিবর্তিত হয়)।
মারিও উপরোক্ত পোস্টিক্স ভিত্তিক সমাধানটি নিখুঁত বলে মনে হচ্ছে, তবে মনে হচ্ছে এটি পসিক্স এক্সটেনশন - অক্ষম হয়েছে তাই আমি উপরেরটি করতে পারিনি এবং আমি whoami
পৃথক শেলের মধ্যে চলমান স্ট্যাট () দ্বারা প্রাপ্ত প্রতিক্রিয়ার সাথে ফলাফলগুলি তুলনা করতে চাই হয় সাহায্যকারী না (আমার ইউড প্রয়োজন এবং ইউজার নেমটি নয় গিড)।
তবে একটি দরকারী ইঙ্গিতটি পাওয়া যায় নি, আমি পারতাম stat(/proc/self)
এবং stat(/proc/self/attr)
এবং ইউআইডি দেখতে এবং ফাইলের GID।
আশা করি এটি অন্য কাউকে সাহায্য করবে
আপনি এই আদেশগুলি ব্যবহার করতে পারেন:
<? system('whoami');?>
অথবা
<? passthru('whoami');?>
অথবা
<? print exec('whoami');?>
অথবা
<? print shell_exec('whoami');?>
অথবা
<? print get_current_user();?>
আমি সাধারণত ব্যবহার করি
<?php echo get_current_user(); ?>
এটি আপনাকে সহায়তা করলে আমি খুশি হব
get_current_user() - Gets the name of the owner of the current PHP script
- পিএইচপি প্রক্রিয়া চালিত ব্যবহারকারী নয় ।
একটি দেরী দেরীতে, তবে নিম্নলিখিতটি প্রায় কাজ করার পরেও এটি প্রয়োজনীয়তা সমাধান করে কারণ এটি ঠিক কাজ করে:
<?
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()
চলমান চলমান স্ক্রিপ্টটিতে এটি করেন তবে এটি উল্লিখিত হিসাবে পিতাম-স্ক্রিপ্টের মতোই ফিরে আসবে; সুতরাং, কার্যকর করার জন্য আমাদের এটি একটি পৃথক অনুরোধ হিসাবে চালানো দরকার।
এটি কার্যকর করার জন্য, "রানটাইম-মোড" অন্তর্ভুক্ত এমন একটি নকশার প্যাটার্ন চালানো বিবেচনা করুন, সুতরাং যখন সার্ভারটি "বিকাশ-মোড বা টেস্ট-মোড" এ থাকে তখন কেবল এটি এই ফাংশনটি চালাতে পারে এবং এর আউটপুটটিকে কোথাও অন্তর্ভুক্ত করে সংরক্ষণ করতে পারে , - অথবা কেবল সরল পাঠ্য বা ডাটাবেস বা যে কোনও।
আপনি আরও কোডটিকে আরও গতিশীল করার ইচ্ছে হিসাবে অবশ্যই উপরের কোডের কয়েকটি বিবরণ পরিবর্তন করতে পারেন তবে যুক্তিটি নিম্নরূপ:
<?php phpinfo(); ?>
info.php এবং হিসাবে সংরক্ষণ করুন
আপনার ব্রাউজারে info.php খুলুন
ctrl + f এর পরে এগুলির যে কোনওটি টাইপ করুন:
APACHE_RUN_USER
APACHE_RUN_GROUP
user/group
আপনি দেখতে পাচ্ছেন যে ব্যবহারকারী এবং গ্রুপ অ্যাপাচি চলছে।
$user = $_SERVER['REMOTE_USER'];
http://php.net/manual/en/reserved.variables.server.php
প্রমাণীকৃত ব্যবহারকারী