Nginx এ ভার্চুয়াল হোস্ট প্রতি ব্যবহারকারী


31

ভার্চুয়াল হোস্টে আলাদা ব্যবহারকারী কনফিগার করা কি এনজিনেক্সে সম্ভব?

কিছুটা এইরকম

 server {
     user myprojectuser myprojectgroup;
     ...
 }

উত্তর:


7

না, কারণ একটি এনজিএনএক্স কনফিগারেশনের সমস্ত সার্ভার স্তঞ্জগুলি একই কর্মী প্রক্রিয়া থেকে প্রস্তুত করা হয়। তদ্ব্যতীত, সুরক্ষার দৃষ্টিকোণ থেকে, আপনি এটির মতো চালানো আরও ভাল , কারণ এর অর্থ হ'ল সামগ্রীটি স্বয়ংক্রিয়ভাবে ওয়েবসার্ভার দ্বারা লিখিত হয় না (যেমন একটি অনুপস্থিত মূর্খতা chmod -R 0777), যাতে এনজিনেক্সে দুর্বলতা থাকলে, সামগ্রীর কোনওটিই নয় ঝুঁকিতে আছে.


2
সুতরাং অন্য ব্যবহারকারীদের থেকে ব্যবহারকারীর ফাইলগুলি আড়াল করার কোনও উপায় নেই? ব্যবহারকারীর সমস্ত সামগ্রী www-ডেটা দ্বারা পড়া উচিত?
অ্যালেক্স নেটকাচভ

1
ফাইলগুলিকে www-ডেটাতে অ্যাক্সেসযোগ্য করে তোলা (বা যে কোনও ব্যবহারকারীর ওয়েবসভার হিসাবে চালিত হয়) কোনওভাবেই ফাইলগুলি সিস্টেমের অন্যান্য ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য নয়।
ওম্বল

2
আপনি যখন www-dataভোস্ট 0710সেটআপ করবেন তখন ডকুমেন্টটিকে একটি গোষ্ঠী এবং গোপনীয়তা দিন (যেহেতু এনজিনেক্স কনফিগার করার জন্য এটির মূল প্রয়োজন, আপনার অটোমেশনটিও প্রয়োজনীয় অনুমতিগুলি সেট করে রাখার সমস্যা নেই)। তারপরে ডক্রোটের বিষয়বস্তু কেবল o+xডিরেক্টরি এবং o+rফাইলের জন্য হওয়া দরকার ।
ওম্বল

13
সাবধান: যদি কোনও পিএইচপি স্ক্রিপ্ট (বা সিজি-বিন প্রক্রিয়া) এর অধীনে চলে যায় www-data, পিএইচপি স্ক্রিপ্ট বা সিজি-বিন প্রক্রিয়া পরিবেশন করতে পারে এমন প্রতিটি ব্যবহারকারী ব্যবহারকারীর অ্যাক্সেসযোগ্য যে কোনও ফাইল অ্যাক্সেস করতে পারে www-data। এটি যে config.php.incকোনও অংশীদারি মেশিনে বা এর অনুরূপ ডেটাবেস পাসওয়ার্ড সংরক্ষণ করে এমন কারও কাছে এটি স্পষ্ট নয় বলে মনে হয় ।
ইভান ভুইসিকা

2
@ রিক্যালসিন মনে রাখবেন ইউএনআইএক্স একটি বহু-ব্যবহারকারী অপারেটিং সিস্টেম এবং সার্ভারে একাধিক ব্যবহারকারী থাকতে পারে। উদাহরণস্বরূপ, peterএবং john। তারা তাদের ওয়েব পৃষ্ঠাগুলি হোস্ট করছে ~/public_html। উপরে বর্ণিত লোকেদের দ্বারা বর্ণিত একটি ভিন্ন পদ্ধতির উপস্থিতি অনুপস্থিত, একটি। Php স্ক্রিপ্টের ওয়েব সার্ভারের মতো একই অনুমতি রয়েছে যেমন এটি এর অধীনেও কার্যকর হয় www-data। এর অর্থ হ'ল, ওয়েব সার্ভার এবং পিএইচপি ইন্টারপ্রেটারের মতো এটি অন্য কোনও। Php স্ক্রিপ্টটি পড়তে পারে।
ইভান ভুইকা

9

হ্যাঁ। অতিরিক্ত সুরক্ষার জন্য এটি সম্ভব এবং প্রস্তাবিত (নীচে কেন দেখুন)।

আপনি পিএইচপি-এফপিএম ব্যবহার করছেন তা বিবেচনা করে (আপনি সম্ভবত এটি সবচেয়ে সাধারণ হিসাবে), আপনি প্রতিটি ডোমেনের জন্য একটি পৃথক ব্যবহারকারীর মালিকানাধীন একটি স্পুল তৈরি করতে পারেন।

পিএস: আমি এখানে বিস্তারিত ধাপে ধাপে টিউটোরিয়াল লিখেছি:

https://learnwithdaniel.com/2019/06/user-per-virtual-host-nginx/

1. স্পুলস তৈরি করুন:

স্পুলগুলিতে যুক্ত করুন /etc/php/7.0/fpm/pool.d/www.confবা .confপ্রতিটি নতুন স্পুলের জন্য একটি নতুন ফাইল তৈরি করুন।

স্পুল # 1 (myuser1):

[myprojectuser1]
user = myuser1
group = myprojectgroup
..
listen = /run/php/myuser1.sock
...  
listen.owner = www-data
listen.group = www-data

স্পুল # 2 (myuser2):

[myprojectuser2]
user = myuser2
group = myprojectgroup
..
listen = /run/php/myuser2.sock
...  
listen.owner = www-data
listen.group = www-data

পিএস: আপনার শ্রবণ.আপনার / শুনুন.আরূপ একই nginx ব্যবহারকারীর কাছে রাখুন (সাধারণত www- ডেটা )।

2. প্রতিটি স্পুলকে তার সার্ভার ব্লকে বরাদ্দ করুন (অ্যাপাচি ব্যবহারকারীদের জন্য ভার্চুয়াল হোস্ট):

হোস্ট 1:

server {
  ...
  location ~ \.php$ {
    fastcgi_pass unix:/run/php/myuser1.sock;
  }
  ...
}

হোস্ট 2:

server {
  ...
  location ~ \.php$ {
    fastcgi_pass unix:/run/php/myuser2.sock;
  }
  ...
}

এফপিএম এবং এনজিআইএনএক্স পরিষেবা পুনরায় চালু করুন

sudo /etc/init.d/php7.0-fpm restart
sudo service nginx restart

পরীক্ষামূলক:

একটি pinfo.php (বা যে কোনও নাম) ফাইল তৈরি করুন যা বর্তমান প্রক্রিয়া ব্যবহারকারীকে দেখায়:

<?php 
echo str_replace("\n", '<br>', shell_exec('ps -u -p '.getmypid()));

বা বাশের মাধ্যমে pinfo.php ফাইলটি তৈরি করুন :

echo "<?php echo str_replace(\"\\n\", '<br>', shell_exec('ps -u -p '.getmypid()));" > pinfo.php

তারপরে আপনার ব্রাউজারে " http: //.../pinfo.php " খুলুন ।


একাধিক ব্যবহারকারী কেন ব্যবহার করবেন (সুরক্ষার কারণ):

আপনি যদি আপনার সমস্ত ওয়েবসাইট একই ব্যবহারকারীর অধীনে (www- ডেটা ) চালনা করেন তবে একটি পিএইচপি কল সিস্টেমে () / পাস্ত্র্রু () / এক্সিকিউটেড () সমস্ত ওয়েবসাইটে অ্যাক্সেস পাবে! এনজিআইএনএক্স আপনাকে এর বিরুদ্ধে রক্ষা করবে না। পিএইচপি কেবল একটি উদাহরণ, তবে যে কোনও জনপ্রিয় ওয়েবসার্ভার ভাষার অনুরূপ কল রয়েছে। হ্যাকার হিসাবে, আপনি সমস্ত ওয়েবসাইটের মধ্যে নেভিগেট করতে " এলএস .. " এবং যে কোনও ফাইলে (নিজস্ব ওয়েবসাইটের ফাইল সহ) নিজের কোড লিখতে " সিপি / প্রতিধ্বনি / এমভি " করতে পারেন। এমনকি সার্ভারের সমস্ত ওয়েবসাইট একই ব্যক্তির মালিকানাধীন (প্রাক্তন আপনি) প্রতিটি ওয়েবসাইটকে আলাদা ব্যবহারকারীর সাথে চালনা করার পরামর্শ দেওয়া হয়, কারণ এটি আপনার অন্যান্য ওয়েবসাইটগুলিতে অ্যাক্সেস করা থেকে হ্যাকার / ভাইরাস (প্রাক্তন ওয়ার্ডপ্রেস ভাইরাস) রোধ করবে।


5

উপরের দিকে ইভানের মন্তব্যের জবাবে এবং এটি ওপিতে প্রযোজ্য বলে মনে হচ্ছে। দুটি জিনিস:

  1. আবেদন নথি রুট ভালো কিছু হবে /blah/peterWeb/htmlএবং /blah/johnWeb/html। এনজিআইএনএক্স এবং অ্যাপাচি 2 উভয়ই ডিরেক্টরিতে www-ডেটা চালিয়ে গেলেও একজনকে অন্য ডিরেক্টরিতে প্রবেশ করতে বা পরিচালনা করতে দেয় না।

  2. প্রতিটি ডিরেক্টরি ট্রি তাদের নিজস্ব ব্যবহারকারীর অনুমতিতে স্থাপন করে প্রতিটি ব্যবহারকারীকে ইউএনআইএক্স সিস্টেমে ssh / লগইন করতে এবং তাদের ডিরেক্টরিগুলি প্রতিটিের জন্য ব্যক্তিগত রাখার অনুমতি দেয় - কেবল প্রতিটি ব্যবহারকারীকে www-ডেটা গ্রুপে রাখবেন না। আপনি যদি সম্মত হন তবে আপনার বাক্যটি:

    পিএইচপি স্ক্রিপ্ট বা সিজি-বিন প্রক্রিয়া পরিবেশন করতে পারে এমন প্রতিটি ব্যবহারকারী www-ডেটা ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য যে কোনও ফাইল অ্যাক্সেস করতে পারে।

    আরও নিখুঁত হিসাবে লিখিত হতে পারে:

    যে অ্যাপ্লিকেশন / এনগিনেক্স সার্ভার (www-ডেটা) হিসাবে আপনি একই গ্রুপে রেখেছেন এমন প্রতিটি ব্যবহারকারী তার অ্যাক্সেসযোগ্য যে কোনও ফাইলে (যা পিএইচপি স্ক্রিপ্ট চালানো সহ) যা খুশি করতে পারে (যা মূলত ওয়েবে সমস্ত কিছু হতে পারে) সার্ভার)।

সম্পাদনা 1: কিছু সার্ভার অ্যাডমিন সমস্যার সমাধান করার জন্য আমি আরও এই বিষয়টির দিকে নজর রেখেছি। ইভানের তথ্যটি কতটা সঠিক ছিল সে সম্পর্কে আমি অসচেতন ছিলাম! আপনি যদি ব্যবহারকারীদের একটি ভাগ করে নেওয়া হোস্টিং কনফিগারেশনে স্ক্রিপ্টগুলি আপলোড এবং চালানোর ক্ষমতা দিতে চান তবে সাবধান হন। এখানে একটি পদ্ধতি । আমি এই দুর্বলতাটি বুঝতে পেরেছি তা নিশ্চিত করার জন্য ইভানের কাছে টুপি টিপুন।


4
না। আপনি এটি মিস করছেন। পিএইচপি স্ক্রিপ্টস, যখন অ্যাপাচি প্রক্রিয়াতে কার্যকর করা হবে (বা অন্য ওয়েব সার্ভারের) হোস্টিং প্রক্রিয়া সুবিধার অধীনে চলবে। বিপুল সংখ্যক নিষ্পাপ সেটআপে এই ব্যবহারকারী www-data। যদি জনি কোনও স্ক্রিপ্ট তৈরি করতে পারে এবং এটি www-dataচালিয়ে যেতে পারে (যা নির্দোষ সেটআপগুলিতে সে করতে পারে), তবে জনিটির স্ক্রিপ্ট পিটারের স্ক্রিপ্টগুলি পড়তে এবং সেগুলি আবার জোনির কাছে প্রেরণ করতে পারে। দলগুলির সাথে এটির কোনও সম্পর্ক নেই। যথাযথ সমাধানটি হল suPHP (যদি নির্লজ্জভাবে সেটআপ করা হয় তবে খারাপ, খারাপভাবে লিখিত কোড হিসাবে এই ব্যবহারকারীর সমস্ত ফাইলই বিপন্ন করে তোলে), বা একটি জেল, বা ব্যবহারকারী হিসাবে অতিরিক্ত ওয়েব ব্যবহারকারীকে ডেডিকেটেড করা উচিত Proper
ইভান ভুইসিকা

(এছাড়াও, মন্তব্যের পরিবর্তে একটি উত্তর যুক্ত করা স্ট্যাকওভারফ্লো প্রকারের সাইটগুলির অপব্যবহার, আপনি প্রকৃতপক্ষে কোনও উত্তর সরবরাহ করছেন তা মুগ্ধ করুন that দয়া করে তা এড়িয়ে যান))
ইভান ভুইসিকা

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