انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: sonic69 در 17 مهر 1399، 06:33 بظ
-
سلام. هر کاری کردم نتونستم وسوسه نشم و دوباره سمت لینوکس نیام.
این دفعه سعی می کنم از مشکلات پیش روم فرار نکنم و با کمک شما حل کنم.
یکی از چیز هایی که خیلی منو اذیت می کنه دسترسی به پوشه wwww هست.
من قبلا با کمک دستور زیر دسترسی به پوشه رو اعمال می کردم
$ sudo chgrp -R www-data /var/www/html
$ sudo chmod g+w /var/www/html
$ sudo usermod $USER --append --groups www-data
اما مشکل میدونید چیه؟
زمانی مشکل دارم که از اسکرپت هایی استفاده می کنم که داخل خود اون برنامه قرار هست پوشه ای ایجاد بشه و ...
دهنم صاف میشه تا بخوام بیام دوباره دسترسی بدم و ...
راه حل منطقی و درستی وجود داره که بتونم به این پوشه دسترسی مناسب بدم که وسط کار نخوادمنو اذیت کنه؟
راستی خود شما اصلا برای این مشکل چی کار می کنید؟
-
فکر کنم SGID و دسترسی نوشتن برای Apache به نقاطی که فایل جدید قرار هست ایجاد بشه مشکل شما رو حل کنه. یا تو موارد پیچیده ACL.
یک پاسخ خوب اینجا هست (که البته مشکلاتی هم داره) ولی در کل دید خوب و کافی بهتون میده:
https://serverfault.com/a/357109/361399
-
مسلاد جان ممنونم از پاسخت
امکانش هست به زبان ساده تر خودت توضیح بدی؟ متاسفانه زبان انگلیسی خوبی ندارم
-
صفحه آپاچی (https://wiki.ubuntu.ir/wiki/%D8%A2%D9%BE%D8%A7%DA%86%DB%8C) رو به ویکی اضافه کردم.
سعی میکنم تا چند ساعت دیگه یک قسمت برای تنظیم سطوح دسترسی اضافه کنم.
اضافه شد.
احتمال اینکه توش اشتباه باشه هست.
دوستان دیگه هم باید بررسی کنند و در صورت لزوم صفحه رو بهبود بدن.
امیدوارم کمک کنه.
-
من از کدت استفاده کردم. اما همچنان خطای عدم دسترسی رو دریافت می کنم کلا! :((
-
باید اطلاعات بیشتری بهمون بدید... اینکه ساختار برنامه به چه صورت هست، خطا چیه؟ چه شاخههایی باید قابل نگارش باشند؟ کدوم کد رو روی کدوم شاخه اجرا کردید؟ سطح دسترسی شاخههای مرتبط چه هست؟
-
به نظرم جواب خوبی نیست و بیشتر میاد صورت مسئله رو پاک می کنه ولی خب کار راه اندازه
فکر کنم برای وب سرورتون میخواید به اون پوشه دسترسی داشته باشید
اگه وب سرورتون nginx هستش میتونید با تغییر فایل کانفیگش پوشه رو به محل دلخواهتون توی هوم خودتون تغییر بدید(من زیاد در این حیطه مهارت ندارم شاید دوستان بتونن بگن که این کار خطری داره یا نه)
اگر هم آپاچی هستش من زیاد باهاش کار نکردم اما احتمالا بشه حرکت مشابهی زد
-
باید اطلاعات بیشتری بهمون بدید... اینکه ساختار برنامه به چه صورت هست، خطا چیه؟ چه شاخههایی باید قابل نگارش باشند؟ کدوم کد رو روی کدوم شاخه اجرا کردید؟ سطح دسترسی شاخههای مرتبط چه هست؟
ساختار خاصی ندارم. اسکریپت هام رو داخل مسیر /var/www/html ایجاد می کنم.
کدم رو هم روی شاخه html اجرا کردم.
موقعی خطایی رو دریافت می کنم که خود اسکریپت سعی می کنه پوشه ای ایجاد یا حذف کنه!
-
منم یه همچین مشکلی رو موقع آپلود عکس داشتم : اگه داری لوکال کار میکنی باید مسیر ایجاد پوشه رو کمی تغیر بدی مثلا میخوای توی var/www/html یک پوشه به اسم test بسازی . باید مسیر ساختش اینشکلی باشه :
./test
یا ای پی ت رو با دستور ifconfig
بدست بیار و ادرس رو اینشکلی http://ip.ip.ip.ip/test
بنویس . هرچی هست از نحوه ی ادرس دهی توی ساخت هست (این کار موقعی جواب میده که به خود پوشه اصلی یعنی html و خود فایل اسکریپتتون دسترسی های لازم رو داده باشید!!!)
-
HusseinDTS منظورت رو متوجه نشدم
-
HusseinDTS منظورت رو متوجه نشدم
دقیقا کجاش رو متوجه نشدی؟
اصل موضوع اینه که چون پوشه ی html با دسترسی روت ساخته شده باید owner یا مالک پوشه رو یوزر خودت قرار بدی تا بتونی راحت تغیرات توی فایلات ایجاد کنی.
حالا میگم تو اول باید بری ببینی که خودت به پوشه ی html دسترسی داری یا نه این رو راحت میشه با دستور ls -l
توی پوشه ی www دید خروجی مال خودم رو میزارم :
drwxr-xr-x 3 husseindts root 4096 Oct 12 17:13 html
اگه دقت کنی اولی رو نوشته husseindts که نام کاربری منه . برای این کار باید توی پوشه ی www بزنی
sudo chown -R $USER ./html
بعد باید مطمن شی فایل اسکریپتت تمامی دسترسی های read , write و... رو داره برو توی پوشه ی html و دوباره دستور ls -l
رو بزن . مثلا من یه فایلی به اسم index.html دارم که خورجی ش اینجوری میشه : -rw-r--r-- 1 husseindts root 10918 Aug 20 18:16 index.html
که اشتباهه باید این قسمت -rw-r--r-- مثل بالایی باشه. برای اینکار بزن : sudo chmod 777 index.html
این کار دسترسی های لازم رو میده . بقیه اش هم اگه جواب نداد. همونطور که بالا گفتم باید با نحوه ی ادرس دهی برای ساخت پوشه ور بری مثلا برای آپرود عکس اینجوریه : move_uploaded_file("./location.of.file.png")
البته این تو زبان php هست اما کلیت کار یکی هست
-
فقط ifconfig یه مقدار قدیمی شده و بهتره از ip addr show یا ip addr list و... استفاده بکنید
-
فقط ifconfig یه مقدار قدیمی شده و بهتره از ip addr show یا ip addr list و... استفاده بکنید
راستش من آی پی ی که توی ifconfig پیدا میکردم رو توی این دو تایی که شما گفتید پیدا نکردم. دلیلش چیه؟ چ.ن برای اینکار به اون آی پی نیازه برای مقال توی ifconfig ای پیه 192.168.43.21 دارم اما توی ip addr show 192.168.43.255 رو دارم
-
راستش من آی پی ی که توی ifconfig پیدا میکردم رو توی این دو تایی که شما گفتید پیدا نکردم. دلیلش چیه؟ چ.ن برای اینکار به اون آی پی نیازه برای مقال توی ifconfig ای پیه 192.168.43.21 دارم اما توی ip addr show 192.168.43.255 رو دارم
عجیبه! مطمئن هستید که تو جفتشون یه اینترفیس رو چک کردید؟ یه خطی هست به این شکل inet IP که به جای ip باید ipv4 خودتون باشه ببینید میتونید جفتشون رو پینگ کنید؟
-
تا جزئیات دقیقی که لازم هست رو نداشته باشم نمیتونم دقیق بگم چه دستوری رو روی چه شاخهای اجرا کنید. فقط جهت ارائه یک توضیح: فایلهای شما رو کاربر کارساز وب اجرا خواهد کرد. برای آپاچی این کاربر www-data هست. شاخههایی که اسکریپتهای شما باید بتونند در اونها فایل/دایرکتوری ایجاد کنند باید توسط این کاربر قابل نگارش باشه.
-
اقا جان من راهنمایی کنید :(( یکم کلافه کننده هس که من هر سری بخوام کار کنم (بعد از خاموش و روشنشدن سیستم). بخوام کدهای پست اول رو بزنم.
من الان کل کارهای روی مسیر زیر هست
/var/www/html
الان با تابع php دارم سعی می کنم محتویات یه فایل رو بخونم. خطای زیر رو میده
failed to open stream: Permission denied
که اگر کد های پست اول رو بزنم همه چی حل میشه .
برای حل شدن ریشه ای این باید چیکار کنم دقیقا؟
-
یه sudo بزار اول دستور
-
تنها راه این هست که دقیق سطوح دسترسی رو مطالعه کنید و مطابق نیازتان و راهنمایی ویکی آپاچی روی دایرکتوریهای لازم اعمال کنید.
-
ممنونم میلاد.
داداشم شما وظیفه ای به جواب دادن نداری و اینکه محبت می کنی جواب میدی از لطف و محبت تو هست.
اما مگه چه دسترسی خاصی و متفاوتی برای این پوشه بین سایر کاربرها هست؟
مسلما همه تو این مسیر اسکریپت های php رو سوار می کنند. وهر اسکریپت ممکن دسترسی به ایجاد و حذف و ... نیاز داشته باشه
من احساس می کنم منو انداختی زمین که دور خودم گردش کنم :)
-
سلام
معمولا برای دسترسی راحتتر مسیر پیشفرض آپاچی رو تغییر میدن. نمیدونم دلیل خاصی برای این کار دارید یا نه، اما اگر خواستید بدون مشکل روی لوکال کار کنید باید تغییرات زیر رو انجام بدین (در حال حاضر لمپ روی سیستمم نصب نیست، اما قبلا به این شکل حل میشد):
فایل زیر رو باز کنید و بعد مسیر پیشفرض رو در خط DocumentRoot /var/www/html تغییر بدید:
/etc/apache2/sites-available/000-default.conf
برای نمونه:
/home/myusername/projects
بعد فایل زیر رو باز کنید:
/etc/apache2/apache2.conf
در بخش زیر مسیر پیشفرض رو تغییر بدید:
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
برای نمونه:
/home/myusername/projects
یوزر جاری سیستم رو به گروه www-data اضافه کنید:
sudo adduser YourUserName www-data
سرویس آپاچی رو ریاستارت کنید:
sudo service apache2 restart
برای اینکه از کار کردنش مطمئن بشین، مجوز دایرکتوری جدید رو به 777 تغییر بدید، بعد از صحت عملکرد، به دسترسی مناسب برگردونید.
[اضافه شد]
برای دسترسی و ایجاد فولدر در مسیر پیشفرض آپاچی، بعد از اضافه کردن کاربر جاری به گروه www-data و root، مالکیت و گروه فولدر html رو از root به www-data تغییر بدید:
sudo chown -R www-data:www-data /var/www/html
-
ممنونم میلاد.
داداشم شما وظیفه ای به جواب دادن نداری و اینکه محبت می کنی جواب میدی از لطف و محبت تو هست.
اما مگه چه دسترسی خاصی و متفاوتی برای این پوشه بین سایر کاربرها هست؟
مسلما همه تو این مسیر اسکریپت های php رو سوار می کنند. وهر اسکریپت ممکن دسترسی به ایجاد و حذف و ... نیاز داشته باشه
من احساس می کنم منو انداختی زمین که دور خودم گردش کنم :)
سطوح دسترسی مورد نظر شما برای اعمال روی var/www/html/ امن نیست. شما باید مطابق نیاز اسکریپت شاخههای مختلف رو تنظیم کنید تا به درستی قابل نگارش و... باشند. اینکه سطوح دسترسی خود var/www/html/ رو به طور کلی تغییر بدید که هر اسکریپتی هر جا خواست چیزی بتونه بنویسه کار درستی نیست.
به همین خاطر هست که من یک کد کلی قرار نمیدم که var/www/html/ رو تغییر بده. قطعا در اسکریپت شما مشخص هست کدوم شاخه باید قابل نگارش باشه. میتونید به راحتی مطابق صفحه ویکی آپاچی دسترسیهای لازم رو اعمال کنید تا اسکریپت شما به درستی کار کنه.
ضمن اینکه این روزها تصور میکنم استفاده از Docker برای داشتن یک کارساز وب منطقیتر باشه.
-
مشکل شما رو من هم داشتم.
متاسفانه جواب های دوستان مشکل شمارو حل نمیکنه
در واقع این مشکل اصلا ارتباطی به آپاچی نداره
مشکل اینجاست که با وجودی که پرمیشن صحیح بصورت بازگشتی به کل شاخه و زیرشاخه های www داده شده، همچنین یوزر ایشون هم مجوز دسترسی دارند، زمانی که فریم ورک یا اسکریپت پوشه یا فایل جدیدی رو میسازه، فایل یا پوشه جدید با دسترسی پیشفرض ایچاد میشه.
مورد من که هنوز هم نتوسنتم راه حلی براش پیدا کنم مربوط به فریم ورک لاروال میشه که فایل های کشی که ایجاد میکنه با دستور پاک کردن عدای کش لاراول که دستور زیر باشه پاک نمیشه:
php artisan cache:clear
چرا که همونطور که توضیح دادم، فایل های کش هر بار توسط فریم ورک ساخته میشن و دسترسی پیشفرض برای روت دارند.
راه حل گذاشتن sudo قبل از دستور فوق هست اما مطمئنا باید دستوری برای ایجاد دسترسی پیشفرض برای فایل هایی که اسکریپت یا فریم ورک میسازند در شاخته ای که دسترسی روت داره مثل www وجود داشته باشه.
ممنون میشم اگر کسی راه حلی داره راهنمایی کنه
-
به طور کلی مشکل هر دوی شما در سطوح دسترسی اشتباه نهفته هست. اگر فایلهای cache دسترسی ریشه دارند یعنی قطعا اشتباهی در تنظیم سطوح دسترسی رخ داده.
ویکی آپاچی کاملا از روی سناریوی مورد نظر sonic69 نوشته شده و اگر مراحل رو به درستی طی کنند مشکلی نخواهند داشت. من از همون صفحه برای راهاندازی و تست لاراول ۸ روی آپاچی جهت بررسی حالتهای ممکن مشکل ساز استفاده کردم و بدون مشکل میشه کش رو پاک کرد.
البته خوب خیلی فرصت نکردم باهاش سر و کله بزنم. اگر مراحلی که طی میکنید و مشکل ساز هست رو بزارید ممکنه بشه تشخصی داد کجا چه ایرادی وجود داره یا چه مرحله اضافی باید طی بشه.
۴ - ۵ سالی بود به لاراول دست نزده بودم... دارم وسوسه میشم یکم توش بچرخم.
-
مشکل شما رو من هم داشتم.
متاسفانه جواب های دوستان مشکل شمارو حل نمیکنه
در واقع این مشکل اصلا ارتباطی به آپاچی نداره
مشکل اینجاست که با وجودی که پرمیشن صحیح بصورت بازگشتی به کل شاخه و زیرشاخه های www داده شده، همچنین یوزر ایشون هم مجوز دسترسی دارند، زمانی که فریم ورک یا اسکریپت پوشه یا فایل جدیدی رو میسازه، فایل یا پوشه جدید با دسترسی پیشفرض ایچاد میشه.
مورد من که هنوز هم نتوسنتم راه حلی براش پیدا کنم مربوط به فریم ورک لاروال میشه که فایل های کشی که ایجاد میکنه با دستور پاک کردن عدای کش لاراول که دستور زیر باشه پاک نمیشه:
php artisan cache:clear
چرا که همونطور که توضیح دادم، فایل های کش هر بار توسط فریم ورک ساخته میشن و دسترسی پیشفرض برای روت دارند.
راه حل گذاشتن sudo قبل از دستور فوق هست اما مطمئنا باید دستوری برای ایجاد دسترسی پیشفرض برای فایل هایی که اسکریپت یا فریم ورک میسازند در شاخته ای که دسترسی روت داره مثل www وجود داشته باشه.
ممنون میشم اگر کسی راه حلی داره راهنمایی کنه
برام جالب بود این مشکل، به هم دلیل لمپ رو نصب کردم. البته من همیشه مسیر پیشفرض آپاچی رو به یه پوشه در /home/user تغییر میدم، و مشکلی در این مورد نداشتم. اما برای این مورد که در مسیر پیشفرض آپاچی هست من ابتدا کاربر جاری رو به دو گروه root و www-data اضافه کردم، و بعد مالکیت دایرکتوری html را تغییر دادم. مشکلی نبود و دایرکتوری ایجاد شد.
sudo chown -R www-data:www-data /var/www/html
کد پیاچپی:
<?php mkdir("TESTDIR", 0777); ?>
اگر چیزی هست که متوجه نشدم یا اشتباهی کردم توضیح بدید ممنون میشم.
-
با تشکر از پاسخ شما،
ظاهرا دقیق متوجه نشدید. هر پرمیشنی که شما به فایل یا پوشه ای که وجود دارد میتوانید بدهید. کارهایی که شما گفتید بدیهی هستند و قبلا انجام شده اند.
مشکل زمانی پیش می آید که فایل یا پوشه ای جدید توسط اسکریپت یا فریم ورکی که الزاما در مسیر www باید باشد، ایجاد میشود و آن فایل یا پوشه، سطح دسترسی پیشفرض روت را دارد.
-
خوب نباید سطح دسترسی به گونهای باشه که صاحب فایلهای جدید کاربر ریشه بشه. اگر اینطور هست یعنی به درستی سطوح دسترسی اعمال نشده و یا کاربری صحیح کارساز و اسکریپت رو اجرا نمیکنه.
برای مثال cache که فرمودید. صاحب دایرکتوری cache باید کاربر کنونی باشه و گروه اون، کاربر کارساز. صاحب فایلهای ایجاد شده در این دایرکتوری هم کاربری که کارساز را اجرا میکنه. نهایتا هم شما چون صاحب دایرکتوری والد هستید بدون مشکل باید بتونید cache:clear بزنید.
چیزی که من تست کردم و بدون مشکل چند بار فایلها رو کارساز ایجاد و من clear کردم.
دیگه در بدترین و پیچیدهترین حالتها ACL میتونه کمک کنه.
-
اینجا رو ببین: https://wiki.ubuntu.ir/wiki/Apache