ما هي الأذونات المناسبة لمجلد التحميل باستخدام PHP/Apache؟

StackOverflow https://stackoverflow.com/questions/10990

  •  08-06-2019
  •  | 
  •  

سؤال

آسف على السؤال الأساسي - أنا مطور .NET وليس لدي خبرة كبيرة في عمليات إعداد LAMP.

لدي موقع PHP يسمح بالتحميل إلى مجلد معين.لقد قيل لي أن هذا المجلد يجب أن يكون مملوكًا لمستخدم خادم الويب حتى تتم عملية التحميل، لذلك قمت بإنشاء المجلد ثم قمت بتعيين الأذونات على هذا النحو:

chown apache:apache -R uploads/
chmod 755 -R uploads/

المشكلة الوحيدة الآن هي أن مستخدم FTP لا يمكنه تعديل الملفات التي تم تحميلها على الإطلاق.

هل هناك إعداد إذن يسمح لي بمواصلة تحميل الملفات ثم تعديلها لاحقًا كمستخدم آخر غير مستخدم خادم الويب؟

هل كانت مفيدة؟

المحلول

يمكنك إنشاء مجموعة جديدة تضم كلاً من مستخدم Apache ومستخدم FTP كأعضاء ثم منح الإذن لمجلد التحميل 775.من المفترض أن يمنح هذا مستخدمي Apache وFTP القدرة على الكتابة إلى الملفات الموجودة في المجلد مع منع أي شخص آخر من تعديلها.

نصائح أخرى

سأوافق على إجابة رايان إذا كنت تريد حقًا القيام بذلك.

بشكل عام، في بيئة *nix، تريد دائمًا أن تخطئ في إعطاء أقل قدر ممكن من الأذونات.

9 مرات من أصل 10، 755 هو الإذن المثالي لهذا - حيث أن المستخدم الوحيد الذي لديه القدرة على تعديل الملفات هو خادم الويب.قم بتغيير هذا إلى 775 مع مستخدم ftp الخاص بك في مجموعة إذا كنت بحاجة حقًا إلى تغيير هذا.

نظرًا لأنك جديد في لغة php من خلال قبولك الخاص، فإليك رابطًا مفيدًا لتحسين أمان خدمة التحميل لديك:move_uploaded_file

أو على الأقل 766.

  • قراءة = 4
  • اكتب = 2
  • تنفيذ = 1

7 = قراءة + كتابة + تنفيذ

6 = قراءة + كتابة

  • الرقم الأول:مالك
  • الرقم الثاني:مجموعة
  • الرقم الثالث:المستخدمين الآخرين

سأضيف أنه إذا كنت تستخدم SELinux فأنت بحاجة إلى التأكد من أن سياق النوع هو tmp_t ويمكنك تحقيق ذلك باستخدام الأداة المساعدة chcon

chcon -t tmp_t التحميلات

المهم هو أن apache يجب أن يكون لدى المستخدم والمجموعة الحد الأدنى read الوصول وفي بعض الحالات execute وصول.بالنسبة للباقي يمكنك أن تعطي 0 وصول.

هذا هو الإعداد الأكثر أمانًا.

سأدعم فكرة إنشاء مجموعة بروتوكول نقل الملفات التي سيكون لها حقوق التحميل.ومع ذلك، لا أعتقد أنه من الضروري إعطاء إذن 775.7 لتقف على القراءة والكتابة والتنفيذ.عادةً ما تريد السماح لمجموعات معينة بالقراءة والكتابة، ولكن اعتمادًا على الحالة، قد لا يكون التنفيذ ضروريًا.

تذكر أيضا CHOWN أو chgrp مجلد موقع الويب الخاص بك.يحاول myusername# chown -R myusername:_www uploads

بناء على الجواب من @Ryan Ahearn, ، وفيما يلي ما فعلته Ubuntu 16.04 لإنشاء مستخدم front الذي لديه إذن فقط لـ nginx's web dir /var/www/html.

خطوات:

* pre-steps:
    * basic prepare of server,
    * create user 'dev'
        which will be the owner of "/var/www/html",
    * 
    * install nginx,
    * 
* 
* create user 'front'
    sudo useradd -d /home/front -s /bin/bash front
    sudo passwd front

    # create home folder, if not exists yet,
    sudo mkdir /home/front
    # set owner of new home folder,
    sudo chown -R front:front /home/front

    # switch to user,
    su - front

    # copy .bashrc, if not exists yet,
    cp /etc/skel/.bashrc ~front/
    cp /etc/skel/.profile ~front/

    # enable color,
    vi ~front/.bashrc
    # uncomment the line start with "force_color_prompt",

    # exit user
    exit
* 
* add to group 'dev',
    sudo usermod -a -G dev front
* change owner of web dir,
    sudo chown -R dev:dev /var/www
* change permission of web dir,
    chmod 775 $(find /var/www/html -type d)
    chmod 664 $(find /var/www/html -type f)
* 
* re-login as 'front'
    to make group take effect,
* 
* test
* 
* ok
* 

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top