Що таке сhmod?
chmod змінює права доступу до файлів і каталогів у Unix-подібних системах. Права на читання, запис і виконання задають окремо для власника, групи та інших користувачів. Права на каталог впливають на перегляд його списку, створення файлів і доступ до вкладених шляхів.
Символьний і числовий запис
chmod u+x script.sh додає власнику право виконання. Число 755 означає rwxr-xr-x: власнику доступні читання, запис і виконання, групі та іншим — читання й виконання. Цифри складаються з 4 (читання), 2 (запис), 1 (виконання). Значення 644 часто підходить для звичайного файлу, але його доречність залежить від призначення файлу й середовища.
Права каталогів і видалення
Для каталогу r дає змогу перелічувати імена, w — змінювати список записів, x — проходити за відомим шляхом. Видалення файлу зазвичай визначається правами на батьківський каталог, а не правом запису в сам файл. Тому chmod 444 file не забороняє власнику доступного для запису каталогу видалити цей файл. Це пояснює посібник GNU Coreutils.
Особливі біти
Початкова вісімкова цифра задає особливі біти: 4 — setuid, 2 — setgid, 1 — sticky. Наприклад, 4755 вмикає setuid для виконуваного файлу; його слід застосовувати лише з розумінням ризиків. У каталозі setgid допомагає успадковувати групу, а sticky обмежує видалення чужих файлів у спільному каталозі на кшталт /tmp. Для перевірки числового режиму скористайтеся калькулятором chmod.
Приклад налаштування сайту
Уявімо каталог із HTML-файлами, які вебсервер має читати, а оновлювати може лише власник. Для каталогу часто починають із 755, для звичайних файлів — із 644, потім враховують власника процесу, групи й правила хостингу. Це приклад, а не універсальний рецепт: закриті конфігураційні файли потребують суворіших прав. Не ставте 777 для «виправлення» помилки доступу: так будь-який локальний користувач отримує право змінювати об’єкт, якщо інші обмеження не завадять.
Перевірте поточні права командою ls -l, а власника — командою stat. Якщо дозволи виглядають правильними, але доступ усе одно заборонено, причина може бути у правах одного з батьківських каталогів, списках ACL, SELinux/AppArmor або роботі сервісу від іншого користувача. Зміна лише останнього файлу в шляху тоді не допоможе. Перед рекурсивним chmod -R перевірте, яких файлів і каталогів воно торкнеться: однакові права зазвичай не підходять виконуваним файлам, звичайним документам і каталогам.
Як не помилитися з особливими бітами
Число 455 складається лише з трьох цифр і не вмикає setuid; для setuid потрібна четверта початкова цифра, як у 4755. Setuid не робить програму безпечною: помилка в такій програмі може дати доступ із правами її власника. Sticky bit корисний у спільних каталогах, де кілька користувачів можуть створювати файли, але не повинен замінювати обмеження доступу й нагляд за безпекою. Офіційні правила описано в посібнику GNU.
Після зміни прав перевірте очікувану дію від імені того користувача, від якого працює сервіс. Успішний запуск команди адміністратором не доводить, що доступ має звичайний процес.
