В *nix-системах так всё устроено, что всё является файлом. Это утверждение является парадигмой данного семейства операционных систем. У каждого файла есть владелец, есть группа и есть права на использование данного файла. Данные права определяются для владельца, для группы и для всех остальных. Так всё устроено. В этой статье подробно рассмотрим вопрос прав на файла (и папки), а также команду chmod, которая позволяет менять эти права.
- О правах на файл в linux
- Помощь по команде
chmodв linux - Изменение прав на файл в буквенном виде
- Изменение прав на файл в цифровом виде
- Опции команды
chmodв linux - Видео с примером применения команды
chmodдля запуска BASH-скрипта
О правах на файл в linux
Итак, есть три категории, которым можно (и должно) прописать права на файл:
- u [user] — владелец файла
- g [group] — группа файла
- o [other] — все остальные пользователи операционной системы
Данные категории составляют триаду прав на файл.
Теперь собственно о правах. Файл может быть:
- r [read] — прочитан
- w [write] — записан/изменён
- x [execute] — запущен как процесс на выполнение
- s [superuser] — выполнение от имени суперпользователя (дополнительный параметр)
Данные свойства могут быть записаны в восьмиричной системе следующим образом:
- r = 4 (22)
- w = 2 (21)
- x = 1 (20)
Именно такой (восьмиричной) записью обычно и пользуются, где 0 — означает, что прав на использование нет, 7 — разрешено всё (4+2+1) читать, менять и исполнять.
Обычные права на файл в linux 755 [-rwxr-xr-x] (полные права для владельца, а для группы и остальных только чтение и выполнение). Это позволяет читать документы и выполнять скрипты от разных пользователей, но только владелец имеет право модифицировать (изменять) свои файлы.
На файлы, которые не нужно выполнять, обычно выставляются права 644 [-rw-r--r--]. Владелец может читать и менять, остальные — только читать.
Помощь по команде chmod в linux
Теперь о том, как превратить текстовый файл с правами 644 [-rw-r--r--] в скрипт, который можно запустить, то есть с правами 755 [-rwxr-xr-x]. После запуска написанная программа попадёт в оперативную память и сможет быть передана процессору для обработки, то есть из программы превратится в процесс. Для этого нужно дать разрешение на исполнение. Для изменения прав на файл (и папки) в linux служит команда chmod.
Сперва посмотрим, как выглядит помощь по этой команде в Debian 9:
root@server:~# chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
or: chmod [OPTION]... OCTAL-MODE FILE...
or: chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.
-c, --changes like verbose but report only when a change is made
-f, --silent, --quiet suppress most error messages
-v, --verbose output a diagnostic for every file processed
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive change files and directories recursively
--help display this help and exit
--version output version information and exit
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/chmod>
or available locally via: info '(coreutils) chmod invocation'
Изменение прав на файл в буквенном виде
Для того, чтобы изменить права на файл (папку) в linux в буквенном виде, нужно вспомнить то, что написано выше про ugo (user, group, other), rwx (read, write, execute) и понимать, что + означает "добавить", а - — "отнять". Дальше всё просто, например, нужно добавить права на выполнение владельцу, то есть u+x. Ещё несколько примеров:
u+x- разрешить выполнение для владельца;ugo+x- разрешить выполнение для всех;ug+w- разрешить запись для владельца и группы;o-x- запретить выполнение для остальных пользователей;ugo+rwx- разрешить все для всех
В итоге, команда выглядит так:
root@server:~# chmod ugo+x filename
Эта команда разрешит исполнение файла с именем filename для всех (владельцу, группе и остальным)
Изменение прав на файл в цифровом виде
В цифровом виде всё точно также, только с чётким указанием прав для каждой категории:
root@server:~# chmod 0755 filename
Команда в примере выше выставит права 755 для файла с именем filename.
Опции команды chmod в linux
Собственно, на этом можно было бы закончить, но есть ещё опции, которые можно использовать при работе команды chmod:
-c- выводить информацию обо всех изменениях;-f- не выводить сообщения об ошибках;-v- выводить максимум информации;--reference- взять маску прав из указанного файла;-R- включить поддержку рекурсии;--help- отобразить подсказку/помощь;--version- вывести версию утилиты.
На мой взгляд, самая востребованная опция — это опция рекурсии -R. То есть когда нужно изменить права не только у папки, но и у всех вложенных неё файлах и папках.
root@server:~# chmod -R 0755 foldername
Выставит права 755 на папку foldername и всё, что находится в ней.