chmod — команда изменения прав файлов и папок в linux

В *nix-системах так всё устроено, что всё является файлом. Это утверждение является парадигмой данного семейства операционных систем. У каждого файла есть владелец, есть группа и есть права на использование данного файла. Данные права определяются для владельца, для группы и для всех остальных. Так всё устроено. В этой статье подробно рассмотрим вопрос прав на файла (и папки), а также команду chmod, которая позволяет менять эти права.

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



О правах на файл в 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 и всё, что находится в ней.

Видео с примером применения команды chmod для запуска BASH-скрипта

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню