جرقه اولیه این موضوع زمانی خورد که کاربر یک فایل php داشت که از طریق اجرای اون فایل، یک سری فایل های جانبی ایجاد میشدن، ولی موقع اجرای این فایل با خطای زیر مواجه میشد:
Warning: file_put_contents(test.txt) failed to open stream: Permission denied
بعد از جستجو متوجه شدم مشکل به خاطر سطح دسترسی فایل نیست، به خاطر owner هست. چون وب سرور apache باید owner اون فایل باشه تا بعد از ارسال درخواست و اجرای فایل php بتونه فایل های موردنظر رو ایجاد کنه.
در اوبونتو، با اجرای دستوری مشابه دستور زیر میشه مشکل رو حل کرد:
chown -R www-data:www-data /path/to/dir
به جای /path/to/dir
آدرس دایرکتوری موردنظر رو قرار بدین
منبع: https://gist.github.com/ybagheri/e88550dbc2d6df91b215eae3772938b3
اما این کار هر دفعه که فایل جدیدی ایجاد میشه، باید انجام بشه که خب کار سختی هست. به همین خاطر تصمیم گرفتم از ChatGPT کمک بگیرم و فرایند رو خودکار کنم.
نتیجه این شد که از inotify-tools
استفاده کنم. پس اول به کمک دستور زیر اون رو در Ubuntu نصب کنید:
sudo apt-get install inotify-tools
حالا در مسیر موردنظر، فایلی تحت عنوان chown_script.sh
ایجاد کنید و محتویات زیر رو در اون قرار بدید:
#!/bin/bash
# Define the directory to monitor
directory="/path/to/directory"
# Define the desired owner
owner="www-data"
# Use inotifywait to monitor the directory for new files
inotifywait -m -e create --format '%w%f' "$directory" |
while read -r filename; do
# Change the owner of the new file
chown "$owner" "$filename"
done
حالا دستور زیر رو اجرا کنید:
chmod +x chown_script.sh
در نهایت برای اینکه فایل بصورت خودکار در پس زمینه اجرا بشه و بتونه فایل های جدید رو رصد کنه، اون رو به کمک دستور زیر اجرا کنید:
sudo ./chown_script.sh
حالا به محض ایجاد فایل جدید، owner اون فایل بصورت خودکار توی گروه کاربری www-data قرار میگیره و مشکل سطح دسترسی برای اجرای چنین فایل های php حل میشه.
لینک کوتاه: | https://waterdirectory.ir/?p=1922 |
برچسب ها: |