Понимание прав доступа к файлам в linux

Примеры использования chmod

Как уже говорилось ранее, параметр chmod – это удобный инструмент, позволяющий повысить безопасность системных файлов ОС и пользовательских данных за счет назначения прав доступа к каталогам и файлам.

Обратите внимание! Если пользователь обладает расширенными правами суперпользователя, то он сможет изменять полномочия любой директории ОС, принадлежащей любому юзеру. Обычный же пользователь такие операции сможет производить исключительно со своими данными

Смена полномочий может осуществляться несколькими способами. Наиболее распространенные – используя абсолютные и символьные режимы. С особенностями реализации каждого стоит ознакомиться более детально.

Символьный режим

По умолчанию значение прав доступа директории file – rwxrwxrwx – имеет полный доступ для всех. Далее, в зависимости от поставленной задачи, параметры можно изменять следующим образом:

  • $ chmоd  a-x  (rw-rw-rw-) – параметр, ограничивающий доступ на редактирование для всех групп и юзеров.
  • $ chmod  go-w  (rw-r—r—) – команда, запрещающая группам и остальным пользователям редактировать данные.
  • $ chmоd u x (rwxr—r—) – разрешение на редактирования файла владельцем.
  • $ chmod g=u (rwxrwxr—) – присваивание группе тех прав, которыми обладает владелец каталога или папки.
  • $ chmоd go-rw (rwx—x—) – параметр, который ограничивает чтение и редактирование файлов пользователями группы и прочими юзерами.

Как задать параметры, используя символьные нотации в Линукс

Для использования перечисленных параметров пользователю достаточно просто подставлять свои значения.

Использование команд в абсолютном режиме

В данном режиме предусмотрено большее количество команд. Теперь более подробно об использовании каждой из них:

$ chmоd 777 (rwxrwxrwx) – команда, предоставляющая полный доступ к чтению, записи и редактированию данных всеми группами и юзерами.
$ chmod 666 (rw-rw-rw-) – предоставление разрешения на запись и чтение для владельца, группы и других пользователей.
$ chmоd 744 (rwxr—r—) – команда, предоставляющая полный доступ владельцу директории, и доступ к чтению группам и другим юзерам.
$ chmod 700 (rwx——) — команда, предоставляющая полный доступ владельцу директории, и ставящая запрет на доступ группам и другим пользователям.
$ chmоd 644 (rw-r—r—) – владелец файла имеет право читать и вести записи, остальные группы и пользователи имеют возможность только читать файлы.
$ chmod 640 (rw-r——) – команда, устанавливающая разрешение на запись и чтение файла владельцу и группе, для других юзеров доступ ограничен.
$ chmоd 444 (r—r—r—) – команда, которая устанавливает доступ к чтению для всех пользователей и отдельных групп.
$ chmod 755 (rwxr-xr-x) – открывает доступ владельцу для записи, чтения и редактирования владельцем, группы и другие юзеры могут только открывать файл в режиме чтения.
$ chmod 505 (r-x—r-x) – владелец файла имеет право на чтение и редактирование, для остальных пользователей доступ ограничен.
$ chmоd 755 * – команда, которая открывает все права доступа в текущем каталоге

Важно понимать, что юзер имеет неограниченные полномочия на все файлы конкретной директории, другие пользователи и группы могут только читать и редактировать файлы.
$ chmоd -R 777 * – рекурсивная команда, распространяющаяся на все подкаталоги.. В данном случае рассмотрены лишь основные параметры, но далеко не все

В данном случае рассмотрены лишь основные параметры, но далеко не все.

Установка прав при помощи чисел

Параметр chmod проще использовать, когда он представляется в виде одной восьмеричной цифры для каждой категории юзеров

Однако, в этом случае важно помнить, что обозначает каждая цифра:

  • 0 – установлены одни ограничения, ничего не разрешено;
  • 4 – пользователям, группам и остальным пользователя доступно только чтение;
  • 5 – всем категориям юзеров разрешено только чтение и редактирование пользовательских/системных данных;
  • 6 – разрешено чтение и запись данных;
  • 7 – предоставляет всем категориям неограниченный доступ к директориям, то есть чтение, запись и исполнение.

В первом аргументе на картинке указано три цифры, которые обозначают следующее: первая – владелец директории, вторая – группы, а третья – прочих пользователей.

Как с помощью чисел установить права в ОС Linux

Особенности

Значениями по умолчанию являются:

  • для файлов:
  • для директорий:

Значения разные для файлов и директорий потому, что флаг «выполнения» по-разному действует на файлы и директории. Для обычных файлов «выполнение» означает открытие файлов, для исполняемых файлов — их запуск, а для каталогов — просмотр содержимого.

Например, можно сделать из командной строки:

Следующая команда выполнит рекурсивное применение правил для всех файлов в директории «/home/test», а также для всех файлов во всех поддиректориях:

Следующая команда выполнит рекурсивное применение правил для всех директорий в директории «/home/test», а также для всех директорий во всех поддиректориях:

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

chmod в php

chmod играет важную роль при программировании на языке php. Особого внимания заслуживают случаи работы с файлами, особенно при настройке движков сайтов (CMS), форумов, гостевых книг и пр. Заметим, что chmod используется языком php только в Unix-подобной операционной системе, для которой и описаны приведенные ниже примеры. Заметим, что хостинг, в основном, базируется на Unix-подобной операционной системе. В этих примерах показаны только принципы программирования в php при работе с chmod. В силу особенностей языка php права доступа в нем записывается только в числовом формате, поэтому рекомендуем символьный формат chmod предварять символом 0.

Читатели должны осознавать тот факт, что при программировании они должны использовать функции для определения наличия проверяемого файла, наличия переменных, приведения типов и пр.

chmod и Cute FTP

Cute FTP является одним из наиболее популярных FTP-клиентов в операционной системе Windows, обладающий широким спектром возможностей, в частности, изменение прав доступа на удаленном сервере. Программа является условно-бесплатной (shareware) и без регистрации будет работать только 30 дней.

После запуска программы необходимо войти на FTP-сервер. Для этого удобно воспользоваться Site Manager’ом, окно которого выскакивает при первом запуске программы. Если соединение еще не создано, то необходимо его создать нажав на кнопку New, затем FTP Site… После этого необходимо в поле Label ввести название соединения (может быть произвольным), в поле Host address вводится адрес FTP-сервера без указания протокола (без ftp://) и слеша в конце. В поля Username и Password необходимо ввести учетное имя и пароль доступа соответственно. Для соединения с сервером следует нажать Connect.

Внимание. Cute FTP по умолчанию сохраняет пароли

Это небезопасно! Если не требуется сохранять пароль, то поле Password заполнять не требуется. В этом случае программа сама спросит пароль. Более подробно см. в руководстве к программе.

Если файлы расположены в табличном виде, то в столбце Attributes можно увидеть права доступа. Для включения табличного вида необходимо в меню выбрать View/View/Details. В указанном столбце все элементы содержат по 10 символов, — последние 9 из них и есть chmod в символьном формате.

Для изменения прав доступа необходимо выделить требуемые файлы, а затем вызвать контекстное меню, в котором выбрать Properties / CHMOD (горячая клавиша +). В появившемся окошке можно изменить права доступа на требуемые, после чего следует нажать кнопку «Применить».

chmod и Total Commander

Total Commander является одним из лучших файловых менеджеров для Windows, имеющий двухпанельный интерфейс. Среди возможностей программы выделим способность выполнять функции FTP клиента. Программа также является условно-бесплатной (shareware) и без регистрации будет работать только 30 дней.

Подключение к FTP серверу можно осуществить, выбрав в меню Net/FTP Connect (горячая клавиша +) либо Net/FTP New Connection… (горячая клавиша +). После соединения в столбце Attr последние три символа будут показывать chmod в числовом формате. Для изменения прав доступа выделите требуемые файлы, затем выберите в меню Files/Change Attributes… В появившемся окошке можно изменять права доступа.

Сортировка объявлений

Вы можете отсортировать список по расширению, размеру файла или времени изменения. Эти параметры необязательно использовать с форматом длинного списка, но обычно это имеет смысл. Если вы выполняете сортировку по размеру файла, имеет смысл увидеть размеры файлов в списке. Когда вы сортируете по типу расширения, формат длинного списка не так важен.

Для сортировки по расширению используйте параметр -X (сортировка по расширению).

ls -X -1

Сначала перечисляются каталоги (без расширений), затем в алфавитном порядке следуют остальные в соответствии с расширениями.

Для сортировки по размеру файла используйте параметр -S (сортировка по размеру файла).

ls -l -h -S

Порядок сортировки от наибольшего к наименьшему.

Чтобы отсортировать список по времени изменения, используйте параметр -t (сортировать по времени изменения).

ls -l -t

Список отсортирован по времени модификации.

Если время изменения файла находится в пределах текущего года, отображается информация о месяце, дне и времени. Если дата изменения была не в текущем году, отображается информация о месяце, дне и году.

Быстрый способ получить самые новые и самые старые файлы в каталоге — использовать ls с командами head и tail.

Чтобы получить самый новый файл или каталог, используйте эту команду:

ls -t | head -1

Чтобы получить самый старый файл или каталог, используйте эту команду:

ls -t | tail -1

Установка бита SUID

Бит SUID легко изменить с помощью chmod. Символический режим u + s устанавливает бит SUID, а символический режим us очищает бит SUID.

Чтобы проиллюстрировать некоторые концепции бита SUID, мы создали небольшую программу под названием htg. Он находится в корневом каталоге пользователя dave, и для него не установлен бит SUID. Когда он выполняется, он отображает реальные и действующие идентификаторы пользователей (UID).

Реальность UID принадлежит человеку, запустившему программу. Эффективный идентификатор — это учетная запись, с которой программа ведет себя так, как если бы она была запущена.

Набираем следующее:

ls -lh htg
./htg

Когда мы запускаем локальную копию программы, мы видим, что для реального и эффективного идентификатора установлено значение dave. Итак, он ведет себя так же, как и должна нормальная программа.

Давайте скопируем его в каталог / usr / local / bin, чтобы другие могли его использовать.

Мы вводим следующее, используя chmod для установки бита SUID, а затем проверяем, установлен ли он:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Итак, программа скопирована, и бит SUID установлен. Мы запустим его снова, но на этот раз запустим копию в папке / usr / local / bin:

htg

Несмотря на то, что Дэйв запустил программу, эффективным идентификатором является пользователь root. Итак, если Мэри запускает программу, происходит то же самое, как показано ниже:

htg

Настоящий идентификатор — Мэри, а эффективный — root. Программа работает с разрешениями пользователя root.

Немного чёрной магии

Помните, я говорил, что права задаются тремя числами? Для владельца, для группы и для остальных? Это не вся правда. Есть ещё одно число, которое творит настоящую чертовщину в мозгу неопытных пользователей. По умолчанию этот блок не затрагивается (как будто там стоит 0), но если указать явно, то вот что значит тот самый блок:

SUID (4000, “u+s”) – если этот бит назначен на исполняемом файле, то файл запустится от имени владельца файла (а не того пользователя, кто этот файл запустил).

Допустим, у нас есть скрипт, добавляющий новое правило в файрволл. Само-собой, операция требует повышенных прав (root) и обычный пользователь запустив такой скрипт получит отказ в доступе. Но если назначить скрипту SUID-бит и владелец скрипта будет root, то пользователь сможет его запускать от имени root соответственно. Это круто, но в то же время может быть опасно.

Если SUID назначен на каталог – то файл запустится от имени владельца каталога.

SGID (2000, “g+s”) – практически то же самое, только вместо владельца – берётся группа владельца.

Sticky (1000, “t”) – вот тут начинается самая жесть. Если у нас есть каталог, на котором установлен t-бит, то удалить из этого каталога файлы может только владелец, несмотря на то, что на каталоге может стоять право 777.

Поясню. Допустим, у нас есть каталог /tmp. В него может писать кто угодно. Сделаем там права 777 – т.е. полная помойка. Но вам бы не хотелось, чтобы я мог удалять ваши файлы? А мне бы не хотелось, чтобы вы удаляли мои. Поэтому на каталог вешаем бит “t” и всё. Сохранять в каталог могут все, а удалять – только своё.

Установка Sticky-бита на файл не имеет смысла сейчас, современные версии ОС его игнорируют. Раньше он использовался для запрета выгрузки файла из памяти.

Синтаксис и опции umask

Команда umask, как было сказано ранее, определяет битовую маску, которая будет применена к новым файлам. У команды довольно простой синтаксис и есть только несколько опций:

$ umask опции маска_в_восьмеричном_виде

Помимо маски в восьмеричном виде есть и способ задания прав по умолчанию схожий с синтаксисом команды chmod:

$ umask опции u=права,g=права,o=права

Опции утилиты:

  • -p — вывести команду umask, которая при выполнении задаст текущую маску в восьмеричном виде;
  • -S — вывести права по умолчанию для папки в формате u=rwx, g=rwx, o=rwx рассчитанные по текущей маске.

Посмотреть текущее значение маски можно двумя способами. Если команде передать опцию -p, то она выведет команду для установки текущей маски:

Параметр -S выводит текущие разрешения в формате u=rwx, g=rwx, o=rx, где х (выполнение) относится только к каталогам. Право на выполнение для файлов можно выдать только с помощью chmod.

Теперь рассмотрим способы задания маски:

Как видите, четвертую цифру можно опустить. Маску можно задать и с помощью более традиционных обозначений:

В отличие от битовой маски, таким способом прописываются разрешения, а не запреты. Иными словами, права задаются ровно так же, как и в chmod. В этом примере для категории other мы не указали никаких прав, таким образом запрещены все три операции. Для файлов, как и в случае с битовой маской, право на выполнение не выдаётся.

Группы прав можно объединять, или же задавать права сразу для всех категорий, использовав параметр a= (all).

Также имеется возможность работы с отдельными правами. Оператором + или — можно разрешить или запретить определённое действие, остальные биты в маске останутся нетронутыми.

Помимо прочего вы можете комбинировать два предыдущих способа. Например, разрешить пользователю все операции, а группе и остальным пользователям убрать право на чтение.

Переходим к самому интересному – применению команды на практике. Из очевидного стоит отметить добавление команды в какой-либо скрипт. Например, можно запретить изменение файлов, которые будут записаны в дальнейшем. Напомним, что команда будет действовать в пределах одной сессии терминала.

В этом примере при выполнении скрипта необходимо иметь маску по умолчанию, поэтому прописывается команда umask.

Другой пример использования не столь безопасный. Команда прописывается в конфигурационных файлах пользователя. Изменить маску для оболочки терминала можно добавлением строчки с командой umask в файле ~/.bashsrc. Это справедливо для дистрибутивов на основе Debian. В других дистрибутивах может потребоваться редактирование файла .profile.

Глобальные изменения оболочки вступят в силу после добавления строчки в файл /etc/bash.bashsrc. Но эта маска имеет меньший вес, чем та, что задаётся в домашнем каталоге. Впрочем, вы можете задать лишь необходимые права для пользователя, а остальные оставить из глобальной конфигурации. Например, для пользователя задать параметр g+w, что разрешит ему изменение файлов группы.

Изменение маски для всех программ системы – нетривиальная задача, которая потребует внесение множества правок. Поэтому вместо этого используют локальные права, установленные командой setfacl.

Options

-c, —changes Like —verbose, but gives verbose output only when a change is actually made.
-f, —silent, —quiet Quiet mode; suppress most error messages.
-v, —verbose Verbose mode; output a diagnostic message for every file processed.
—no-preserve-root Do not treat » (the root directory) in any special way, which is the default setting.
—preserve-root Do not operate recursively on ».
—reference=RFILE Set permissions to match those of file RFILE, ignoring any specified MODE.
-R, —recursive Change files and directories recursively.
—help Display a help message and exit.
—version Output version information and exit.

Команда chmod

Команда chmod предназначена для изменения прав доступа файлов и директорий в Linux. Название команды произошло от словосочетания «change mode».

Синтаксис команды chmod следующий:

Разрешения можно задавать двумя способами:

  • Числом
  • Символами

Запись прав доступа числом

Пример:

В данном формате права доступа задаются не символами rwx, как описано выше, а трехзначным числом. Каждая цифра числа означает определенный набор прав доступа.

  • Первая цифра используется для указания прав доступа для пользователя.
  • Вторая цифра для группы.
  • Третья для всех остальных.

В таблице ниже приводятся все возможные комбинации разрешений rwx и соответсвующие им числа (которые используются в команде chmod):

Число Разрешения Символьное обозначение
разрешения отсутствуют
1 x — запуск —x
2 w — изменение -w-
3 x+w — запуск+изменение -wx
4 r — чтение r—
5 r+x — чтение+запуск r-x
6 r+w — чтение+изменение rw-
7 r+w+x — чтение+изменение+запуск rwx

Рассмотрим использование команды chmod с записью прав доступа числом на примере. Установим для файла права доступа 764:

Это означает (см. таблицу выше), что для файла myfile мы устанавливаем права доступа 764, которые означают:

  • 7 — права для владельца-пользователя. Владелец файла может читать, изменять и запускать файл (r+w+x).
  • 6 — права для группы. Пользователи, которые принадлежат группе могут читать и изменять файл (r+w).
  • 4 — права для всех остальных. Все остальные могут только читать файл (r).

Если записать 764 с помощью символов (см. таблицу), то мы получим: «rwxrw-r-».

В таблице ниже приведены некоторые часто используемые значения числовых значений прав доступа:

Числовоеобозначение «rwx»-обозначение Описание
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 Все пользователи могут читать, изменять и редактировать файл.

Запись прав доступа символами

Примеры:

Как вы можете видеть, в данном формате права доступа задаются символами rwx, но в синтаксисе используются и другие вспомогательные символы, например, математические операции «+» и «» и такие символы как, например, «g» или «u».

Общий синтаксис можно записать примерно так:

Обозначения для владельцев файла следующие:

Обозначение Описание
u Владелец-пользователь.
g Группа.
o Все остальные.
a Вообще все.

Математические операции означают следующее:

Оператор Описание
+ Добавляет к текущим правам доступа новое разрешение.
Удаляет из текущих прав доступа определенное разрешение.
= Устанавливает полностью новые разрешения (предыдущие перезаписываются новыми).

В одной команде можно перечислять владельцев и их разрешения через запятую (см. пример ниже).

Рассмотрим примеры:

  • В данном случае мы не используем обозначения для владельцев, а значит разрешения устанавливаются для всех пользователей. «+x» означает — установить разрешение на запуск (x) файла для всех пользователей. Это эквивалентно выполнению команды: chmod a+x myfile1.

  • Здесь используется обозначение g и символ равенства «=». Это означает, что для группы мы устанавливаем права доступа на чтение и запись файла (rw).

  • Для владельца файла (u) мы удаляем разрешение на изменение (w) файла.

  • Разрешаем владельцу (u) и группе (g) запускать файл (x).

  • Это как раз тот случай, когда мы перечисляем владельцев через запятую и устанавливаем для них разрешения. Для владельца файла (u) мы разрешаем запуск файла, для группы (g) мы запрещаем изменять файл, для всех остальных (o) мы запрещаем читать файл.

Рекурсивное изменение прав доступа

Если необходимо изменить права доступа на все файлы в директории, включая вложенные директории, то для этого существует опция -R, что означает рекурсивное изменение прав доступа для директорий и их содержимого. Например, изменим права доступа у всех файлов в директории Mydir:

И еще один момент. Если пользователь не является владельцем файла, но ему нужно изменить права доступа у данного файла, то команду chmod необходимо выполнять с использованием sudo, например:

Использование команды в числовом виде

Права записываются одной строкой сразу для трёх типов пользователей:

  • владельца файла (u);
  • других пользователей, входящих в группу владельца (g);
  • всех прочих пользователей (o);

В числовом виде файлу или каталогу устанавливаются абсолютные права , в то же время в символьном виде можно установить отдельные права для разных типов пользователей.

Пример: в числовом виде, установить права rwx-rx-rx:

chmod 755 filename

Пример — значение права «755»

Владелец Группа Остальные
восьмеричное значение 7 5 5
символьная запись rwx r-x r-x
обозначение типа пользователя u g o

Таким образом, права «755» записываются в символьном виде как «rwxr-xr-x». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.

Варианты записи прав пользователя

двоичная восьмеричная символьная права на файл права на директорию
000 нет нет
001 1 —x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r— чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «—», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и выполнение, и полный доступ.

Суммировав эти коды для трёх типов пользователей, можно получить числовую или символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение (идентично «r—r—r—»).

Помимо стандартных разрешений ‘rwx’, команда chmod осуществляет также управление битами SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.

Для SUID вес — 4000, а для SGID — 2000. Данные атрибуты имеют смысл при установленном соответствующем бите исполнения и обозначаются при символьной записи буквой «s»: и соответственно.

Пример: chmod 4555 {имяфайла} — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца.

Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла.
sticky bit или restricted deletion flag (t-бит) используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить (переименовать) любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить (переименовать) файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.

Примечание: Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).

Популярные значения

— Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия — Все пользователи имеют право чтения; владелец может редактировать — Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий — Все пользователи имеют право чтения; владелец и группа могут редактировать — Все пользователи могут читать и редактировать — Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия — Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение — Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать — Каждый пользователь может читать, редактировать и запускать на выполнение — Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла — Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла — Владелец и группа имеет право чтения никто другой не имеет права выполнять никакие действия — Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

COLOPHON top

       This page is part of the coreutils (basic file, shell and text
       manipulation utilities) project.  Information about the project
       can be found at ⟨http://www.gnu.org/software/coreutils/⟩.  If you
       have a bug report for this manual page, see
       ⟨http://www.gnu.org/software/coreutils/⟩.  This page was obtained
       from the tarball coreutils-8.32.tar.xz fetched from
       ⟨http://ftp.gnu.org/gnu/coreutils/⟩ on 2021-08-27.  If you
       discover any rendering problems in this HTML version of the page,
       or you believe there is a better or more up-to-date source for
       the page, or you have corrections or improvements to the
       information in this COLOPHON (which is not part of the original
       manual page), send a mail to [email protected]

GNU coreutils 8.32             March 2020                       CHMOD(1)

Pages that refer to this page:
bash(1), 
chacl(1), 
find(1), 
nfs4_setfacl(1), 
rsync(1), 
setfacl(1), 
chmod(2), 
fcntl(2), 
lp(4), 
rsyncd.conf(5), 
path_resolution(7), 
symlink(7), 
xattr(7), 
mkfs.xfs(8)

OPTIONS top

       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
       '*((*|))+|+'.

Они уже используются

Обеспечение безопасности многопользовательской операционной системы связано с несколькими трудностями. Возьмем, к примеру, (казалось бы) базовую концепцию паролей. Все они должны быть сохранены, чтобы каждый раз, когда кто-то входит в систему, система могла сравнивать вводимый им пароль с сохраненной копией. Очевидно, что поскольку пароли — это ключи к королевству, их необходимо беречь.

В Linux сохраненные пароли защищены двумя способами: они зашифрованы, и только кто-то с правами root может получить доступ к файлу, содержащему пароли. Это может показаться прекрасным, но представляет собой затруднение: если только люди с привилегиями root могут получить доступ к сохраненным паролям, как те, у кого нет такого доступа, изменят свои пароли?

Команда chmod

Права устанавливаются командой chmod. Команда chmod поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа).

Синтаксис команды прост:

chmod <опции> <права> <объект или регулярное выражение>

Опции

Из самых полезных и часто используемых опций можно выделить одну:

-R — рекурсивное назначение прав. Т.е. назначить права всем объектам, руководствуясь регулярным выражением.

Например:

  • chmod -R 755 * — Назначение прав всем объектам текущего каталога, включая подкаталоги.
  • chmod -R 700 z* — Назначить полные права для владельца и исключить права для группы и всех остальных для всех объектов, которые начинаются именоваться на z, находящиеся в текущем каталоге и его подкаталогах.

Права

Права можно записывать как в восьмеричном представлении так и в символьном. В восьмеричном представлении, для стандартных прав, указываются 3 восьмеричные цифры (1-я для владельца, 2-я для группы, 3-я для всех остальных. См. таблицу выше).

Например:

  • chmod 744 koshka.txt — установит права для файла koshka.txt — (r w x r — — r — -);
  • chmod -R 775 sobaki — установит права на каталог sobaki и на все объекты, что внутри этого каталога, включая содержимое подкаталогов (r w x r w x r — x);
  • chmod 700 * — установит права только для владельца на все файлы и каталоги в текущем каталоге, включая подкаталоги и их объекты (rwx — — — — — -).

Другой способ назначения прав — это использование маски режима доступа (символьное представление). Помимо прав задается еще кому мы собираемся эти права выставлять:

  • u — владельцу объекта;
  • g — группе объекта;
  • o — пользователю «все остальные»;
  • a — все вышеперечисленное.

Для назначения прав используются три знака: минус, плюс или равно:

  • — — убрать указанные права с объекта;
  • + — добавить указанные права к существующим правам объекта;
  • = — заменить права объекта на указанные.

Пример:

chmod g+w koshki.txt — Добавить пользователям группы файла koshki.txt права на запись в этот файл;

chmod a=rwx sobaki.doc — Заменит существующие права на файле sobaki.doc на полные права всем;

chmod o-w test.cgi — Уберет права на запись для пользователя «Все остальные».

chmod ug=rw spisok.doc — Выставить права на чтение и запись файлу spisok.doc для владельца и группы

Обратите внимание, что если у пользователя «все остальные» были какие-либо права, они сохранятся в неизменном виде.. Использование символьного представления позволяет редактировать права файлов более гибко:

Использование символьного представления позволяет редактировать права файлов более гибко:

  • chmod u+x,g+w-x koshki.txt — Добавить владельцу файла koshki.txt права на его выполнение, пользователям группы разрешить запись и запретить выполнение и оставить права остальных пользователей без изменений;
  • chmod u=rwx,g+w,go-x sobaki.doc — Установить полные права для владельца файла, разрешить пользователям группы запись и запретить выполнение всем пользователям, кроме владельца файла.

Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам.

Массовое назначение прав

Иногда, бывает, нужно массово установить права на определенный тип объектов, например, только на каталоги или только на файлы. Простое использование опции -R (рекурсия) здесь не поможет т.к. chmod будет проходить по всем объектам удовлетворяющим маске, что иногда вовсе не то, что нужно.

Итак, чтобы массово установить права на определенный тип объектов можно использовать один из вариантов (вообще, их очень много):

chmod -R 770 $(find . -type d)

где -type d — каталоги, -type f — файлы. В данном примере chmod установит, начиная от текущего каталога, права на все каталоги (включая подкаталоги) разрешения 770 (rwx rwx- — -) при этом не трогая права на другие объекты.

Более длинный вариант аналогичной операции:

find ./ -type f -exec sudo chmod 775 {} \;

где -type d — каталоги, -type f — файлы. В данном варианте chmod установит разрешения 775 на все файлы включая файлы в подкаталогах начиная от текущего.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: