שאלה מהי הדרך הטובה ביותר לטפל בהרשאות לנתוני www של Apache 2 ב- / var / www?


יש מישהו יש פתרון נחמד לטיפול קבצים /var/www? אנו מפעילים שם מבוסס Virtual Hosts ואת Apache 2 המשתמש הוא נתונים www.

יש לנו שני משתמשים רגילים & root. אז כאשר להתעסק עם קבצים ב /var/www, במקום צורך ...

chown -R www-data:www-data

... כל הזמן, מהי דרך טובה לטפל בזה?

שאלה משלימה: איך הארדקור אז אתה הולך על הרשאות?

זה תמיד היה בעיה בסביבות פיתוח שיתופי.


211
2018-05-11 05:13




ראה גם: מהם ההרשאות הטובות ביותר לינוקס לשימוש באתר שלי? - Zoredache


תשובות:


ניסיון להרחיב ב- @ Zoredache תשובה, כפי שאני נותן את זה ללכת לעצמי:

  • צור קבוצה חדשה (www-pub) והוסף את המשתמשים לקבוצה זו

    groupadd www-pub

    usermod -a -G www-pub usera  # # חייב להשתמש - כדי לצרף לקבוצות קיימות

    usermod -a -G www-pub userb

    groups usera  # # להציג קבוצות עבור המשתמש

  • שנה את הבעלות על כל מה שמתחת / var / www לשורש: www-pub

    chown -R root:www-pub /var/www  ## -R עבור רקורסיבית

  • שנה את ההרשאות של כל התיקיות ל 2775

    chmod 2775 /var/www  # = 2 = קבוצה מזהה קבוצה, 7 = rwx עבור הבעלים (שורש), 7 = rwx עבור הקבוצה (www-pub), 5 = rx עבור העולם (כולל apache www נתוני המשתמש)

    הגדר מזהה קבוצה (SETGID) bit (2) גורם לקבוצה (www-pub) להעתיק את כל הקבצים החדשים / תיקיות שנוצרו באותה תיקייה. אפשרויות אחרות הן SETUID (4) להעתיק את מזהה המשתמש, ו STICKY (1) אשר אני חושב מאפשר רק הבעלים למחוק קבצים.

    יש -R רקורסיבית, אבל זה לא להפלות בין קבצים ותיקיות, אז אתה צריך חיפוש להשתמש, ככה:

    find /var/www -type d -exec chmod 2775 {} +

  • שנה את כל הקבצים ל 0664

    find /var/www -type f -exec chmod 0664 {} +

  • לשנות את umask עבור המשתמשים שלך 0002

    ה- umask שולט בהרשאות ברירת המחדל ליצירת הקובץ, 0002 פירושו הקבצים יהיו 664 וספריות 775. הגדרה זו (על ידי עריכת umask שורה בתחתית /etc/profile במקרה שלי) כלומר קבצים שנוצרו על ידי משתמש אחד יהיה לכתוב על ידי משתמשים אחרים בקבוצת www ללא צורך chmod אותם.

בדוק את כל זה על ידי יצירת קובץ וספרייה ולאמת את הבעלים, הקבוצה וההרשאות עם ls -l.

הערה: עליך להתנתק משינויים בקבוצות שלך כדי להיכנס לתוקף!


201
2017-09-15 05:11



@Tom נהדר לראות שאתה ממליץ להשתמש findהפקודה עבור זה. טיפ אחד קטן הביצועים הייתי נותן אם יש לך הרבה קבצים / ספריות ואתה משתמש גנו למצוא היא להשתמש + במקום \; כך הפקודה יהיה לפעול על מספר קבצים כי "זה מהר יותר להפעיל פקודה על קבצים רבים ככל האפשר בכל פעם, ולא פעם לקובץ, עושה את זה חוסך בזמן שנדרש כדי להפעיל את הפקודה בכל פעם." כמו כן, קל יותר להקליד שכן הוא אינו צריך קו נטוי הפוך. - aculich
עודכן עם ההצעה של aculich @ להשתמש + לא \; - Tom
@SunnyJ. נסה זאת (ללא המרכאות החיצוניות): "find / var / www -type f -exec chmod 0664 '{}' \" "נסה זאת. יש רווח בין '{}' לבין \\. - Buttle Butkus
@ Tom- דרך לשבור אותו, תודה. רק הערה - אני חושב "SETUID (4) להעתיק את מזהה המשתמש" כפי שנכלל התשובה שלך הוא שגוי - SETUID הוא התעלם כאשר מוחל על ספריות לינוקס / יוניקס - Ref - Yarin
בסדר, אז על ידי usera ו userb האם אתה מתכוון www-data ו ftpuser ? מצאתי את זה מאוד מבלבל עם כל אזכור של www-data, אשר היה בשאלה המקורית. כמו כן, מה הטעם / תועלת של הגדרת הבעלים root? אנחנו צריכים לשים את זה ftpuser? - gskema


אני לא לגמרי בטוח איך אתה רוצה להגדיר את ההרשאות, אבל זה עשוי לתת לך נקודת התחלה. יש כנראה דרכים טובות יותר. אני מניח שאתה רוצה שני המשתמשים יוכלו לשנות משהו תחת / var / www /

  • צור קבוצה חדשה (www-pub) והוסף את המשתמשים לקבוצה זו.
  • שנה את הבעלות על כל מה שמתחת / var / www לשורש: www-pub.
  • שנה את ההרשאות של כל התיקיות ל 2775
  • שנה את כל הקבצים ל 0664.
  • לשנות את umask עבור המשתמשים שלך 0002

פירוש הדבר שכל קובץ חדש שנוצר על ידי אחד מהמשתמשים שלך צריך להיות שם משתמש: www-pub 0664 וכל ספרייה שנוצרת תוצג שם משתמש: www-pub 2775. אפאצ'י יקבל גישה לקריאה לכל דבר באמצעות הרכיב 'משתמשים אחרים'. הקטע SETGID בספריות יאלץ את כל הקבצים שנוצרו להיות בבעלות הקבוצה שבבעלותה את התיקייה. התאמת umask יש צורך לוודא כי חתיכת לכתוב מוגדר כך שכל אחד בקבוצה יוכלו לערוך את הקבצים.

באשר איך הארדקור אני הולך על הרשאות. זה לגמרי תלוי באתר / שרת. אם יש רק 1-2 עורכי ואני רק צריך לשמור עליהם מפני שבירת דברים רע מדי אז אני הולך קל. אם העסק נדרש משהו יותר מורכב אז הייתי מקימה משהו יותר מורכב.


59
2018-05-11 05:49



תוספת אפשרית - הגדרת מטמון / להעלות dirs כי צריך להיות שנכתב על ידי שרת האינטרנט כדי www- נתונים: www-data ו 775. - gacrux
האם זה יפעל גם כדי להוסיף את המשתמשים לקבוצת Apache במקום להסתמך על הרשאות 'אחרות'? אם כל מה שאתה עושה הוא העלאת קבצים אלה קבצים צריך להיות קריא על ידי אפאצ 'י קבוצה 3 רק נראה שימושי אם אתה צריך לערוך את הקבצים האלה. - Simurr
כל סיכוי שאתה יכול להרחיב את זה קצת @Zoredache? אני grok את השימוש הבסיסי של rwx bits, chmod, chown, adduser, usermod, אבל איבדת אותי עם הספרה הראשונה הנוספת על הרשאות אוקטלי, umasks וכל זה. כמה פקודות מדגם הממחישות את המתאר שלך המתואר יהיה מאוד מוערך. - Tom
בדרך זו כל משתמש יכול לגשת לכל קבצי משתמש אחרים! זה אומר userA יכול לקרוא את config.php של userB ... גניבת אישור mysql שלה, למשל - drAlberT
באמצעות acl אתה יכול להתמודד הן אבטחה שיתוף פעולה, נס :) - drAlberT


אני חושב שאתה עלול למצוא POSIX ACL (רשימות בקרת גישה) כדי להיות מועיל. הם מאפשרים מודל הרשאה עדין יותר בהשוואה למשתמש: קבוצה: מודל אחר. מצאתי להם להיות יותר קל לשמור על הראש שלי מאז שאני יכול להיות מפורש יותר והוא יכול גם להגדיר את "ברירת מחדל" התנהגות עבור סניף של מערכת הקבצים.

לדוגמה, תוכל לציין את ההרשאות של כל משתמש באופן מפורש:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

לחלופין, תוכל לעשות זאת על סמך קבוצה משותפת:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

ואולי אתה רוצה לשמור על משתמש Apache שלך ​​לקריאה בלבד

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

דפי גבר:

הדרכה


39
2018-05-11 16:26



זה הדרך ! +1 - drAlberT
ACL עבור לנצח +1 ... לפרטים נוספים לראות serverfault.com/a/360120/41823 - Yarin
אני תוהה אם יש חיסרון ביצועים עבור ACL לעומת הרשאות בסיסיות. - Buttle Butkus
למרבה הצער, ACL הוא לעתים קרובות מדי חסר בהתקנים סטנדרטיים / הפצות. זה כאב לקמפל ליבה על כל השרתים אני מנהל, או גרוע מזה, לשנות את מערכת הקבצים לפעמים. בנוסף, עליך להיות זהיר מאוד בעת גיבוי קבצים למעלה, במיוחד אם אתה מיתוג שרתים. ACL הוא נהדר אבל התמיכה הנוכחית שלה הוא כל כך נמוך, כי הייתי ממליץ על זה עבור כל מי שאין לו שליטה מלאה על כל דבר על השרת והסביבה. אבל +1 להצביע ACL איפה זה באמת הגיוני! - Ninj
תשובה טובה +1; הערה על שינוי תהליך Apache הרשאות קריאה / כתיבה (www-data למשל) לקריאה בלבד עבור כל האתר (דרך setfacl או chmod - או שניהם) -> זה יהיה ללא ספק לחסום את כל הכותבים (plugin / מודול העלאה / עדכון מצד הדפדפן על רוב CMS ​​למשל). אני מאמין אלה פופולריים רבים גם רק לבדוק גישה לכתוב על רמת המשתמש perm לא ברמת הקבוצה. אתה עדיין יכול לעדכן, אבל עדכונים חייב להיות מיושם באופן ידני וכל הרשאות מותאמות אישית עבור לכתוב תיקיות (יומנים / טמפ / העלאות / וכו '). לקריאה בלבד הוא אבטחה גדולה אם האתר שלך עובד עם זה .. על פי רוב לא. - bshea


שאלה זו היתה שאל שוב, וכמו דנו על meta, שיטות עבודה מומלצות הנוכחי מספק גישות טובות יותר מאשר היה זמין בשנת 2009, כאשר זה היה שאל. תשובה זו מנסה לתת כמה פתרונות שוטפים טיפול בסביבות פיתוח אינטרנט שיתופי באופן מאובטח.


עבור שרת אינטרנט מאובטח & פיתוח שיתופי יש יותר מאשר רק את הרשאות הקובץ:

  • יש משתמש נפרד לכל אתר כלומר, אין להשתמש בכל האתרים המשתמשים www-data. זה חשוב, שכן כיום אפאצ'י משמש רק לעתים נדירות סטטי קבצי תוכן, אבל פועל דינמי אתרי אינטרנט. תשובה זו מתמקדת PHP כמו זה הכי נפוץ שפת האתר, אך אותם עקרונות חלים גם על האחרים.

    אם יש לך בעיית אבטחה באתר יחיד, היא יכולה להתפשט לכל אתר שפועל כמשתמש זהה. תוקף יכול לראות את כל מה שהמשתמש רואה, כולל פרטי התחברות למסד נתונים, ולשנות כל אתר שיש למשתמש הרשאות כתיבה.

  • להשתמש פרוטוקול העברת קבצים SSH (SFTP). בעת שימוש ב- FTP צריך להיות נטוש עבור אבטחה (כפי שהיא שולחת הן את הסיסמאות ואת התוכן בטקסט רגיל), זה בטוח SFTP תחליף יש גם תכונה כי הוא פתרון מושלם לפיתוח אינטרנט שיתופי.

    ברגע שיש לך מבודד את האתרים ואת משתמש אחד לכל אתר, אתה צריך לתת גישה למפתחי האינטרנט שלך, מה השאלה הזאת היא כל העניין. במקום לתת להם את הסיסמאות עבור משתמשי האתר האלה - או גישה לקובצי האתר באמצעות חשבונות המשתמש האישיים שלהם כפי שהוצעו במקור - תוכל להשתמש מפתחות SSH עבור התחברות.

    כל מפתח יכול ליצור keypair ולשמור על סוד המפתח הפרטי. לאחר מכן, המפתח הציבורי נוסף ~/.ssh/authorized_keys עבור כל חשבון משתמש האתר היזם הוא עובד על. יש לזה יתרונות רבים לניהול הסיסמאות והיומנים:

    • כל מפתח יכול לקבל גישה לכל מספר של אתרי אינטרנט ללא הנטל לזכור או לאחסן את כל הסיסמאות הכרוכות בהסדר למשתמש לכל אתר.

    • אין צורך לשנות ולשתף את הסיסמאות בכל פעם שמישהו עוזב את החברה.

    • אתה יכול להשתמש בסיסמאות חזקות מאוד או להשבית כניסה מבוססת סיסמאות לגמרי.

  • השתמש PHP-FPM. זוהי הגישה הנוכחית להפעלת PHP כמשתמש. ליצור חדש בריכה עבור כל משתמש כלומר מאגר אחד לכל אתר. זה הטוב ביותר עבור אבטחה וביצועים כאחד, כפי שאתה יכול גם לציין כמה משאבים אתר יחיד יכול לצרוך.

    ראה למשל לעולם לא הפעל php-fpm עם משתמש / משתמש נפרד ב- Linux. יש הדרכות כמו HowtoForge של שימוש ב- PHP-FPM עם Apache ב- Ubuntu 16.04 זה לא משתמש PHP-FPM להגברת האבטחה באמצעות הפרדת המשתמש, המנחה להשתמש שקע FPM יחיד על פני השרת.


7
2018-05-10 10:03