Nginx 403 সমস্ত ফাইলের জন্য নিষিদ্ধ


192

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

এনগিনেক্স www-ডেটা: www-ডেটা হিসাবে চলছে, এবং ডিফল্ট "EPEL এ nginx এ আপনাকে স্বাগতম" সাইট (রুটের মালিকানাধীন: 644 অনুমতি সহ রুট) লোড জরিমানা।

এনজিএনএক্স কনফিগারেশন ফাইলটিতে /etc/nginx/sites-enabled/*.conf- র জন্য একটি অন্তর্ভুক্ত নির্দেশিকা রয়েছে এবং আমার কাছে একটি কনফিগারেশন ফাইল রয়েছে উদাহরণ ডটকম.কম , এইভাবে:

server {
 listen 80;

 Virtual Host Name
 server_name www.example.com example.com;


 location / {
   root /home/demo/sites/example.com/public_html;
   index index.php index.htm index.html;
 }

 location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  PATH_INFO $fastcgi_script_name;
  fastcgi_param  SCRIPT_FILENAME  /home/demo/sites/example.com/public_html$fastcgi_script_name;
  include        fastcgi_params;
 }
}

পাবলিক_এইচটিএমএল www-ডেটা দ্বারা মালিকানা সত্ত্বেও: 2777 ফাইল অনুমতি সহ www- ডেটা, এই সাইট কোনও বিষয়বস্তু পরিবেশন করতে ব্যর্থ -

 [error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"

ব্যবহারকারীরা এনজিএনএক্স থেকে ৪০৩ এস পেয়ে অনেক অন্যান্য পোস্ট পেয়েছি, তবে বেশিরভাগ ক্ষেত্রে আমি রুবি / যাত্রীবাহী (যেটি আগে আমি আসলে সফল হয়েছিলাম) এর সাথে আরও জটিল সেটআপগুলি জড়িত থাকতে দেখেছি বা কেবলমাত্র প্রবাহের পিএইচপি যখন ত্রুটি পেয়েছি -এফপিএম জড়িত, তাই তারা মনে হয় খুব কম সাহায্য করেছে।

আমি এখানে কি নির্বোধ কিছু করেছি?


এই উত্তরটি পরীক্ষা stackoverflow.com/questions/16808813/...
sandes

উত্তর:


333

একটি অনুমতি প্রয়োজনীয়তা যা প্রায়শই অবহেলিত হয় তা হ'ল ব্যবহারকারীর সেই ফাইলটি অ্যাক্সেস করার জন্য কোনও ফাইলের প্রতিটি প্যারেন্ট ডিরেক্টরিতে এক্স অনুমতি প্রয়োজন। Www-ডেটা এক্স অ্যাক্সেসের জন্য /, / হোম, / হোম / ডেমো ইত্যাদির অনুমতিগুলি পরীক্ষা করুন। আমার অনুমান যে / হোম সম্ভবত 770 এবং www-ডেটা কোনও সাবডিরের কাছে যাওয়ার জন্য এটির মাধ্যমে চিডির করতে পারে না। যদি তা হয় তবে chmod o + x / home চেষ্টা করুন (বা যাই হোক দির অনুরোধটিকে অস্বীকার করছে)।

সম্পাদনা: কোনও পাথের সমস্ত অনুমতি সহজেই প্রদর্শন করতে আপনি ব্যবহার করতে পারেন namei -om /path/to/check


6
একই অবস্থা. আমার সেন্টোস 6 ইনস্টল করার সময়, / হোম / ইউজার ডায়ারগুলি ডিফল্টরূপে 700 এ সেট করা হয়।
jjt

2
এই লোকটি এটি সম্পর্কেও কথা বলেছেন: ( chmod -4 +x /mypathআমার জন্য কাজ করেছেন) nginxlibrary.com/403-forbmitted-error
পিটার

1
কেউ কি ব্যাখ্যা করতে পারেন যে এই আচরণটি অ্যাপাচি থেকে আলাদা কেন যা প্রতিটি প্যারেন্ট ডিরেক্টরিকে "x" অনুমতি থাকা প্রয়োজন না?!?!
জোশুয়া ডেভিড

3
এটি কোনও আলাদা নয়। মূল কারণ হিসাবে চালিত হলে আপাচি-র জন্য প্যারেন্ট ডিরেক্টরিগুলিতে এক্স অনুমতি প্রয়োজন হয় না reason
kolbyjack

আমি আমার ব্যক্তিগত ব্যবহারকারী গ্রুপে www-ডেটা ব্যবহারকারী যুক্ত করে এবং আমার মূল ব্যবহারকারী ফোল্ডারে একটি chmod 710 করছি up কবজির মতো কাজ করেছেন। (একটি ডেবিয়ান ভিত্তিক ডিস্ট্রোতে)
বেসডেডস

299

আপনি যদি permission deniedপিতামাত ফোল্ডারগুলির অনুমতি যাচাই করার পরে এখনও দেখতে পান তবে এটি সেলইনাক্স অ্যাক্সেসকে সীমাবদ্ধ করে থাকতে পারে ।

SELinux চলছে কিনা তা পরীক্ষা করতে:

# getenforce

পরবর্তী রিবুট হওয়া পর্যন্ত SELinux অক্ষম করতে:

# setenforce Permissive

Nginx পুনরায় চালু করুন এবং দেখুন সমস্যাটি স্থির থাকে কিনা। Nginx কে আপনার www ডিরেক্টরিতে পরিবেশন করার অনুমতি দেওয়ার জন্য (এটি পরীক্ষা করার আগে আপনি SELinux আবার চালু করেছেন তা নিশ্চিত করুন ie যেমন, setenforce Enforcing)

# chcon -Rt httpd_sys_content_t /path/to/www

আরও তথ্যের জন্য আমার উত্তর এখানে দেখুন


1
আমি open() "/usr/share/nginx/logs/xxxxxx.com-error_log" failed (13: Permission denied)অনুমতিগুলি যাচাই করেছিলাম এবং এটি রুট হিসাবে শুরু হচ্ছে কিনা তা নিশ্চিত করে কেন আমি যখনই এনজিঙ্কস শুরু করেছি তখন তা কেন বুঝতে পারি না । আমি এটি পেরিয়ে এসে সেলিনাক্স সক্ষম করে পেয়েছি। আমি এটিকে অক্ষম করেছি এবং এখন এটি কোনও সমস্যা করে না। ধন্যবাদ!
ub3rst4r

1
ধন্যবাদ! আমি এখনও ব্যবহারকারীদের তাদের নিজস্ব FPM সকেট মালিক জন্য অস্বীকৃত অনুমতি রয়েছে এমন একটি সমস্যা ছিল তাই আমি পরিবর্তন করে যে এক সমাধানের জন্য পেরেছিলেন userথেকে nginx থেকে রুট মধ্যে /var/nginx/nginx.conf- সম্ভবত যে এই সমস্যা জুড়ে আসে আর ইচ্ছার সাহায্যের কেউ। দ্বিতীয় অংশের জন্য ডেটা সাইচে এস / ও
শীতকাল

11
এটি CentOS 7 এও পূর্বনির্ধারিত আচরণ।
টিমাস

4
আমি মন্তব্য করেছি এমন প্রত্যেকের সাথে রয়েছি। আমি আমার কম্পিউটারটি জানালার বাইরে ফেলে দিতে প্রস্তুত ছিলাম। এনগিনেক্স সঠিকভাবে কনফিগার করা হয়েছিল, অনুমতিগুলি যেখানে যথাযথভাবে সেট করা হয়েছিল, আমি এমনকি সমস্ত কিছু 77 777 করতে পেরেছি এবং এখনও অনুমতি পেয়েছি ত্রুটি অস্বীকার করে।
ডিউফিয়াল

2
সেন্টোস 7-এ (সেলইনাক্স সক্ষম), আমার জন্য সবচেয়ে সহজ setsebool httpd_read_user_content onসমাধানটি ছিল (হোম ডিরেক্টরি থেকে হোস্টেট স্ট্যাটিক ফাইলগুলির জন্য, বিশ্বের পাঠযোগ্য chmod'ed) - যদিও আমি অনুমান করি @ কাপাইটাইনউইটবার্ডের পদ্ধতিটি আরও সুরক্ষিত।
টিমস্টলে

63

আমি ব্যবহারকারী সেটিংস যোগ করে এই সমস্যাটি সমাধান করেছি।

nginx.conf এ

worker_processes 4;
user username;

লিনাক্স ব্যবহারকারীর নামের সাথে 'ব্যবহারকারীর নাম' পরিবর্তন করুন।


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

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

2
ব্যবহারকারীর গোষ্ঠীটিও যুক্ত করতে হবে: ব্যবহারকারীর গোষ্ঠী।
গ্যাব্রিয়েল এ। জোরিলা

আমার জন্যও কাজ করেছেন (ঠিক যেমন ডির টু এনডিন্স: এনজিনেক্স)। যদিও আমি এই সমাধানটি পছন্দ করি তবে আমার ডকুমেন্টের মূলটি এনজিনেক্সের চেয়ে অন্য কোনও ব্যবহারকারীর মালিকানাধীন থাকতে পারে। এটি উল্লেখ করার জন্য অ্যান্ডারসনকে ধন্যবাদ।
কেভিডিভি

আমার দিন বাঁচিয়েছে। উপায় দ্বারা কী যদি মেশিনটির একাধিক ব্যবহারকারী থাকে এবং প্রতিটি ব্যবহারকারীর নিজস্ব ওয়েবসাইট থাকে তবে আমি কীভাবে এটি ব্যবহার করব?
psychok7

38

আমি এই ত্রুটি পেয়েছি এবং অবশেষে এটি নীচের কমান্ড দিয়ে সমাধান করেছি।

restorecon -r /var/www/html

সমস্যাটি তখন ঘটে যখন আপনি কোনও জায়গা থেকে অন্য জায়গায় এমভি করেন। এটি সরিয়ে নিয়ে গেলে এটি আসলটির সেলিনাক্স প্রসঙ্গটি সংরক্ষণ করে, সুতরাং আপনি যদি / ঘরে বা / টিএমপি-তে কিছু খোঁজাখুঁজি না করে থাকেন তবে এটি একটি সেলিনাক্স প্রসঙ্গ দেওয়া হবে যা তার অবস্থানের সাথে মেলে। এখন আপনি এইটিকে / ভার্ / www / এইচটিএমএল করতে এমভি করেছেন এবং এটি প্রসঙ্গটি গ্রহণ করে বলে যে এটি এর সাথে / টিএমপি বা / হোম অন্তর্ভুক্ত এবং HTD নীতি দ্বারা এই ফাইলগুলিতে অ্যাক্সেসের অনুমতি নেই।

আপনি যদি এমভিের পরিবর্তে ফাইলগুলি সিপি করেন তবে সেলিনাক্স প্রসঙ্গটি আপনি যে জায়গাতে অনুলিপি করছেন সে অনুসারে নির্ধারিত হবে, কোথা থেকে আসছে তা নয়। পুনরুদ্ধার করা চালানো প্রসঙ্গটিকে তার ডিফল্টে ফিরিয়ে দেয় এবং এটিও ঠিক করে দেয়।


1
ধন্যবাদ @ জসিনা, এটি আমাকে অনেক সাহায্য করেছে
পঙ্কজ গার্গ

1
ধুর, +1 টি , আমাকে খুব।
jww

24

আমি বিভিন্ন কেস চেষ্টা করেছি এবং কেবল তখনই যখন মালিককে এনগিনেক্স ( chown -R nginx:nginx "/var/www/myfolder") সেট করা হয়েছিল - এটি প্রত্যাশা অনুযায়ী কাজ করা শুরু করে।


1
আমার জন্যও কাজ করেছেন। আমার সন্দেহ হয় এটি ঘটেছে কারণ যদিও এনজিনেক্স রুট হিসাবে শুরু করা হয়েছে, এটি nginx.conf ফাইলে নির্দিষ্ট করা ব্যবহারকারীর অধীনে প্রসেসগুলিকে উত্সাহ দেয় যা "ইউজার এনগিনেক্স;" গতানুগতিক. অ্যান্ডারসনের পরামর্শ অনুসারে আপনার দস্তাবেজের মূল মালিকানাধীন ব্যবহারকারীকে ব্যবহারকারীর পরিবর্তন করা উচিত।
কেভিডিভি

মিঃ অ্যান্ডারসন? না! অ্যান্ড্রন;)
অ্যান্ড্রন

আফসোস মিঃ অ্যান্ড্রন;) যদিও আগের মন্তব্যটি আমি আর সম্পাদনা করতে পারি না ...
কেভিডিভি

অবশ্যই, কোনও সমস্যা নয়। এখন আমি আন্ডারসন হিসাবে ছিলাম :) এবং কয়েকটি রূপকথার গল্প লিখতে হবে ...
অ্যান্ড্রন

1
এটি কি সুরক্ষার সমস্যা নয়?
gontard

6

আপনি যদি সেলইনাক্স ব্যবহার করে থাকেন তবে কেবল টাইপ করুন:

sudo chcon -v -R --type=httpd_sys_content_t /path/to/www/

এটি অনুমতি ইস্যু ঠিক করবে।


1

পুরানো প্রশ্ন, তবে আমার একই সমস্যা ছিল। আমি উপরের প্রতিটি উত্তর চেষ্টা করেছিলাম, কিছুই কার্যকর হয়নি। এটি আমার জন্য কী ঠিক করেছে যদিও এটি ডোমেনটি সরিয়ে নিয়ে আবার এটি যুক্ত করা হয়েছিল। আমি প্লেস্ক ব্যবহার করছি, এবং ডোমেইনটি ইতিমধ্যে থাকার পরে আমি এনগিনেক্স ইনস্টল করেছি।

প্রথমে স্থানীয় / ব্যাক / ডাব্লু / ব্যাকআপগুলিতে স্থানীয় ব্যাকআপ নিয়েছে। সুতরাং আমি সহজেই ফাইলগুলি অনুলিপি করতে পারি।

অদ্ভুত সমস্যা ....


1

আমাদের একই সমস্যা ছিল, প্লেস্ক অনিক্স 17 ব্যবহার করে rights

usermod -aG psacln nginx

এখন এনজিনেক্সের .htaccess বা সামগ্রীটি সঠিকভাবে প্রদর্শনের জন্য প্রয়োজনীয় অন্য কোনও ফাইল অ্যাক্সেস করার অধিকার রয়েছে।

অন্যদিকে, স্থির বিষয়বস্তু পরিবেশন করতে অ্যাপাচি psaserv গ্রুপে রয়েছে তা নিশ্চিত করুন:

usermod -aG psaserv apache

এবং প্লেস্কে অ্যাপাচি এবং এনগিনেক্স উভয়ই পুনরায় চালু করতে ভুলবেন না! (এবং Ctrl-F5 সহ পৃষ্ঠাগুলি পুনরায় লোড করুন)


এটি সঠিক উত্তর এবং এটি usermod -aG username www-dataবেশিরভাগ সেটআপে।
ডারিও জাদ্রো

0

ভুলভাবে setfaclকমান্ডটি চালিয়ে এই সমস্যাটির বিষয়ে আমি নিজেকে একটি সামান্য বৈকল্পিকের মধ্যে খনন করেছি । আমি দৌড়েছি:

sudo setfacl -m user:nginx:r /home/foo/bar

গোষ্ঠীতে যোগ nginxকরার পক্ষে আমি এই রুটটি ত্যাগ করেছি foo, কিন্তু সেই কাস্টম এসিএল ফাইলটি অ্যাক্সেস করার জন্য এনজিএনএক্সের প্রচেষ্টা বানচাল করছে। আমি এটি চালিয়ে সাফ করেছি:

sudo setfacl -b /home/foo/bar

এবং তারপরে nginx ফাইলগুলি অ্যাক্সেস করতে সক্ষম হয়েছিল।


0

আপনি যদি পিএইচপি ব্যবহার করে indexথাকেন তবে নিশ্চিত হয়ে নিন যে সার্ভার ব্লকে থাকা এনজিআইএনএক্স নির্দেশিকায় একটি সূচক রয়েছে ph

index index.php index.html;

আরও তথ্যের জন্য সরকারী ডকুমেন্টেশনে সূচী নির্দেশিকাতে চেকআউট করুন ।


0

আমি একই সমস্যার মুখোমুখি হয়েছি কিন্তু উপরের সমাধানগুলি কোনও উপকার করেছিল না।

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

sudo setenforce 0

আশা করি এটি আমার মতো কাউকে সহায়তা করবে।


যদিও এটি আপনার সমস্যার সমাধান করতে পারে - সংযুক্তি! - এটি কিছুটা দুঃখজনক :-( স্টপডিসাব্লিংসেলিনাক্স ডটকম দেখুন - আপনি কি অন্যরকম কাজ করতে পারবেন?
অ্যাঙ্গাস আয়ারল্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.