chmod

chmod (від англ. ch ange mod e ) - Програма для зміни прав доступу до файлам і директоріям. Назва походить від програми ОС UNIX CHMOD, яка, власне, змінює права доступу до файлів, тек і символічним посиланнях.


1. Використання

Права записуються відразу для трьох типів користувачів: власника-користувача файлу; користувачів, що входять до групи-власник; для інших користувачів. Аргумент команди chmod, задаючий дозволу, може бути записаний у двох форматах: в числовому і у символьному.

Для розуміння суті завдання прав в Unix-like системах, потрібно знати представлення чисел в вісімковій і двійковій системах числення

користувач група інші
7 5 5
111 101 101
rwx rx rx
u g o

Приклад символьної запису: 'rwxr-xr-x'.

Прикладом числової запису може служити '755 ', яка еквівалентна записаної вище строковою запису: кожне право має числовий код і може бути задане вручну:

  • 400 - власник має право на читання;
  • 200 - власник має право на запис;
  • 100 - власник має право на виконання;
  • 40 - група має право на читання;
  • 20 - група має право на запис;
  • 10 - група має право на виконання;
  • 4 - інші мають право на читання;
  • 2 - інші мають право на запис;
  • 1 - інші мають право на виконання.

Підсумувавши ці коди можна отримати символьну запис. Наприклад, chmod 444 {імяфайла}: 400 +40 +4 = 444 - усі мають право тільки на читання.

Крім стандартних 'rwx' значень команда CHMOD здійснює ще управління бітами SGID, SUID і T. Встановлені атрибути SUID або SGID дозволяють запускати файл на виконання з правами власника файлу або групи відповідно.

Для SUID - вага 4000, а для SGID - 2000.

Приклад chmod 4555 {імяфайла} - усі мають право на читання і виконання, але запускатися файл на виконання буде з правами власника. Для директорії: установка SGID призведе до встановлення приналежності кожного нового створюваного файлу до тієї ж групи, до якої належить сама директорія, а не до основної групи власника, як це відбувається за умовчанням. SUID для директорії не має сенсу [1].

t-біт використовується з директоріями. Коли t-біт для директорії не встановлений, файл в даній директорії може видалити будь-який користувач, що має доступ на запис до даного файлу. Встановлюючи t-біт на директорію, ми змінюємо це правило таким чином, що видалити файл може тільки власник цього файлу. Слідуючи приведеній вище кодуванні, t-біт має вагу 1000.

Примітка: Право на запис (w) дає користувачеві можливість записувати або змінювати файл, а право на запис для каталогу - можливість створювати нові файли або видаляти файли з цього каталогу. Якщо на каталозі стоїть можливість запису (w), то файл всередині цього каталогу можна буде видалити, навіть якщо право на запис для нього не встановлено. (У відповідності з концепцією файлової системи POSIX).


2. Популярні значення

400 (-r --------)
Власник має право читання; ніхто інший не має права виконувати ніякі дії
644 (-rw-r - r -)
Всі користувачі мають право читання; власник може редагувати
660 (-rw-rw ----)
Власник і група можуть читати і редагувати; решта не мають права виконувати ніяких дій
664 (-rw-rw-r -)
Всі користувачі мають право читання; власник і група можуть редагувати
666 (-rw-rw-rw-)
Всі користувачі можуть читати й редагувати
700 (-rwx ------)
Власник може читати, записувати і запускати на виконання; ніхто інший не має права виконувати ніякі дії
744 (-rwxr - r -)
Кожен користувач може читати, власник має право редагувати та запускати на виконання
755 (-rwxr-xr-x)
Кожен користувач має право читати і запускати на виконання; власник може редагувати
777 (-rwxrwxrwx)
Кожен користувач може читати, редагувати та запускати на виконання
1555 (-r-xr-xr-t)
Кожен користувач має право читати і запускати на виконання; видалити файл може тільки власник цього файлу
2555 (-r-xr-sr-x)
Кожен користувач має право читати і запускати на виконання з правами групи (user group) власника файлу
4555 (-r-sr-xr-x)
Кожен користувач має право читати і запускати на виконання з правами власника файлу

3. Особливості

Значеннями за умовчанням є:

  • для файлів: 644 (-rw-r - r -)
  • для директорій: 755 (drwxr-xr-x)

Так відбувається тому, що прапор "виконання" по-різному діє на файли і директорії. Для директорії він означає можливість увійти в неї.

Наприклад, можна зробити з командного рядка:

Наступна команда виконає рекурсивне застосування правил для всіх файлів в директорії "/ home / test", а також для всіх файлів у всіх підтеках:

 # Find / home / test-type f-exec chmod 644 {} \; 

Наступна команда виконає рекурсивне застосування правил для всіх директорій в директорії "/ home / test", а також для всіх директорій у всіх підтеках:

 # Find / home / test-type d-exec chmod 755 {} \; 

Того ж результату можна домогтися і без використання find (зверніть увагу на заголовну X):

 # Chmod-R go = rX, u = rwX / home / test 

Примітки

  1. Скотт Граннеман "Linux кишеньковий довідник", Видавничий будинок "Вільямс", 2007