লারাভেলের জন্য ফাইল অনুমতি কীভাবে সেট আপ করবেন?


232

আমি অ্যাপাচি ওয়েব সার্ভার ব্যবহার করছি যা মালিক সেট করেছে _www:_www। ফাইল অনুমতি নিয়ে সেরা অনুশীলন কোনটি আমি কখনই জানি না, উদাহরণস্বরূপ যখন আমি নতুন লারাভেল 5 প্রকল্প তৈরি করি।

লারাভেল 5 এর /storageলিখনযোগ্য হওয়ার জন্য ফোল্ডারটি দরকার । এটিকে কাজ করার জন্য আমি প্রচুর বিভিন্ন পন্থা পেয়েছি এবং আমি সাধারণত এটিকে 777পুনরাবৃত্তভাবে chmod করে শেষ করি । আমি জানি এটি যদিও সেরা ধারণা নয়।

অফিসিয়াল ডক বলেছেন:

ল্যারাভেলকে কনফিগার করার জন্য কিছু অনুমতি প্রয়োজন হতে পারে: ফোল্ডারগুলির মধ্যে storageএবং vendorওয়েব সার্ভারের মাধ্যমে লেখার অ্যাক্সেসের প্রয়োজন হয়।

এর অর্থ কি এই যে ওয়েব সার্ভারের নিজের storageএবং vendorফোল্ডারগুলিতে খুব বেশি বা কেবল তাদের বর্তমান সামগ্রীতে অ্যাক্সেসের প্রয়োজন আছে ?

আমি ধরে নিই যে আরও বেশি ভাল, অনুমতিগুলির পরিবর্তে মালিককে পরিবর্তন করা হচ্ছে । আমি লারাভেলের সমস্ত ফাইলের অনুমতিগুলিকে পুনরাবৃত্তিতে পরিবর্তন করেছি _www:_wwwএবং এটি সাইটকে সঠিকভাবে কাজ করে, যেন আমি chmod এ পরিবর্তন করেছি 777। সমস্যাটি হ'ল এখন আমার পাঠ্য সম্পাদক আমাকে প্রতিবার কোনও ফাইল সংরক্ষণ করতে চাইলে আমাকে পাসওয়ার্ডের জন্য জিজ্ঞাসা করেন এবং আমি যদি ফাইন্ডারে কিছু পরিবর্তন করার চেষ্টা করি, যেমন উদাহরণস্বরূপ একটি ফাইল অনুলিপি করুন same

এই সমস্যাগুলি সমাধানের সঠিক পদ্ধতি কী?

  1. পরিবর্তন chmod
  2. ওয়েব সার্ভারের সাথে মেলে ফাইলগুলির মালিককে পরিবর্তন করুন এবং সম্ভবত পাসওয়ার্ড জিজ্ঞাসা করতে এড়াতে পাঠ্য সম্পাদক (এবং সন্ধানকারী?) সেট করুন, বা সেগুলি ব্যবহার করুন sudo
  3. ওএস ব্যবহারকারীর সাথে মেলে ওয়েব সার্ভারের মালিককে পরিবর্তন করুন (এর পরিণতি আমি জানি না)
  4. অন্যকিছু

4
আমি মনে করি 777খুব বেশি স্বাধীনতা, কারণ এতে প্রত্যেকের জন্য সমস্ত অনুমতি রয়েছে।
রোবো রোবক

লারাভেল ডক্স থেকে: ডিরেক্টরিগুলির মধ্যে ডিরেক্টরি storageএবং bootstrap/cacheডিরেক্টরিগুলি আপনার ওয়েব সার্ভারের দ্বারা লিখিত হতে হবে
joshuamabina

1
এফসিগি ব্যবহার করুন এবং আপনি সবার জন্য 755/644 করতে পারেন (জনসাধারণ / স্টোরেজ সহ)
জেফজ

@jww একমত আমরা কি প্রশ্নটি চেপে ধরে রাখার পরিবর্তে সার্ভারফল্টে স্থানান্তর করতে পারি?
wp78de

উত্তর:


586

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

যদি আপনি আপনার ফোল্ডারের অনুমতিগুলি 777-এ সেট করে থাকেন তবে আপনি যে কোনওটিকে নিজের সার্ভারটি খুলতে পারবেন যা এই ডিরেক্টরিটি আবিষ্কার করতে পারে। যথেষ্ট পরিষ্কার??? :)

আপনার মালিকানা এবং অনুমতিগুলি সেটআপ করার জন্য মূলত দুটি উপায় রয়েছে। হয় আপনি নিজেকে মালিকানা দিন বা আপনি ওয়েবਸਰভারকে সমস্ত ফাইলের মালিক বানান।

মালিক হিসাবে ওয়েবসভার (বেশিরভাগ লোকেরা যেভাবে এটি করেন এবং লারাভেল ডকের উপায়):

www-ডেটা ধরে নেওয়া (এটি অন্য কিছু হতে পারে) আপনার ওয়েবসার্ভার ব্যবহারকারী।

sudo chown -R www-data: www-data / path / to / your / laravel / root / ডিরেক্টরি

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

sudo ব্যবহারকারীর -a -G www-ডেটা উবুন্টু

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

তারপরে আপনি আপনার সমস্ত ডিরেক্টরি 755 এবং আপনার ফাইলগুলি 644 তে সেট করেছেন ... ফাইলের অনুমতিগুলি সেট করুন

sudo সন্ধান / পথ / থেকে / আপনার / লারাভেল / রুট / ডিরেক্টরি-টাইপ এফ-এক্সেক chmod 644 {} \;    

SET ডিরেক্টরি অনুমতি

sudo সন্ধান / পথ / থেকে / আপনার / লারাভেল / মূল / ডিরেক্টরি-টাইপ ডি-এক্সেক chmod 755 {} \;

মালিক হিসাবে আপনার ব্যবহারকারী

আমি সমস্ত ডিরেক্টরি এবং ফাইলের মালিক হতে পছন্দ করি (এটি সবকিছু দিয়ে কাজ করা আরও সহজ করে তোলে), তাই আমি করি:

sudo chown -R আমার-ব্যবহারকারী: www-ডেটা / পাথ / থেকে / আপনার / লারাভেল / রুট / ডিরেক্টরি

তারপরে আমি নিজের এবং ওয়েব সার্ভার উভয়েরই অনুমতি দেব:

sudo সন্ধান / পথ / থেকে / আপনার / লারাভেল / মূল / ডিরেক্টরি-টাইপ এফ-এক্সেক chmod 664 64} \;    
sudo সন্ধান / পথ / থেকে / আপনার / লারাভেল / মূল / ডিরেক্টরি-টাইপ ডি-এক্সেক chmod 775 {} \;

তারপরে স্টোর এবং ক্যাশে পড়া ও লেখার অধিকার ওয়েবসারকে দিন

আপনি যে কোনও উপায়ে এটি সেট আপ করেন, তারপরে আপনার স্টোর, ক্যাশে এবং অন্য কোনও ডিরেক্টরি ওয়েবসভারকে আপলোড বা খুব বেশি লেখার জন্য (আপনার অবস্থার উপর নির্ভর করে) ওয়েবসারভারকে পড়ার এবং লেখার অনুমতি দেওয়া দরকার, সুতরাং উপরের বাশী থেকে কমান্ডগুলি চালনা করুন:

sudo chgrp -R www-ডেটা স্টোরেজ বুটস্ট্র্যাপ / ক্যাশে
sudo chmod -R ug + rwx স্টোরেজ বুটস্ট্র্যাপ / ক্যাশে

এখন, আপনি সুরক্ষিত এবং আপনার ওয়েবসাইট কাজ করে এবং আপনি ফাইলগুলি মোটামুটি সহজেই কাজ করতে পারেন


4
দুর্দান্ত উদাহরণ, যদি কোনও www-ডেটা ব্যবহারকারী নেই, তবে অ্যাপাচি ব্যবহার করুন:
www-

53
আমি মনে করি লোকেরা anyoneধারণাটিকে খুব বেশি ভুল বুঝে । লিনাক্সের anyoneপতাকাটির অর্থ কোনও ব্যবহারকারী নয়, কোনও ব্যবহারকারী । আপনার এখনও সার্ভার অ্যাক্সেস প্রয়োজন।
মার্কো অরেলিও দেলেউ

3
@ andreshg112 প্রথম www-ডেটা ব্যবহারকারীর নাম এবং দ্বিতীয় www-ডেটা গ্রুপটির নাম। সুতরাং এর অর্থ মালিক অ্যাপাচি এবং (এই গোষ্ঠী) অ্যাপাচি। Www-ডেটা: www-ডেটা ব্যবহার করুন বা আপনার ব্যবহারকারীকে সেই গোষ্ঠীতে যুক্ত করুন। (সিএলআই: ইউজারডড-জি {গ্রুপ-নাম} ব্যবহারকারীর নাম), এবং আপনি যেভাবে ব্যবহারকারীর নাম হিসাবে ডেকে আনতে পারেন:
www-

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

3
প্রথম পদ্ধতিতে, আপনি writeগ্রুপটি অনুমতি না দেওয়ার পরেও কি ব্যবহারকারী ফাইল আপলোড করতে পারবেন না ?
ফাহমি

44

স্পষ্ট সুরক্ষার কারণে storagevendorফোল্ডারগুলির জন্য অনুমতি থাকা উচিত 775

যাইহোক, আপনার কম্পিউটার এবং আপনার সার্ভার উভয় অ্যাপাচি এই ফোল্ডারে লিখতে সক্ষম হওয়া প্রয়োজন। উদাহরণস্বরূপ: আপনি যখন কমান্ডগুলি চালনা করেন তখন php artisanআপনার কম্পিউটারে লগ ইন ফাইলটিতে লিখতে হবে storage

আপনাকে যা করতে হবে তা হ'ল আপাচে ফোল্ডারগুলির মালিকানা দেওয়া:

sudo chown -R www-data:www-data /path/to/your/project/vendor
sudo chown -R www-data:www-data /path/to/your/project/storage

তারপরে আপনাকে usernameসার্ভার আপাচে যে গ্রুপে অন্তর্ভুক্ত রয়েছে তার সাথে আপনার কম্পিউটারটি (এটি দ্বারা রেফারেন্স করা ) যুক্ত করা দরকার। তাই ভালো :

sudo usermod -a -G www-data userName

উল্লেখ্য: সবচেয়ে ঘন ঘন, groupNameহয় www-dataকিন্তু আপনার ক্ষেত্রে, এটা প্রতিস্থাপন_www


10
+1 আমি এই পদ্ধতির পছন্দ করি। তবে আমি বিশ্বাস করি chownকমান্ডগুলিতে -আর পতাকা অন্তর্ভুক্ত করা উচিত। এছাড়াও, ল্যারাভেল 5.1 এবং 5.2 এ, বিক্রেতা ডিরেক্টরি পরিবর্তে, আপনাকে বুটস্ট্র্যাপ / ক্যাশে ডিরেক্টরিতে অ্যাক্সেস দেওয়া উচিত।
জেসন হুইলারের

এটি ঠিকঠাক কাজ করবে কিনা তা পরীক্ষা করার কোনও উপায় আছে? আমার অর্থ যদি নতুন লগ ফাইলটি স্টোরেজ / লগগুলিতে তৈরি করা হয় তবে এর সঠিক অনুমতি থাকতে পারে আমি কীভাবে এটি পরীক্ষা করতে পারি?
চৌধুরীর ওয়াকাস

20

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

আমি খুঁজে পেয়েছি যে লিনাক্স এসিএল ব্যবহারের একমাত্র বুদ্ধিমান ও সুরক্ষিত সমাধান। এই সমাধানের লক্ষ্যটি হ'ল:

  1. যার প্রয়োগ / মালিকানা প্রয়োগকারী সেই ব্যবহারকারীকে লারাভেল অ্যাপ্লিকেশন কোডটিতে অ্যাক্সেস পড়ার এবং লেখার অনুমতি দেওয়ার জন্য (আমরা নামের একজন ব্যবহারকারী ব্যবহার করি deploy)।
  2. অনুমতি দিতে www-dataLaravel আবেদন কোডে ব্যবহারকারী পড়ার অ্যাক্সেস, কিন্তু না লেখার অ্যাক্সেস।
  3. অন্য কোনও ব্যবহারকারীকে মোটেই লারাভেল অ্যাপ্লিকেশন কোড / ডেটা অ্যাক্সেস করা থেকে বিরত রাখতে।
  4. অনুমতি দিতে উভয় www-dataব্যবহারকারী এবং ব্যবহারকারীর অ্যাপ্লিকেশন ( deployস্টোরেজ ফোল্ডারে) লেখার অ্যাক্সেস নির্বিশেষে যার ব্যবহারকারী ফাইল মালিক (উভয় তাই deployএবং www-dataউদাহরণস্বরূপ একই লগ ফাইল লিখতে পারেন)।

আমরা নিম্নলিখিত হিসাবে এটি সম্পাদন:

  1. মধ্যে সব ফাইল application/ফোল্ডার ডিফল্ট umask সঙ্গে নির্মিত 0022, যা না থাকার ফোল্ডার ফলাফল drwxr-xr-xঅনুমতি ও থাকার ফাইল -rw-r--r--
  2. sudo chown -R deploy:deploy application/(বা কেবল deployব্যবহারকারী হিসাবে আপনার অ্যাপ্লিকেশন স্থাপন করুন , যা আমরা তা করি)।
  3. chgrp www-data application/www-dataঅ্যাপ্লিকেশনটিতে গ্রুপ অ্যাক্সেস দিতে ।
  4. chmod 750 application/deployব্যবহারকারীকে পড়ার / লেখার অনুমতি দেওয়ার জন্য , কেবল www-dataব্যবহারকারীকে পঠনযোগ্য, এবং অন্য কোনও ব্যবহারকারীর সমস্ত অনুমতি সরিয়ে দিতে।
  5. setfacl -Rdm u:www-data:rwx,u:deploy:rwx application/storage/storage/ফোল্ডার এবং সমস্ত সাবফোল্ডারগুলিতে ডিফল্ট অনুমতিগুলি সেট করতে । স্টোরেজ ফোল্ডারে তৈরি হওয়া যে কোনও নতুন ফোল্ডার / ফাইলগুলি এই অনুমতিগুলির ( rwxউভয় www-dataএবং উভয়ের জন্য deploy) উত্তরাধিকারী হবে ।
  6. setfacl -Rm u:www-data:rwX,u:deploy:rwX application/storage/ যে কোনও বিদ্যমান ফাইল / ফোল্ডারে উপরের অনুমতিগুলি সেট করতে।

15

ডিরেক্টরিতে থাকা গ্রুপের মধ্যে যে কোনও ব্যবহারকারীর পড়া / লেখার / এক্সিকিউটিভ সক্ষম করতে আপনার প্রকল্প ফোল্ডারের জন্য অনুমতিগুলি পরিবর্তন করুন (যা আপনার ক্ষেত্রে রয়েছে _www):

chmod -R 775 /path/to/your/project

তারপরে আপনার ওএস এক্স এর ব্যবহারকারীর নামটি _wwwডিরেক্টরিতে অ্যাক্সেস করার জন্য গোষ্ঠীতে যুক্ত করুন:

sudo dseditgroup -o edit -a yourusername -t user _www

যখন আমি কি dseditgroupআপনার প্রদত্ত, আমি একটি ত্রুটি পেয়ে করছি: Username and password must be provided.
রোবো রোবক

আমার ভুল, আপনাকে সেই আদেশটি কোনও ব্যবহারকারীর সাথে চালানো দরকার যার উপযুক্ত অনুমতি রয়েছে, সুতরাং sudoশুরুতে কেবল যুক্ত করুন ।
বোগদান

তাহলে আমার কি সেই ফাইলগুলির মালিক _www:_wwwবা myuser:_wwwতার পাশাপাশি পরিবর্তন করা দরকার ?
রোবো রোবক

আপনি এটি ছেড়ে দিতে পারেন _www:_www, কারণ 775 এর অর্থ গ্রুপটির যে কোনও ব্যবহারকারীর _wwwthat ফোল্ডারে পড়ার / লেখার / এক্সট্যাক্ট করার সম্পূর্ণ অনুমতি থাকবে এবং আপনি কেবলমাত্র সেই গোষ্ঠীতে আপনার ব্যবহারকারী নামটি যুক্ত করেছেন।
বোগদান

একটা কথা বলতে পারো? এর অর্থ কী chown myuser:_www? আমি জানি প্রথমটি ব্যবহারকারী এবং দ্বিতীয়টি হ'ল গ্রুপটি, তবে এর অর্থ কি "এই ব্যবহারকারী এবং এই গ্রুপের কেউই" বা "কেবল এই গ্রুপের সাথে এই ব্যবহারকারী তবে"
রোবো রোবক

8

ইতিমধ্যে পোস্ট হিসাবে

আপনাকে যা করতে হবে তা হ'ল আপাচে ফোল্ডারগুলির মালিকানা দেওয়া:

তবে আমি chown কমান্ডের জন্য -আর যোগ করেছি : sudo chown -R www-data:www-data /path/to/your/project/vendor sudo chown -R www-data:www-data /path/to/your/project/storage


3
কেন আমাদের বিক্রেতা ডিরেক্টরিতে অনুমতি দিতে হবে? স্টোরেজ বোধগম্য, লগ ফাইল লিখতে, ইত্যাদি। কিন্তু বিক্রেতা? কেন?
আলী হারিস

যেমনটি কিছু মন্তব্যে উপরে লেখা হয়েছে: "তবে, আপনার কম্পিউটার এবং আপনার সার্ভার অ্যাপাচি উভয়ই এই ফোল্ডারে লিখতে সক্ষম হওয়া দরকার Ex উদাহরণস্বরূপ: আপনি যখন পিএইচপি আর্টিসানের মতো কমান্ডগুলি চালনা করেন তখন আপনার কম্পিউটারে স্টোরেজে লগ ফাইলটিতে লেখার প্রয়োজন হয়।"
স্ট্যানিস্লাভ পোটাপেনকো

ম্যাকের ক্ষেত্রে ত্রুটি: ছাঁটাই: www-ডেটা: অবৈধ গোষ্ঠীর নাম
সুনীল কুমার


7

বেশিরভাগ ফোল্ডারগুলি "755" এবং ফাইলগুলি "644" হওয়া উচিত

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

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

6

Laravel 5.4 ডক্স বলে,

লারাভেল ইনস্টল করার পরে আপনার কিছু অনুমতি কনফিগার করতে হবে। ডিরেক্টরিগুলির মধ্যে ডিরেক্টরি storageএবং bootstrap/cacheডিরেক্টরিগুলি আপনার ওয়েব সার্ভারের দ্বারা লিখিত হতে হবে বা লারাভেল চলবে না। আপনি যদি হোমস্টেড ভার্চুয়াল মেশিন ব্যবহার করছেন তবে এই অনুমতিগুলি ইতিমধ্যে সেট করা উচিত।

এই পৃষ্ঠায় অনেকগুলি উত্তর রয়েছে যা 777অনুমতি ব্যবহারের কথা উল্লেখ করে । এটা করবেন না। আপনি নিজেকে হ্যাকারদের সামনে তুলে ধরছেন।

পরিবর্তে, 755 (বা আরও সীমাবদ্ধ) এর অনুমতি কীভাবে সেট করবেন সে সম্পর্কে অন্যদের পরামর্শ অনুসরণ করুন। আপনার অ্যাপটি whoamiটার্মিনালে চালিয়ে কোন ব্যবহারকারী হিসাবে চলছে তা নির্ধারণ করার প্রয়োজন হতে পারে এবং তারপরে নির্দিষ্ট ডিরেক্টরিগুলির ব্যবহারের মালিকানা পরিবর্তন করতে হবে chown -R

আপনার যদি sudoঅন্য অনেক উত্তরের প্রয়োজন হিসাবে ব্যবহার করার অনুমতি না পান ...

আপনার সার্ভার সম্ভবত একটি ভাগ করা হোস্ট যেমন ক্লাউডওয়েস।

(আমার ক্ষেত্রে, আমি আমার দ্বিতীয় ক্লাউডওয়ে সার্ভারে আমার লারাভেল অ্যাপ্লিকেশনটি ক্লোন করে দিয়েছিলাম এবং এটি সম্পূর্ণরূপে কাজ করছে না কারণ ডিরেক্টরি storageএবং bootstrap/cacheডিরেক্টরিগুলির অনুমতি বিভ্রান্ত হয়েছিল))

আমার ব্যবহার করা দরকার:

Cloudways Platform > Server > Application Settings > Reset Permission

তাহলে আমি php artisan cache:clearটার্মিনালে চালাতে পারতাম ।


6

Composer.json এ যুক্ত করুন

"scripts": {
    "post-install-cmd": [
      "chgrp -R www-data storage bootstrap/cache",
      "chmod -R ug+rwx storage bootstrap/cache"
    ]
}

পরে composer install


2
এটি একটি খারাপ উত্তর। আপনি যদি ওয়েবসারভারটি সঠিকভাবে কনফিগার করেছেন তবে কোনও ফোল্ডারের জন্য আপনার কখনই 77 77 to ব্যবহার করার দরকার নেই। কোনও হ্যাকার কোনও ফাইল আপলোড করার জন্য upload Using7 ব্যবহার করে আপনার সার্ভারটি খোলে এবং যদি ফোল্ডারটি বিদ্যমান থাকে তবে তারা যদি জানত তবে ফাইলটি কার্যকর করুন।
এমবোজউড

2
ঠিক আছে. আপনি কি দিতে চাইছেন?
ডেভরন আচিলভ

এবং যদি তাই হয়, এটা ঠিক হবে? ডোবা -আর $ ব্যবহারকারী:
www-

সঠিক উত্তরটি দেখুন, এতে সমস্ত প্রয়োজনীয় তথ্য রয়েছে যা আপনি পোস্ট-আপডেটে একেবারে রাখতে পারেন :)
এমবোজউড

4

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

ডিফল্টরূপে, অ্যাপাচি 644 অনুমতি নিয়ে ফাইল তৈরি করবে। সুতরাং এটি স্টোরেজ /। সুতরাং, আপনি যদি স্টোরেজ / ফ্রেমওয়ার্ক / দর্শনগুলির বিষয়বস্তু মুছেন, তবে অ্যাপাচি এর মাধ্যমে একটি পৃষ্ঠা অ্যাক্সেস করুন আপনি দেখতে পাবেন ক্যাশেড ভিউটি তৈরি করা হয়েছে যেমন:

-rw-r--r-- 1 www-data www-data 1005 Dec  6 09:40 969370d7664df9c5206b90cd7c2c79c2

আপনি যদি "কারিগর পরিবেশন" চালান এবং কোনও ভিন্ন পৃষ্ঠাতে অ্যাক্সেস করেন তবে আপনি আলাদা অনুমতি পাবেন কারণ CLI পিএইচপি অ্যাপাচি থেকে আলাদা আচরণ করে:

-rw-rw-r-- 1 user     www-data 16191 Dec  6 09:48 2a1683fac0674d6f8b0b54cbc8579f8e

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

এইটি www-ডেটা হিসাবে কারিগর কমান্ডগুলি চালিয়ে আংশিকভাবে প্রশমিত করা যেতে পারে, সুতরাং আপনি সমস্ত কিছু / স্ক্রিপ্টিং এর মতো করে যাবেন:

sudo -u www-data php artisan cache:clear

অথবা আপনি এর ক্লান্তি এড়াতে পারবেন এবং এটি আপনার .বাশ_আলিয়াসগুলিতে যুক্ত করুন:

alias art='sudo -u www-data php artisan'

এটি যথেষ্ট ভাল এবং কোনওভাবেই সুরক্ষা প্রভাবিত করছে না। তবে ডেভলপমেন্ট মেশিনে, পরীক্ষা চালানো এবং স্যানিটেশন স্ক্রিপ্টগুলি এটিকে অযৌক্তিক করে তোলে, যদি না আপনি phpunit চালানোর জন্য 'sudo -u www-data' ব্যবহারের জন্য উপকরণ স্থাপন করতে চান এবং এর সাথে আপনার বিল্ডগুলি যাবতীয় যাচাই করে যা ফাইলগুলি তৈরি হতে পারে।

সমাধানটি হ'ল বগলস পরামর্শের দ্বিতীয় অংশটি অনুসরণ করা এবং নিম্নলিখিতগুলিকে / ইত্যাদি / অ্যাপাচি 2 / এনভ্যাওয়ারগুলিতে যুক্ত করুন এবং অ্যাপাচি পুনরায় চালু করুন (পুনরায় লোড করবেন না):

umask 002

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

আপনার ব্যবহারকারী যেহেতু www-ডেটা গ্রুপে রয়েছে এবং এই ফাইলগুলি সমেত সমস্ত ডিরেক্টরি g + s (ফাইলটি সর্বদা পিতামাতার ডিরেক্টরিতে তৈরি করা হয়), ব্যবহারকারীর দ্বারা বা www-ডেটা দ্বারা তৈরি যে কোনও কিছু হবে r / অন্যের জন্য ড।

এবং এটি এখানে লক্ষ্য।

সম্পাদন করা

অনুমতিগুলি আরও সেট করার বিষয়ে উপরের পদ্ধতির তদন্ত করার পরে, এটি এখনও যথেষ্ট ভাল দেখাচ্ছে তবে কয়েকটি টুইটগুলি সহায়তা করতে পারে:

ডিফল্টরূপে, ডিরেক্টরিগুলি 775 এবং ফাইলগুলি 664 হয় এবং সমস্ত ফাইলে কেবলমাত্র ফ্রেমওয়ার্কটি ইনস্টল করা ব্যবহারকারীর মালিক এবং গ্রুপ থাকে। সুতরাং ধরে নেওয়া যাক আমরা যে বিন্দু থেকে শুরু।

cd /var/www/projectroot
sudo chmod 750 ./
sudo chgrp www-data ./

প্রথমটি আমরা যা করি তা হ'ল অন্য সবার অ্যাক্সেসকে ব্লক করা এবং গ্রুপটিকে www-ডেটা হিসাবে তৈরি করা। কেবলমাত্র www-ডেটার মালিক এবং সদস্যরা ডিরেক্টরিটি অ্যাক্সেস করতে পারবেন।

sudo chmod 2775 bootstrap/cache
sudo chgrp -R www-data bootstrap/cache

অফিসিয়াল লারাভেল ইনস্টলেশন গাইডের পরামর্শ অনুসারে, ওয়েবসভারকে পরিষেবাদি.জসন এবং সংকলিত.এফপি তৈরির অনুমতি দেওয়ার জন্য। গোষ্ঠীটিকে স্টিকি বিট সেট করার অর্থ এইগুলি www-ডেটার একটি গ্রুপ সহ স্রষ্টার মালিকানাধীন।

find storage -type d -exec sudo chmod 2775 {} \;
find storage -type f -exec sudo chmod 664 {} \;
sudo chgrp -R www-data storage

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

আপনার কোনও এক্সিকিউটেবল ফ্ল্যাগ পুনরায় প্রয়োগ করতে হবে এবং বিক্রেতার / * মুছতে হবে এবং পিপুনিট এবং আল এর লিঙ্কগুলি পুনরায় তৈরি করতে সুরকার নির্ভরতা পুনরায় ইনস্টল করতে হবে, যেমন:

chmod +x .git/hooks/*
rm vendor/*
composer install -o

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

শেষ সম্পাদনা

সিস্টেমডের জন্য পরিবর্তনসমূহ

এটি পিএইচপি-এফএমপি ব্যবহারের ক্ষেত্রে প্রযোজ্য, তবে অন্যরাও হতে পারে।

স্ট্যান্ডার্ড সিস্টেমেড সার্ভিসটি ওভাররাইড করা দরকার, ওমরাইড.conf ফাইলে উমাস্ক সেট করা হয়েছে এবং পরিষেবাটি পুনরায় চালু করা দরকার:

sudo systemctl edit php7.0-fpm.service
Use:
    [Service]
    UMask=0002
Then:
sudo systemctl daemon-reload
sudo systemctl restart php7.0-fpm.service

3

এটি আমার পক্ষে কাজ করেছে:

cd [..LARAVEL PROJECT ROOT]
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod -R 777 ./storage
sudo chmod -R 777 ./bootstrap/cache/

এর মানে কি:

  • সমস্ত ফাইলের অনুমতিগুলি 644 এ পরিবর্তন করুন
  • সমস্ত ফোল্ডারের অনুমতিগুলি 755 এ পরিবর্তন করুন
  • স্টোরেজ এবং বুটস্ট্র্যাপ ক্যাশের জন্য (ফাইলগুলি তৈরি এবং চালানোর জন্য লারাভেল দ্বারা ব্যবহৃত বিশেষ ফোল্ডারগুলি, বাইরে থেকে পাওয়া যায় না) ভিতরে কোনও কিছুর জন্য 7 777 এ অনুমতি নির্ধারণ করুন

দ্রষ্টব্য: সম্ভবত আপনি এটি sudo উপসর্গ দিয়ে না করতে পারেন, বা প্রয়োজন নেই। এটি আপনার ব্যবহারকারীর অনুমতি, গোষ্ঠী ইত্যাদির উপর নির্ভর করে ...


2

আমি প্রকল্পগুলি স্থাপনের ব্যথা কিছুটা কমিয়ে আনার জন্য আমার নিজের স্ক্রিপ্টটি লেখার সিদ্ধান্ত নিয়েছি।

আপনার প্রকল্পের মূলের ভিতরে নিম্নলিখিতটি চালান:

wget -qO- https://raw.githubusercontent.com/defaye/bootstrap-laravel/master/bootstrap.sh | sh

বুটস্ট্র্যাপিংটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন এবং আপনি যেতে ভাল।

ব্যবহারের আগে স্ক্রিপ্টটি পর্যালোচনা করুন


2

আমি ইসি 2 ইভেন্টে ল্যারাভেল ইনস্টল করেছি এবং অনুমতি ত্রুটিটি ঠিক করতে এবং শেষ পর্যন্ত এটি ঠিক করতে 3 দিন ব্যয় করেছি। তাই আমি এই অভিজ্ঞতাটি অন্য একজনের সাথে ভাগ করতে চাই।

  1. ব্যবহারকারীর সমস্যা আমি যখন ইসি 2 উদাহরণটিতে লগইন করেছি, তখন আমার ব্যবহারকারীর নামটি ইসি-ব্যবহারকারী এবং ব্যবহারকারী গোষ্ঠীটি ইসি 2-ব্যবহারকারী। এবং ওয়েবসাইটটি httpd ব্যবহারকারীর আওতাধীন: অ্যাপাচি: অ্যাপাচি এর অধীনে কাজ করে যাতে আমাদের অ্যাপাচের অনুমতি নির্ধারণ করা উচিত।

  2. ফোল্ডার এবং ফাইল অনুমতি A. ফোল্ডারের কাঠামো প্রথমে, আপনার অবশ্যই স্টোরের আওতায় এই জাতীয় ফোল্ডার কাঠামো রয়েছে তা নিশ্চিত হওয়া উচিত

    স্টোরেজ

    • ফ্রেমওয়ার্ক
      • ক্যাশে
      • সেশন
      • মতামত
    • লগগুলি আপনার ব্যবহৃত লারাভেল সংস্করণ অনুযায়ী ফোল্ডারটির কাঠামো আলাদা হতে পারে। আমার ল্যারাভেল সংস্করণ 5.2 এবং আপনি আপনার সংস্করণ অনুযায়ী উপযুক্ত কাঠামো খুঁজে পেতে পারেন।

বি অনুমতি প্রথমে ফাইল_পুট_কন্টেন্টস সরানোর জন্য স্টোরেজের অধীনে 7 set7 সেট করার নির্দেশাবলীটি দেখছি: স্ট্রিম ত্রুটিটি খুলতে ব্যর্থ হয়েছে। সুতরাং আমি স্টোড chmod -R 777 স্টোরেজটিতে 777 অনুমতি সেটআপ করেছি তবে ত্রুটিটি স্থির হয়নি। এখানে, আপনার একটি বিবেচনা করা উচিত: কে স্টোরেজ / সেশন এবং ভিউগুলিতে ফাইল লেখেন। এটি ইক 2-ব্যবহারকারী নয়, তবে অ্যাপাচি। হ্যাঁ ঠিক. "অ্যাপাচি" ব্যবহারকারী সেশনটিতে ফাইল (সেশন ফাইল, সংকলিত ভিউ ফাইল) লিখে ফোল্ডারটি দেখুন। সুতরাং আপনার এই ফোল্ডারে অনুমতি লিখতে অ্যাপাচি দেওয়া উচিত। ডিফল্টরূপে: সেলইনাক্স বলছেন / var / www ফোল্ডারটি কেবল অ্যাপাচি ডিমন দ্বারা কেবল পঠন করা উচিত।

সুতরাং এর জন্য, আমরা সেলিনাক্স 0: setenfor 0 হিসাবে সেট করতে পারি

এটি সাময়িকভাবে সমস্যার সমাধান করতে পারে তবে এটি মাইএসকিএল কাজ করে না। সুতরাং এটি এত ভাল সমাধান নয়।

আপনি এতে স্টোরেজ ফোল্ডারে একটি পঠন-লিখনের প্রসঙ্গ সেট করতে পারেন: (এটি পরীক্ষা করার জন্য 1 টি সেনটেনফোর্স মনে রাখবেন)

chcon -Rt httpd_sys_content_rw_t storage/

তাহলে আপনার সমস্যা ঠিক হয়ে যাবে।

  1. এবং এই সুরকার আপডেটটি পিএইচপি কারিগর ক্যাশে ভুলে যাবেন না: পরিষ্কার

    এই কমান্ডগুলি আগে বা তার আগে কার্যকর হবে।

    আমি আশা করি আপনি আপনার সময় সাশ্রয় করবেন শুভকামনা। Hacken


আপনি কি ওয়েব সার্ভার থেকে একটি কমান্ড লাইন স্ক্রিপ্ট কল করার চেষ্টা করেছিলেন? এটি কোনও আউটপুট মুদ্রণ না করায় আমার সমস্যা হচ্ছে
Volatil3

0

আমার নিম্নলিখিত কনফিগারেশন ছিল:

  • এনজিআইএনএক্স (চলমান ব্যবহারকারী nginx:)
  • পিএইচপি-FPM

@ বিজিএস হিসাবে গৃহীত উত্তরে প্রস্তাবিত হিসাবে অনুমতিগুলি সঠিকভাবে প্রয়োগ করেছেন। আমার ক্ষেত্রে সমস্যাটি ছিল পিএইচপি-এফপিএমের কনফিগার করা চলমান ব্যবহারকারী এবং গোষ্ঠী যা মূলত ছিল apache

আপনি যদি পিএইচপি-এফএমপি দিয়ে এনজিআইএনএক্স ব্যবহার করছেন তবে আপনার পিএইচপি-এফপিএম এর কনফিগার ফাইলটি খুলতে হবে:

nano /etc/php-fpm.d/www.config

এবং একটি এনজিআইএনএক্সের সাথে প্রতিস্থাপন userএবং groupবিকল্পগুলির মানটি কাজ করার জন্য কনফিগার করা হয়েছে; আমার ক্ষেত্রে, উভয়ই ছিলেন nginx:

... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ...

এটি সংরক্ষণ করুন এবং nginx এবং php-fpm পরিষেবাগুলি পুনরায় চালু করুন।


0

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

এখানে আমি কাজগুলি করেছি এবং শেষে একটি সফল ফলাফল পেয়েছি।

  1. sudo find /path/to/your/laravel/root/directory -type f -exec chmod 664 {} \;
    sudo find /path/to/your/laravel/root/directory -type d -exec chmod 775 {} \;
  2. chcon -Rt httpd_sys_content_rw_t /path/to/my/file/upload/directory/in/laravel/project/
  3. ফ্লাইয়ে নতুন ডিরেক্টরি তৈরি করার সময়, আমি কমান্ডটি ব্যবহার করেছি mkdir($save_path, 0755, true);

প্রোডাকশন সার্ভারে এই পরিবর্তনগুলি করার পরে, আমি সফলভাবে নতুন ডিরেক্টরি তৈরি করেছি এবং তাদের কাছে ফাইলগুলি সরিয়ে নিয়েছি।

অবশেষে, আপনি যদি লারাভেলে ফাইলের মুখোমুখি ব্যবহার করেন তবে আপনি এরকম কিছু করতে পারেন: File::makeDirectory($save_path, 0755, true);


-1

আমি এর একটি আরও ভাল সমাধান খুঁজে পেয়েছি। এর কারণ হ'ল পিএইচপি ডিফল্টরূপে অন্য ব্যবহারকারী হিসাবে চলমান।

তাই এই কাজ ঠিক করতে

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

তারপরে সম্পাদনা করুন user = "put user that owns the directories" group = "put user that owns the directories"

তারপর:

sudo systemctl reload php7.0-fpm


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

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