מה המשמעות של drwxr-xr-x ב-Linux ואיך לקרוא הרשאות
למדו לפענח את מחרוזת ההרשאות drwxr-xr-x ב-Linux צעד אחר צעד. המדריך מסביר את המשמעות של כל תו, את הקשר לערך האוקטלי 755, מדוע הרשאת x קריטית לתיקיות ומדוע chmod 777 הוא סיכון אבטחה.
מה המשמעות של drwxr-xr-x
drwxr-xr-x מתאר תיקייה שהבעלים שלה יכול לשנות, ושכל משתמש אחר יכול לקרוא ולעבור דרכה מבלי לשנות דבר. בייצוג אוקטלי, מצב (mode) זה הוא 755. מערכת Linux מדפיסה עשרה תווים אלו בתחילת כל שורה בפלט של ls -l, והם תמיד מציינים את אותו הדבר באותו הסדר, כך שלמידת מחרוזת אחת מלמדת אתכם את כולן.
כלל אחד קודם לכל השאר, כיוון שהוא קובע האם הבדיקות שלכם אכן משקפות את המציאות. משתמש ה-root מתעלם מביטי הרשאות. ה-kernel מעניק ל-root את היכולת CAP_DAC_OVERRIDE (עקיפת בקרת גישה שיקול דעתית), ולכן root פותח קבצים גם כאשר המצב (mode) שלהם אוסר זאת. כל דוגמה בדף זה תצליח עבור root, ללא קשר למה שהביטים מציינים. התחברו כמשתמש רגיל כאשר אתם רוצים לראות את הכללים פועלים בפועל.
עשרת התווים, אחד בכל פעם
צרו ספרייה וקובץ כדי לבחון אותם. שום דבר כאן לא נוגע בשום דבר מחוץ לספרייה החדשה.
mkdir -p ~/permdemo/inner
printf 'hello\n' > ~/permdemo/inner/notes.txt
ls -ld ~/permdemo ~/permdemo/inner ~/permdemo/inner/notes.txtעם ה-umask ברירת המחדל הנפוץ של 022, שתי שורות הספריות מתחילות ב-drwxr-xr-x ושורת הקובץ מתחילה ב--rw-r--r--.
התו הראשון הוא סוג הקובץ, לא הרשאה. d הוא ספרייה. - הוא קובץ רגיל. l הוא קישור סימבולי (symbolic link). c ו-b הם צמתי התקן (device nodes) של תווים ובלוקים. s הוא socket, ו-p הוא צינור בעל שם (named pipe). הוא נמצא מחוץ לערך האוקטלי, וזו הסיבה ש-drwxr-xr-x הופך ל-755 במקום למשהו שמתחיל ב-d.
תשעת התווים שאחריו הם שלוש קבוצות של שלושה, והם לעולם לא משנים את סדרם.
- תווים 2 עד 4 הם שלישיית ה-owner (בעלים), הביטים שחלים על המשתמש שבבעלותו הקובץ.
- תווים 5 עד 7 הם שלישיית ה-group (קבוצה), הביטים שחלים על הקבוצה של הקובץ.
- תווים 8 עד 10 הם שלישיית ה-other (אחרים), הביטים שחלים על כל השאר.
בתוך שלישייה, המיקומים הם תמיד r, לאחר מכן w, ולאחר מכן x, ומקף מסמל שהביט כבוי. האותיות לעולם לא משנות מיקום. r-x הוא קריאה ללא כתיבה. -w- הוא כתיבה ללא קריאה, דבר שהוא חוקי אך נדיר.
לכן, drwxr-xr-x מתחלק כך: d עבור הספרייה, לאחר מכן rwx עבור הבעלים, לאחר מכן r-x עבור הקבוצה, ולאחר מכן r-x עבור אחרים.
מערכות מסוימות מדפיסות תו אחד-עשר. נקודה בסוף, drwxr-xr-x., מציינת שהקובץ נושא הקשר (context) של SELinux (אבטחה משופרת ל-Linux), דבר שהפצות SELinux כמו Fedora ו-Rocky מדפיסות כברירת מחדל. סימן פלוס בסוף, drwxr-xr-x+, מציין שהקובץ נושא POSIX ACL (רשימת בקרת גישה), קבוצת חוקים נוספת מעבר לתשעת הביטים הללו. קראו את החוקים הנוספים הללו באמצעות getfacl <path>.
ההרשאות r, w ו-x מבצעות פעולות שונות על ספריות
זהו הכלל הראשון שמתחילים טועים בו. האותיות זהות עבור קבצים ועבור ספריות, אך הסמכויות שהן מעניקות שונות.
rעל קובץ מאפשר לקרוא את תוכנו.rעל ספרייה מאפשר להציג את רשימת השמות שבתוכה, וזה מה שנדרש עבור פקודתlsפשוטה.wעל קובץ מאפשר לשנות את תוכנו.wעל ספרייה מאפשר להוסיף ולמחוק רשומות מתוכה. מחיקת קובץ היא שינוי בספרייה, לכן הרשאת כתיבה על הספרייה היא הקובעת, וההרשאות של הקובץ עצמו אינן רלוונטיות.xעל קובץ מאפשר להריץ אותו כתוכנית.xעל ספרייה מאפשר לעבור דרכה (traverse), כלומר ה-kernel רשאי לפתור שם אחד בתוכה במהלך חיפוש נתיב.
היכולת לעבור דרך ספרייה היא החלק שמפתיע אנשים. x על ספרייה אינו מריץ דבר. פתיחת /srv/site/index.html דורשת x על /, לאחר מכן x על /srv, לאחר מכן x על /srv/site, ולבסוף r על הקובץ עצמו. אם לאחת הספריות בשרשרת זו חסרה הרשאת x עבורכם, החיפוש נעצר שם, והמערכת תחזיר הודעת Permission denied עבור כל הנתיב, גם אם הקובץ בסופו פתוח לקריאה לכל העולם. הפקודה namei -l /srv/site/index.html מדפיסה כל שלב בשרשרת יחד עם מצב ההרשאות והבעלים שלו, כך שניתן לראות איזו חוליה חוסמת את הגישה.
ספרייה עם הרשאת r אך ללא x היא מצב ביניים מוזר שכדאי להכיר. משתמש רגיל יכול להציג את רשימת השמות, כיוון שזה מה ש-r מעניקה, אך הוא אינו יכול לבצע stat לאף רשומה. לכן, ls -l יציג סימני שאלה בעמודות הגודל וההרשאות, וידפיס ls: cannot access ...: Permission denied עבור כל רשומה.
המרת האותיות ל-755
כל שלישייה היא מספר בן שלושה ביטים. r הוא 4, w הוא 2, ו-x הוא 1. סכמו את הביטים הפעילים.
rwxהוא 4 + 2 + 1 = 7rw-הוא 4 + 2 = 6r-xהוא 4 + 1 = 5r--הוא 4---הוא 0
לכן, drwxr-xr-x הוא 7 עבור הבעלים, 5 עבור הקבוצה ו-5 עבור אחרים: 755. -rw-r--r-- הוא 6, 4, 4: 644. drwxrwxr-x הוא 7, 7, 5: 775, שזה 755 בתוספת הרשאת כתיבה לקבוצה. אין צורך לספור תווים ידנית, כיוון ש-stat מציג את שתי הצורות בו-זמנית.
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt%A הוא הייצוג האותיות, %a הוא הייצוג האוקטלי, ו-%U ו-%G מציינים את המשתמש הבעלים ואת הקבוצה הבעלים.
מחרוזות ההרשאות הנפוצות ביותר
אלו הם מצבי ההרשאות (modes) שתפגשו בשרת אמיתי, יחד עם הערך האוקטלי שלהם והשימוש המקובל עבור כל אחד.
-rw-r--r--הוא 644. קבצים רגילים ששירות רק קורא, כגון קובץ תצורה או דף HTML.-rw-------הוא 600. סודות: מפתח פרטי של SSH, או קובץ.envשל יישום.-rw-rw-r--הוא 664. קובץ בתיקייה משותפת לקבוצה, שבה חברי צוות צריכים הרשאות כתיבה.-rwxr-xr-xהוא 755. סקריפטים וקבצים בינאריים, כגון/usr/local/bin/backup.shורוב התוכן ב-/usr/bin.-rwx------הוא 700. סקריפט פרטי שרק הבעלים שלו רשאי להריץ.drwxr-xr-xהוא 755. כמעט כל תיקיית מערכת, וספריית השורש של אתר אינטרנט.drwx------הוא 700.~/.ssh, ותיקיות בית בשרת מאובטח.drwxrwxr-xהוא 775. תיקייה שקבוצת הבעלים רשאית לכתוב אליה.drwxrwsr-xהוא 2775. זהה לקודם, בתוספת ביט setgid, כך שקבצים חדשים שנוצרים בתוכה יורשים את הקבוצה של התיקייה.drwxrwxrwtהוא 1777./tmp. ה-tבסוף הוא ה-sticky bit, כך שמשתמש יכול למחוק רק קבצים שבבעלותו.-rwsr-xr-xהוא 4755. קובץ בינארי מסוג setuid שרץ עם הרשאות הבעלים שלו, כגון/usr/bin/passwdו-/usr/bin/sudo.-rw-rw-rw-הוא 666, ו-drwxrwxrwxהוא 777. הרשאת כתיבה לכל העולם (world writable), שבשרת היא כמעט תמיד טעות.lrwxrwxrwxהוא מה שכל קישור סימבולי (symbolic link) מציג. לינוקס מתעלמת מביטי המצב בקישור ובודקת את היעד במקום זאת, לכן למחרוזת זו אין כל משמעות.
איזו שלישיית הרשאות חלה עליך
זהו הכלל השני שמתחילים טועים בו. הליבה (kernel) בוחרת בדיוק שלישיית הרשאות אחת ועוצרת שם.
אם מזהה המשתמש (user ID) שלך תואם לבעלי הקובץ, תקבל את שלישיית הבעלים, והמערכת לא תבדוק כלל את הרשאות הקבוצה או היתר. אחרת, אם הקבוצה של הקובץ היא אחת מהקבוצות שלך, תקבל את שלישיית הקבוצה. אחרת, תקבל את שלישיית היתר (other).
מכאן נובעים שני דברים. שלישיית הבעלים חלה גם כאשר היא המגבילה ביותר. קובץ במצב 0466, המוצג כ--r--rw-rw-, מעניק לבעליו הרשאת קריאה בלבד בעוד שכל השאר יכולים לכתוב בו, כיוון שהבדיקה מול הבעלים בוצעה ראשונה ושום דבר אחריה לא נקרא. זהו מצב תקין, והוא מבלבל כל אדם בפעם הראשונה שהוא נתקל בו.
שלישיית הקבוצה נבחרת לפי הקבוצה של הקובץ, ולא לפי רשימת הקבוצות שאתה חבר בהן. ls -l מציג שני שמות בכל שורה: הבעלים, ואחריו הקבוצה. רק לקבוצה השנייה הזו יש השפעה על הקובץ. חברות בעשרים קבוצות עוזרת רק כאשר הקובץ משויך לאחת מהן.
id
stat -c '%U %G %A %n' ~/permdemo/inner/notes.txtid מציג את המשתמש שלך ואת כל הקבוצות שאתה חבר בהן. stat מציג את הבעלים והקבוצה של הקובץ. השווה ביניהם ותדע באיזו שלישייה הליבה תשתמש עבורך.
זו הסיבה שספרייה משותפת מקבלת בדרך כלל קבוצה ואת הביט setgid. sudo chmod 2775 /srv/shared מוצג כ-drwxrwsr-x, וקבצים שנוצרים בתוכה יורשים את הקבוצה של הספרייה במקום את הקבוצה האישית של היוצר, כך שהאדם הבא יוכל להמשיך לכתוב בהם. הקצאת חשבון נפרד לכל שירות היא החצי השני של הסיפור הזה, והיא מוסברת ב-משתמש Linux אחד לכל שירות ב-VPS.
הפקודה umask קובעת את ההרשאות של כל קובץ חדש
קובץ חדש אינו מקבל את ההרשאות שלו ישירות מהמשתמש. הוא מקבל אותן מהתוכנה שיצרה אותו, בניכוי הביטים שה־umask מסיר. ה־umask הוא מסכה של ביטים להסרה, לכן ערך umask גבוה יותר יוצר קבצים פרטיים יותר.
רוב ההפצות מגיעות עם ערך ברירת מחדל של 022. תוכנה שיוצרת קובץ רגיל מבקשת הרשאות 0666. תוכנה שיוצרת תיקייה מבקשת 0777. ה־umask מסיר 022 משתי הבקשות, כך שמתקבלות הרשאות 644 לקבצים ו-755 לתיקיות. זהו בדיוק הצמד שניתן לראות בכל מקום בשרת VPS חדש.
umask
umask -S
touch ~/permdemo/new.txt && mkdir -p ~/permdemo/newdir
ls -ld ~/permdemo/new.txt ~/permdemo/newdirהפקודה umask -S מציגה את אותו הערך כתווים, דבר שקריא יותר מאשר 0022. הגדירו umask 027 בתוך ~/.profile עבור ברירת מחדל מחמירה יותר: 640 לקבצים ו-750 לתיקיות, כך שחברי הקבוצה שלכם יוכלו לקרוא את הקבצים, אך אף אחד אחר לא יוכל.
קיימות שתי מגבלות חשובות. ה־umask יכול רק להסיר ביטים, לעולם לא להוסיף אותם; זו הסיבה שקובץ שנוצר זה עתה לעולם לא יהיה בר-הרצה, ללא קשר להגדרה שתבחרו. כמו כן, שירות systemd לעולם אינו קורא את ה-profile של ה-shell שלכם, לכן יש להגדיר את הערך ישירות בקובץ ה-unit של השירות.
[Service]
UMask=0027מדוע קובצי אתרים מוגדרים כ-644 וספריות כ-755
שרת אינטרנט פועל תחת חשבון משתמש ייעודי, www-data ב-Debian וב-Ubuntu, או nginx ב-Rocky וב-Alma. תהליך זה זקוק להרשאת קריאה בקבצים שהוא מגיש ולהרשאת מעבר (traverse) בספריות שמעליהם. אין לו סיבה לכתוב לקבצים אלו, ואתר סטטי לעולם לא אמור לאפשר זאת.
הרשאת 644 על קובץ מעניקה הרשאת כתיבה לבעלים והרשאת קריאה לכולם, כך שמשתמש ה-deploy יכול לפרסם ומשתמש ה-web יכול להגיש את התוכן. הרשאת 755 על ספרייה מעניקה הרשאת כתיבה לבעלים והרשאת מעבר לכולם, כך שמשתמש ה-web יכול לעבור בנתיב מבלי שתהיה לו אפשרות להוסיף או למחוק דבר. באג ביישום לא יוכל, במקרה כזה, לשכתב את הדפים שהוא מגיש.
כלל המעבר הוא קריטי כאן. אם האתר נמצא ב-/home/deploy/site וההרשאה על /home/deploy היא 750, משתמש ה-web לא יוכל להיכנס כלל לספריית הבית, והבקשה תסתיים בשגיאת HTTP 403 עם שורה הדומה לזו ב-/var/log/nginx/error.log:
open() "/home/deploy/site/index.html" failed (13: Permission denied), client: 203.0.113.5הערך 13 הוא EACCES, סירוב הרשאות מצד ה-kernel. אין תקלה ברשת: הפורט מאזין והבקשה הגיעה, וזה מה שהופך את המצב למבלבל בשלבים הראשונים של הלמידה על איך פורטים מאזינים עובדים ב-Linux. הריצו את namei -l /home/deploy/site/index.html ועקבו במורד השרשרת אחר הספרייה הראשונה שחסרה בה הרשאת x עבור משתמשים אחרים (other).
ספרייה שהיישום כותב אליה, כמו נתיב להעלאת קבצים, היא היוצא מן הכלל. העניקו לה הרשאה באמצעות בעלות (ownership) ולא באמצעות הרחבת ה-mode: השתמשו ב-sudo chown -R www-data:www-data /srv/site/uploads והשאירו את ה-mode על 755. שמרו על הרשאת כתיבה רק בספרייה הספציפית שזקוקה לכך.
שימוש ב-chmod, מבלי לשנות את כל עץ הספריות
chmod תומך בשתי צורות עבודה. מצב אוקטלי מגדיר את כל תשעת הביטים בבת אחת: chmod 644 notes.txt. מצב סימבולי משנה רק את מה שצוין ומשאיר את השאר ללא שינוי: chmod u+x deploy.sh מוסיף הרשאת הרצה לבעלים, ו-chmod go-w notes.txt מסיר הרשאת כתיבה מהקבוצה ומהאחרים.
רקורסיה היא המקום שבו עצים עלולים להינזק. chmod -R 755 . מסמן כל תמונה וכל קובץ תצורה כניתנים להרצה, כיוון ש-chmod אינו מסוגל להבדיל בין סקריפט לבין קובץ JPEG. השתמשו באות גדולה X במקום זאת.
chmod -R u=rwX,go=rX ~/permdemo
stat -c '%a %n' ~/permdemo ~/permdemo/inner/notes.txtהאות הגדולה X מחילה הרשאת הרצה על ספריות, ועל קבצים שכבר הייתה להם הרשאת הרצה כלשהי. ספריות יקבלו הרשאות 755, קבצים רגילים יקבלו 644, וסקריפטים שהיו כבר ניתנים להרצה יישארו כאלו. כאשר לקובץ אחד כבר יש הרשאות שאתם סומכים עליהן, chmod --reference=good.sh other.sh מעתיק אותן לקובץ אחר.
הודעות שמופיעות כאשר הרשאת ביט אינה תקינה
bash: ./deploy.sh: Permission denied מציין שלסקריפט אין את ביט ה-x בשלשת ההרשאות הרלוונטית עבורך, או שלאחת הספריות בנתיב שלו חסרה הרשאת x. הפקודה chmod u+x deploy.sh פותרת את המקרה הראשון.
bash: ./deploy.sh: cannot execute: required file not found היא תקלה שונה עם שם מבלבל. ביט ה-x תקין, אך המפרש (interpreter) שצוין בשורה הראשונה חסר. הסיבה הנפוצה לכך היא סיומות שורות בסגנון Windows, מה שגורם ל-kernel לחפש מפרש בשם /bin/bash\r. תקן זאת באמצעות sed -i 's/\r$//' deploy.sh.
Permissions 0644 for '/home/deploy/.ssh/id_ed25519' are too open. מגיעה מלקוח ה-SSH, שמסרב להשתמש במפתח פרטי שחשבונות אחרים יכולים לקרוא. המפתח דורש הרשאות 600 והתיקייה ~/.ssh דורשת 700. טיפול מלא במפתחות מפורט ב-ניהול מפתחות SSH והרשאות הקבצים שלהם.
Authentication refused: bad ownership or modes for directory /home/deploy/.ssh מופיעה ביומן השרת כאשר ספריית הבית או התיקייה .ssh שלה ניתנות לכתיבה על ידי הקבוצה. הגדרת ה-StrictModes של sshd דוחה את המפתח, ומהצד של הלקוח זה נראה כמו בקשת סיסמה בלתי צפויה ללא הסבר.
sudo: /etc/sudoers is world writable, בליווי sudo: no valid sudoers sources found, quitting, מציינת ש-sudo בדק את ההרשאות של קובץ התצורה של עצמו וסירב לפעול. על הקובץ להיות במצב 0440. זוהי תוצאה קלאסית של הרצת chmod רקורסיבית גורפת, והיא עלולה להופיע יחד עם הודעת ה-sshd שלעיל, מה שמותיר את מסוף הניהול של ספק השרת כדרך היחידה לחזור פנימה.
מדוע 777 אינו פתרון
הרשאת 777 מעניקה גישת כתיבה לכל חשבון במכונה, ולכל תהליך שרץ תחת אחד מהחשבונות הללו. שרת מריץ שירותים תחת משתמשים ייעודיים, לכן "כולם" בשרת VPS כולל הרבה יותר מאשר במחשב אישי. שירות שנפרץ יכול לכתוב בכל מקום שבו הרשאת 777 מאפשרת זאת.
תחת ספריית השורש של אתר אינטרנט, הנזק הוא ישיר. ספרייה שניתן לכתוב אליה מכל מקום, ושהשרת גם מגיש ממנה קבצים, הופכת פגיעות של העלאת קבצים לדרך להשתלת סקריפט ולאחר מכן הרצתו.
777 היא כמעט תמיד התשובה השגויה לשאלה של בעלות. הסימפטום הוא "היישום אינו יכול לכתוב לספרייה זו". הסיבה היא שהספרייה שייכת למשתמש הלא נכון. שימוש ב-sudo chown -R appuser:appuser /srv/app/storage עם הרשאות 755 פותר זאת ומונע גישה מכל חשבון אחר. יצירת חשבונות אלו לפני פריסת כל שירות היא חלק מ-עשר הדקות הראשונות בשרת VPS חדש.
כתיבה גלובלית היא לגיטימית במקום מוכר אחד, /tmp, והיא מוגדרת כ-drwxrwxrwt. ה-t בסוף הוא ה-sticky bit: הספרייה ניתנת לכתיבה על ידי כולם, אך משתמש יכול למחוק רק קבצים שבבעלותו. ללא ביט זה, כל חשבון יוכל למחוק קבצים זמניים של חשבון אחר.
קראו את מצב ההרשאות לפני ביצוע שינויים
פקודות אלו מבצעות קריאה בלבד של מצב המערכת, ולכן בטוח להריץ אותן בכל סביבה.
id
umask
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt
namei -l ~/permdemo/inner/notes.txt
find ~/permdemo -perm -0002find <path> -perm -0002 מציג את כל הקבצים תחת נתיב מסוים שמוגדרים עם הרשאת כתיבה לכל משתמש (world write bit). זו הדרך המהירה ביותר לבצע ביקורת על שרת לאחר שמישהו ביצע בו תיקונים באמצעות chmod 777.
כדי לבדוק אם חשבון שירות מסוים יכול להיכנס לספרייה, יש להריץ את הבדיקה תחת אותו חשבון. sudo -u www-data test -x /srv/site && echo yes || echo no מדפיס yes כאשר למשתמש יש הרשאת מעבר (traverse) לספרייה, ו-no כאשר אין לו. הרצת הבדיקה כ-root אינה מוכיחה דבר, כיוון ש-root מדלג על בדיקת ההרשאות והתשובה תמיד תהיה yes.
FAQ
מה המשמעות של drwxr-xr-x ב-Linux?
זוהי ספרייה, כפי שמצוין על ידי ה-d בתחילת המחרוזת, עם הרשאות 755. שלישיית הבעלים היא rwx, לכן לבעלים יש את כל ההרשאות עליה. שלישיית הקבוצה היא r-x ושלישיית האחרים היא r-x, לכן כל משתמש אחר יכול להציג את רשימת הקבצים בתוכה ולעבור דרכה, אך רק הבעלים יכול להוסיף או להסיר קבצים. ניתן לאמת כל נתיב באמצעות stat -c '%A %a %U %G %n' <path>, שמציג את צורת האותיות ואת הערך האוקטלי זו לצד זו.
מדוע קובצי אינטרנט הם 644 וספריות אינטרנט הן 755?
שרת האינטרנט רץ תחת חשבון משתמש שונה, www-data ב-Ubuntu. הוא זקוק להרשאת קריאה לקבצים שהוא מגיש ולהרשאת מעבר (traverse) לכל ספרייה שמעליהם, ואין לו סיבה לכתוב לאף אחד מהם. הרשאת 644 מעניקה לבעלים הרשאת כתיבה ולכל השאר הרשאת קריאה. הרשאת 755 מעניקה לבעלים הרשאת כתיבה ולכל השאר הרשאת מעבר. ספרייה שהיישום חייב לכתוב אליה צריכה לעבור לבעלות המשתמש של אותו יישום באמצעות chown, במקום להרחיב את ההרשאות עבור כולם.
האם ביט ה-x אומר שאני יכול להריץ ספרייה?
לא. בספרייה, x משמעו מעבר, כלומר הזכות לפתור שם של קובץ בתוכה בזמן שה-kernel עובר בנתיב. cd זקוק לכך, וכך גם כל פעולת פתיחה של קובץ הנמצא בתוכה. כל ספרייה לאורך הנתיב זקוקה ל-x, לכן קובץ עם הרשאת 644 עדיין לא יהיה נגיש אם לאחת הספריות שמעליו חסרה הרשאת x עבורך. namei -l /path/to/file מציג את ההרשאות של כל ספרייה בשרשרת, מה שמאפשר לראות היכן החיפוש נעצר.
האם chmod 777 הוא אי פעם הפתרון הנכון?
כמעט לעולם לא בשרת. הוא מעניק הרשאת כתיבה לכל חשבון במכונה, כולל החשבונות שתחתיהם רצים שירותים, כך ששירות שנפרץ יכול לשכתב את הקובץ. כאשר יישום אינו יכול לכתוב לספרייה, הבעיה האמיתית היא בדרך כלל הבעלות: sudo chown -R appuser:appuser /srv/app/storage עם הרשאות 755 מעניק ליישום את מה שהוא צריך ומשאיר את כל השאר בחוץ. החריג המוכר הוא /tmp עם הרשאות 1777, וזה עובד רק בגלל שה-sticky bit מונע ממשתמשים למחוק קבצים של משתמשים אחרים.
מדוע ls מדפיס נקודה או פלוס אחרי ההרשאות?
התו האחד-עשר מתאר חוקים מעבר לתשעת ביטי ההרשאות. נקודה, כמו ב-drwxr-xr-x., מציינת שמוצמד הקשר אבטחה של SELinux, דבר שהוא סטנדרטי ב-Fedora וב-Rocky. פלוס, כמו ב-drwxr-xr-x+, מציין שמוגדר POSIX ACL (רשימת בקרת גישה), כך שלמשתמש או לקבוצה מסוימים יש זכויות ששלוש השלישיות אינן מציגות. הרץ את getfacl <path> כדי להציג את הערכים הנוספים הללו.