Nginx: স্ট্যাট () ব্যর্থ হয়েছে (13: অনুমতি অস্বীকার)


103

আমার উবুন্টু 12.04 মেশিনে ইনস্টল করা এনজিনেক্স সহ নির্দিষ্ট ডিরেক্টরি যুক্ত করার সময় আমি ডিফল্ট কনফিগারেশনটি ব্যবহার করছি।

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                root /username/test/static;
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
...

...
}

আমি কেবল একটি সাধারণ স্ট্যাটিক এনজিন্স সার্ভারটি সেই ডিরেক্টরি থেকে ফাইলগুলি পরিবেশন করতে চাই। যাইহোক, error.logআমি দেখতে চেক

2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html

আমি ইতিমধ্যে সম্পন্ন করেছি chown -R www-data:www-dataউপর /username/test/static, আমি তাদের সেট করেছি chmod 755। আমি জানিনা আর কি সেট করা দরকার।


3
চেক www-dataব্যবহারকারী করতে পারেন cdকরতে /username/test/staticডিরেক্টরি:sudo -u www-data cd /username/test/static
Maciej SZ

আমি অনুমতি প্রত্যাখ্যান পাচ্ছি, কিন্তু যখন আমি
এলএস

2
এটি কি এমন হতে পারে যে / ব্যবহারকারীর নামটি এনক্রিপ্টে রয়েছে? আমার / হোম / ইউজারনেম ফোল্ডারের সাথে আমার সাইটটি ঠিক একই জায়গায় রয়েছে। যদি আমি এটিকে এনক্রিপ্টস থেকে সরিয়ে রাখি তবে সমস্ত কাজ ঠিক আছে। এখনও আমার জন্য কোনও সমাধান নেই ...
জর্জি 21

উত্তর:


193

Nginx ডিরেক্টরিটির মধ্যে কাজ করে, তাই আপনি যদি cdnginx ব্যবহারকারীর কাছ থেকে সেই ডিরেক্টরিতে না পারেন তবে এটি ব্যর্থ হবে ( statআপনার লগের আদেশ যেমন করে ) command নিশ্চিত করুন www-userকরতে পারেন cdসব পথ /username/test/static। আপনি নিশ্চিত করতে পারেন যে statদৌড় দিয়েই ব্যর্থ হবে বা সফল হবে

sudo -u www-data stat /username/test/static

আপনার ক্ষেত্রে সম্ভবত /usernameডিরেক্টরি এখানে সমস্যা। সাধারণত www-dataকরার অনুমতি নেই cdঅন্যান্য ব্যবহারকারীদের হোম ডিরেক্টরি হয়।

সেক্ষেত্রে সেরা সমাধানটি হ'ল গ্রুপে যুক্ত www-dataকরা username:

gpasswd -a www-data username

এবং নিশ্চিত করুন যে সেই usernameগোষ্ঠীটি সমস্ত দিকটি ডিরেক্টরিতে প্রবেশ করতে পারে:

chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static

আপনার পরিবর্তনগুলি কাজ করার জন্য, এনজিনেক্স পুনরায় চালু করুন

nginx -s reload

মূলটির সাথে যুক্ত প্রতিটি নতুন ডিরেক্টরিতে কি এর অর্থ, নতুন ডিরেক্টরিতে chmod করতে হবে?
কিয়ান চেন

2
@ এলজসকিউনচেন মনে রাখবেন যে এটি ওএস স্তরের অনুমতি ব্যবস্থা, সুতরাং পসিক্স সিস্টেমে এটি আপনার উপর নির্ভর করে umask। আপনার যদি আরও জেনেরিক সমাধানের প্রয়োজন হয় তবে এর জন্য chmodপ্রতিটি নতুন ডিরেক্টরি অন্তর্ভুক্ত করার প্রয়োজন নেই , তবে একটি সমাধান রয়েছে। এটা তোলে বিপরীত গ্রুপ এসোসিয়েশন (প্রয়োজন usernameথেকে www-dataগ্রুপ) এবং ব্যবহারের setgid। আরও বিস্তৃত বিবরণের জন্য নির্দ্বিধায় একটি নতুন প্রশ্ন পোস্ট করুন এবং আমি উত্তর দিতে খুশি হব।
ম্যাকিয়েজ এসজেড

আমার পাথ / রুট / ডিরেক্টরিতে থাকলে কী হবে? Chmod g + x on / root করা কি নিরাপদ? এবং রুট গ্রুপে www-ডেটা যুক্ত করছেন?
ওলেগ আব্রাজাইভ

ফেডোরায় 24 এ আমার সমস্যাটি ... এসিএল অনুমতি নিয়ে ... আরও একটি স্তর ... হ্যাঁ!
রে ফস

1
ভাল আমার nginxব্যবহারকারী আমার ওয়েবসাইট ডিরেক্টরি অ্যাক্সেস করতে সক্ষম করতে পারেন তবে তবুও এটি ত্রুটি লগগুলিতে অনুমতি অস্বীকার করার কথা বলে।
রহিল উজির

88

আমি ঠিক একটি CentOS 7 বাক্সে একই সমস্যা পেয়েছি।

মনে হচ্ছে আমি সেলিনাক্সকে আঘাত করব। সেলিনাক্সকে অনুমতিমূলক মোডে রেখে দেওয়া ( setenforce permissive) আপাতত সমস্যার জন্য কাজ করেছে। আমি চেষ্টা করব এবং একটি যথাযথ স্থির করে ফিরে আসব।


4
এই হ'ল "নথিভুক্ত নয়" আচরণটি আমি এই গত 3 দিনের জন্য বোঝার চেষ্টা করছিলাম ...
অ্যাচিলিস

2
এই আচরণ সম্পর্কে এখানে একটি পোস্ট দেওয়া হয়েছে: axilleas.me/en/blog/2013/…
অ্যাকিলিস

2
সুতরাং, আমি নিজেকে এখানে ফিরে পেয়েছি ... এবার আমি নিজের হোম ডিরেক্টরি থেকে এইচটিএমএল ডিরেক্টরিতে ফাইলটি প্রশ্নের মধ্যে অনুলিপি করেছি এবং মালিকানা আপডেট করেছি। 2015 হিসাবে একই সমস্যা ... আরও ভাল ফিক্স: ls -Z myFile.jsসেলইনাক্স প্রসঙ্গে প্রদর্শিত হবে: সেলইনাক্স সামগ্রী পরিবর্তন করতে -rw-r--r--. nginx nginx unconfined_u:object_r:user_home_t:s0 myFile.js ব্যবহার করুন chcon -v --type=httpd_sys_content_t myFile
অ্যান্ড্রু রিচার্ড মিলার

2
হা; আমারো একই ইস্যু ছিল. sudo setenforce 0এটা আমার জন্য স্থির কর
ওভারলোড 119

1
কেবলমাত্র একটি নোট, আপনি যদি সেলিনাক্স পুরোপুরি অক্ষম করতে চান তবে আপনাকে পুনরায় বুট SELINUXকরার পরে মানটি disabledইন- তে পরিবর্তন করতে হবে /etc/selinux/config। এটি সেট করা হলে permissive, এটি পর্দার আড়ালে চেক চালাতে পারে (মূল্যবান সিপিইউ ব্যবহার করে), কিন্তু কোনও পদক্ষেপ নেয় না।
অলিভার ট্যাপিন

76

Nginx এর সাইটের মূল ডিরেক্টরিতে পরিচালিত সমস্ত ডিরেক্টরিতে + এক্স অ্যাক্সেস থাকা দরকার।

নিশ্চিত করুন যে সাইটের মূলের দিকে যাওয়ার পথে সমস্ত ডিরেক্টরিতে আপনার কাছে + এক্স রয়েছে। উদাহরণস্বরূপ, সাইটের মূলটি যদি / হোম / ব্যবহারকারীর নাম / সিটাররুট হয়:

chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot

13
6 ঘন্টা মরিয়া অনুসন্ধানের পরে ... পাওয়া লাশের সাথে এটি উল্লেখ করা হয়েছে তবে আপনি! ধন্যবাদ!
ওয়ালিদ আম্মার

3
তোমাকে অনেক ধন্যবাদ! এটি কাজ করার জন্য সময় ব্যয় করার সময় ব্যয় করেছে এবং সমস্ত প্রকারের উত্তর জুড়ে এসেছে, বিশ্বাস করা যায় না এটি এত সহজ!
এরিক বর

2
এই কাজটি আমার পক্ষে জরিমানা, সেন্টোস 7, পিএইচপি এফপিএম 7.2 (
সেলিনাক্স

1
ধন্যবাদ! পুরোটা সময় আমাকে করতে হয়েছিল এমনটাই বিশ্বাস করতে পারি না!
উত্তেজিত ট্যাবলেট

1
থ্যাঙ্কিউ, নিখুঁত!
সফটসফটার

32

সেন্টস 7.০-তে আমার সেলইনাক্স Access Deinedদ্বারা সৃষ্ট এই সমস্যা হয়েছিল এবং এই পদক্ষেপগুলি সমস্যার সমাধান করেছে:

yum install -y policycoreutils-devel
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

আপডেট: ডিজিটালোসিয়ানের ভার্চুয়াল লিনাক্স সার্ভারগুলি ব্যবহার করার সময় আমি কী শিখেছি বা সেগুলি ড্রপলেট হিসাবে ডাকে কেবল তার পক্ষের নোট । SELinux ব্যবহারের জন্য একটি শালীন পরিমাণের র্যাম প্রয়োজন। এটি সম্ভবত সম্ভবত আপনি 2 জিবি র‍্যামেরও কম র‌্যাম সহ একটি ফোঁটাতে সেলইনাক্স পরিচালনা করতে এবং পরিচালনা করতে পারবেন না ।


2
এটার জন্য অনেক ধন্যবাদ। এটি দিয়ে আমার সমস্যার সমাধান হয়েছে (সেন্টোস on-তেও) তবে এরপরে আমাকে অন্য কোথাও দ্বিতীয় অস্বীকৃতি দ্বারা অবরুদ্ধ করা হয়েছিল, তাই এটিকে অবলম্বন করলাম setenforce 0। যাইহোক, এই সমাধানটি আসলে কী করে তা পিছনে তাকানোর সময়, আমি বুঝতে পেরেছিলাম যে এনজিএনএক্স ব্যবহারকারীর জন্য অনুমতিগুলি আপডেট করার জন্য আমাকে কমান্ডগুলি পুনরায় চালানো দরকার। দেখে মনে হচ্ছে এটি কাজ করে এবং আমি সেলিনাক্সকে আবার প্রয়োগের জন্য সেট করতে পারি।
danj1974

ঠিক আছে, এটি কিছুটা দেরি হতে পারে। তবুও, এটি উল্লেখ করার মতো বিষয় যে আপনি যখন সেলইনাক্স প্রয়োগ করে রাখেন; এটি মনে রাখা জরুরী, এনগিনেক্সের মতো সফ্টওয়্যারগুলি তাদের নিজস্ব নিয়ম যেমন ডিফল্ট পোর্টস, ডিফল্ট পাথস, পাঠ / পড়ার পথে পাথের প্রবেশাধিকার ইত্যাদি সিলিনাক্সে সন্নিবেশ করে। আপনি যদি কোনও সমস্যা না চান তবে আপনাকে অবশ্যই এই নিয়মগুলি মেনে চলতে হবে (যেমন আপনার এইচটিএমএল / পিএইচপি ফাইলগুলিকে / var / www তে লাগিয়ে দেওয়া) অথবা অন্যথায় সেলইনাক্স প্রসঙ্গে গভীরভাবে উদ্ভূত সমস্যাগুলি কাটিয়ে উঠতে প্রস্তুত। এটি সহায়ক হতে পারে [CentOS <8]: getpagespeed.com/server-setup/nginx/nginx-selinux-configration
Achilles

27

আপনার সুরক্ষা-বর্ধিত লিনাক্স চলতে পারে, সুতরাং এর জন্য নিয়ম যুক্ত করুন। অনুমতিগুলি সেট করা এবং ব্যবহারকারীর অস্তিত্ব থাকা সত্ত্বেও আমার 13 টি ত্রুটি ছিল permission

chcon -Rt httpd_sys_content_t /username/test/static


ধন্যবাদ! CentOS রিলিজ 6.10 (ফাইনাল) এ কাজ করেছে।
marw

1
CentOS 7.5.1804 (কোর) এ কাজ করেছেন।
নাইক

4

উপসর্গ:

ওয়ার্ডপ্রেস মিডিয়া লাইব্রেরিতে চিত্র আপলোড করা যায়নি।

কারণ:

(সেন্টওএস) yum update

ত্রুটি:

2014/10/22 18:08:50 [crit] 23286#0: *5332 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied), client: 1.2.3.4, server: _, request: "POST /wp-admin/media-new.php HTTP/1.1", host: "example.com", referrer: "http://example/wp-admin/media-new.php"

সমাধান:

chown -R www-data:www-data /var/lib/nginx


2

ডিফল্টরূপে স্থিতিশীল ডেটা, আপনি যখন এনগিনেক্স ইনস্টল করবেন তখন / var / www / html এ থাকবেন। সুতরাং আপনি কেবল আপনার স্থিতিশীল ফোল্ডারটি / var / html / এ অনুলিপি করতে পারেন এবং সেট করতে পারেন

root /var/www/<your static folder>

ngix.conf এ (বা / etc / nginx / সাইটগুলি উপলব্ধ / ডিফল্ট)

এটি উবুন্টুতে আমার জন্য কাজ করেছিল তবে আমি অনুমান করি এটি অন্যান্য ডিস্ট্রোদের পক্ষে খুব বেশি আলাদা হওয়া উচিত নয়।

আশা করি এটা সাহায্য করবে.


2

আপনার nginx.conf userসম্পত্তি www-staticফাইল owener এ পরিবর্তন করুন ।

#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user your_user_name;

# same other config

1

আমি এই সমস্যার মুখোমুখি হয়েছি, আমি এনজিএনএক্স ব্যবহারকারীদের অনুমতি দেওয়ার জন্য এটি সমাধান করেছি এবং এরকম কিছু গ্রুপ করুন:

chown -R nginx:nginx /username/test/static

1

আমার ক্ষেত্রে, ফাইলগুলি যে ফোল্ডারটি পরিবেশন করেছিল তা হ'ল অন্য ফোল্ডারের একটি প্রতীকী লিঙ্ক

ln -sf /origin /var/www/destination

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


1

অবশেষে আমি আমার পথ খুঁজে পেলাম। সংক্ষেপে, আসুন আমরা বলি যে আপনার ব্যবহারকারীর নাম joeএবং আপনি নিজের ব্যক্তিগত ফাইল সিস্টেমের অধীনে একটি ওয়েবসাইট রাখেন /home/joe/path/to/website

আপনাকে আক্ষরিকভাবে সেই সিস্টেমটি বলতে হবে nginxযা আপনার পাল।
স্থাপন করুন nginxমধ্যে joeগ্রুপ:

sudo gpasswd -a nginx joe

এর পরে যদি এটি এখনও কাজ না করে, /home/joeডাইরেক্টরির ডান অ্যাক্সেস চেক করুন । এই কারণেই সম্ভবত এনগিনেক্স ফাইলটি না পৌঁছতে পারে কারণ তিনি এখন আপনার বন্ধু হলেও আপনাকে তাকে আপনার বাড়ির দরজা খুলতে হবে:

sudo chmod g+x /home/joe

এটাই. আক্ষরিক অর্থে আপনার স্থানীয় ফাইলগুলিতে এনজিনেক্স অ্যাক্সেস দেওয়ার জন্য আপনাকে যা করতে হবে :)

আমি মনে করি না যে এই পদ্ধতির সাথে সুরক্ষা উদ্বেগ রয়েছে কারণ nginxএটি উচ্চ কর্তৃপক্ষ এবং কেবলমাত্র কোনও প্রশাসকই গ্রুপটি পরিবর্তন করতে পারবেন। nginxএখন joeডিরেক্টরিতে কি পড়তে পারে । এটি কেবলমাত্র একটি সুরক্ষা লঙ্ঘন যদি আপনি nginxঅ্যাকাউন্টের ধারক ব্যবহারকারীর কাছ থেকে ডিরেক্টরি অ্যাক্সেসটি খুলেন তার সাথে আলাদা হয় তবে আমার ক্ষেত্রে আমি উভয় পক্ষের ধারক, এটি স্থানীয় প্রেক্ষাপটে।


0

আমার একই সমস্যা ছিল, আমি সেন্টস with এর সাথে প্লেস্ক অনিক্স 17 ব্যবহার করছি। আমি এই ত্রুটিটি প্রভাবিত ডোমেনের লগগুলির মধ্যে প্রক্সি_অরর_লগে দেখতে পেয়েছি। / Var / www / vhosts / এ থাকা সমস্ত ডায়ার / ফাইলগুলি সংশ্লিষ্ট ব্যবহারকারীদের (ডোমেনের মালিকদের) মালিকানাধীন এবং আপনি দেখতে পাচ্ছেন যে সেগুলি সমস্তই psacln গ্রুপে রয়েছে। সুতরাং সমাধানটি ছিল এই গ্রুপে এনজিনেক্স যুক্ত করা, যাতে তার কী প্রয়োজন তা তিনি দেখতে পারেন:

usermod -aG psacln nginx

এবং প্রকৃতপক্ষে, এনজিএনএক্স পুনরায় চালু করুন এবং পৃষ্ঠাটি Ctrl + F5 দিয়ে পুনরায় লোড করুন।


0

আমি আশেপাশে একটি কাজ পেয়েছি: আমার ক্ষেত্রে "/ ইত্যাদি / এনজিনেক্স / মাই-ওয়েব-অ্যাপ্লিকেশন" এ ফোল্ডারটিকে এনজিনেক্স কনফিগারেশন ফোল্ডারে সরানো হয়েছে। এবং তারপরে অনুমতিগুলি রুট ব্যবহারকারী "sudo chown -R রুট: রুট" মাই-ওয়েব-অ্যাপ "এ পরিবর্তিত করে।


0

কোন ইউজার এনগিনেক্স চালাবে তা আপনি যুক্ত করতে পারেন। Nginx.conf ফাইলটিতে নিম্নলিখিত পরিবর্তনগুলি করুন:

user root;

উপরের লাইনটি আপনার এনজিএনএক্স কনফেডের প্রথম লাইন হিসাবে যুক্ত করতে পারেন। আপনি যে কোনও ব্যবহারকারীর নাম লিখতে পারেন সেই ডিরেক্টরিতে লেখার অনুমতি রয়েছে।


0

এটি সাধারণত সুবিধার সমস্যা ... আমার জন্য এটি যেহেতু আমি / রুট / ** কে এনজিনেক্স মূল হিসাবে ব্যবহার করি, এটির জন্য উচ্চতর অধিকারের প্রয়োজন। একটি সহজ উপায় হ'ল প্রকল্পটি নিজের দ্বারা তৈরি ডিরেক্টরিতে সরিয়ে নেওয়া।

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