Разрешения файлов в Linux: 13 самых важных вещей, которые нужно знать
Разрешения контролируют, что вы можете делать с файлом
Большую часть времени вам придется иметь дело с разрешениями, это будет происходить, когда вы пытаетесь сохранить или прочитать файл. У каждого файла (технически, у каждого inode) есть набор присвоенных ему разрешений. Они определяют, можете ли вы (или любой другой пользователь) читать файл или записывать в него.
Если у вас нет разрешения на чтение файла, вы увидите ошибку при попытке его открыть. Аналогично, файл без разрешения на запись вызовет ошибки, если вы попытаетесь сохранить в него данные:
Разрешения делятся на три группы по три
Разрешения состоят из двух частей: действия и набора пользователей. Три действия — чтение, запись и выполнение — определяют, что можно делать с файлом, а наборы пользователей определяют, кто может это делать.
Итак, когда речь идет о разрешениях, существует три группы по три, и возможна любая комбинация. Ваш файл может быть доступен для чтения всеми, для записи никем, кроме владельца, выполняться членами группы и так далее.
Их ярлыки могут быть загадочными
Часто вы увидите права доступа, отображаемые в виде строки из 9 символов, вот так:
rwxr-x--x
Это сокращение, которое показывает статус трёх разрешений для каждого набора пользователей, к которым они применяются. Оно включает, слева направо, статус чтения, записи и выполнения для пользователя, группы и остальных соответственно. Буква означает, что разрешение установлено. Дефис означает, что разрешение не установлено.
Важно помнить, что «o» обозначает «другое», а не «владелец». Это легко забыть; попробуйте запомнить, что «u» должно означать «пользователь», тогда значение «o» легче определить методом исключения.
Разложение вышеприведённой строки разрешений на отдельные наборы даёт:
user: rwx group: r-x other: --x
Это означает, что владелец файла имеет полный контроль, другие члены группы файла могут читать и выполнять его, в то время как все остальные пользователи могут только выполнять его.
Вы можете увидеть их с помощью команды ls
Самый простой способ просмотра прав доступа к файлам в командной строке — использовать команду ls, которая предназначена для вывода списка файлов. По умолчанию ls отображает только имена файлов, но опция -l выводит файлы в длинном формате, который включает сведения о правах доступа:
Вы должны суметь заметить последовательность символов разрешений прямо в начале; это девять букв между ведущим «d/-» и конечным «@» в начале каждой строки.
Вы также можете использовать команду stat для просмотра разрешений файлов
Хотя команда ls — это самый простой способ просмотра прав доступа, stat, вероятно, лучше всего подходит. Команда stat похожа на более низкоуровневую версию ls, которая показывает больше данных. Она также немного более гибкая, так что вы можете настроить вывод именно так, как вам удобно.
Вот команда, которая показывает вам имя и строку разрешений:
stat -c '%n %A' filename
На разных системах используются несовместимые версии команды stat. Приведённая выше команда работает в Ubuntu, но в macOS эквивалентом будет stat -f '%N %Sp' filename. Обязательно ознакомьтесь с руководством (man) вашей версии stat, чтобы узнать, какие опции она поддерживает.
Вы можете изменить разрешения с помощью команды chmod
chmod означает «change mode» («изменить режим») и является вашим ключом к обновлению разрешений файлов. Из-за большого количества различных настроек chmod может показаться немного сложным, но хорошая новость в том, что он поддерживает …
Вот простой пример:
chmod a+r myfile
Эта команда добавляет разрешение на чтение для всех пользователей к файлу myfile. В аргументе «a+r» буква «a» обозначает «все пользователи» и является сокращением для «ugo» (пользователь, группа, остальные). Вы можете использовать любую комбинацию этих трёх букв. Далее символ «+» означает «добавить». Другие варианты: «-» для удаления разрешения и «=» для установки разрешения точно. Наконец, буква «r» в этом примере означает «чтение»; это может быть любая комбинация «r», «w» для записи и «x» для выполнения.
Вы также можете установить несколько разрешений одновременно:
chmod u=rw,og=r new_file.txt
Эта команда позволяет владельцу читать и записывать файл, в то время как все остальные могут только его читать. Никто не может его выполнить.
Следует иметь в виду, что вы можете использовать chmod только для изменения файлов, которыми владеете (если только у вас нет прав root).
Вы можете использовать их, чтобы сделать программы исполняемыми
Мы упомянули разрешение на выполнение, не объяснив его подробно. Это разрешение действительно контролирует, можете ли вы запускать файл как команду. Обычно это разрешение используется с двумя типами файлов: бинарными и скриптами. Бинарные файлы — это скомпилированные программы, которые запускаются ядром, в то время как скрипты выполняются интерпретатором, таким как оболочка или язык сценариев.
Следует отметить, что снятие бита выполнения не предотвращает возможность запуска программы. Хотя пользователь не сможет запустить её, просто введя имя файла как команду, программа всё равно будет исполняться, если передать файл в качестве входных данных интерпретатору. По этой причине бит выполнения следует рассматривать скорее как страховку, чем как замок. Он предназначен для того, чтобы предотвратить случайный запуск программы, а не сделать его невозможным.
Разрешения — это страховка, а не гарантия
На самом деле, бит выполнения — это не единственное разрешение, которое не является настолько надежным, как можно было бы ожидать. На самом деле, стоит рассматривать разрешения скорее как ограждения, чем как строгие средства безопасности.
Возьмем простой пример с файлом только для чтения: можно ли его все же удалить?
touch foo chmod a-w foo rm foo
Команда rm всё ещё позволяет вам удалить файл, даже если вы не можете его изменить! Это кажется нелогичным, но на самом деле это всего лишь побочный эффект работы системы прав доступа. Если вы владелец файла, вы всегда можете использовать chmod, чтобы получить любой необходимый доступ. Поэтому логично, что такие инструменты, как rm, дают возможность обходить права доступа к файлу в этом особом случае.
У них другое значение для каталогов
Поскольку Linux рассматривает каталоги как другой тип файла, они также могут иметь права доступа. Однако из-за своей природы права доступа к каталогам имеют немного иное значение.
Разрешение на чтение позволяет просматривать содержимое каталога, то есть список файлов, которые он содержит. Это значит, например, что вы не сможете выполнить команду ls для каталога, который нельзя прочитать:
Разрешение на запись позволяет вам изменять содержимое каталога. Например, оно определяет, можете ли вы создать новый файл внутри каталога или переименовать существующий:
Разрешение на выполнение совершенно другое; действительно нет аналогии, которая имела бы смысл для запуска каталога! Поэтому Linux использует это разрешение для каталогов в смысле чего-то вроде «доступ к каталогу».
Большинство графических файловых браузеров также позволяют управлять ими
Приложение «Файлы» в Ubuntu, как и многие графические файловые менеджеры, позволяет просматривать разрешения для конкретного файла через контекстное меню «Свойства»:
Finder в MacOS отображает разрешения в диалоговом окне «Сведения» для любого файла:
Разрешения отображаются для пользователя, группы и остальных в строках сверху вниз. Обратите внимание, что Finder не позволяет изменять разрешение на выполнение.
Разрешения могут быть особыми
Помимо прав на чтение, запись и выполнение, которые мы видели до сих пор, существуют несколько специальных разрешений, расширяющих базовый механизм. Они известны как SUID, SGID и sticky bit.
Вы можете установить эти специальные разрешения с помощью chmod, хотя в большинстве случаев это не потребуется, если вы не выполняете роль системного администратора:
chmod u+s filename chmod +t filename
Вы с наибольшей вероятностью столкнётесь с этими особыми разрешениями в списке файлов, где буква «s» может заменять «x» для пользователя или группы, или «t» может появляться вместо последнего «x».
Вы можете представлять права доступа с помощью восьмеричной записи
До сих пор мы несколько раз упоминали строку прав, начиная с вывода команды ls и заканчивая использованием chmod. Но сокращения «rwx» и «ugo» являются удобными обозначениями чего-то ещё более непонятного: восьмеричного представления.
Каждое число представляет собой комбинацию разрешений на чтение, запись и выполнение. Выполнение само по себе имеет значение 1, запись — 2, а чтение — 4. Комбинации суммируют эти значения, поэтому 3 — это 1 (выполнение) и 2 (запись), а 7 — это все три.
Хотя этот формат гораздо более сложный, он также экономит много времени на набор текста. После некоторой практики вы, вероятно, разберётесь, что означают восемь разных значений, и некоторые комбинации встречаются особенно часто, например, 775 или 666.
Команда umask управляет правами доступа по умолчанию
Ранее вы узнали о том, как менять права доступа к файлу с помощью chmod. Но как исходно устанавливаются права доступа к файлу?
Во-первых, в вашей системе будут разумные значения по умолчанию, которые могут выглядеть примерно так:
- rw-rw-rw- для файлов; все могут читать и записывать файлы.
- rwxrwxrwx для каталогов; каждый может читать, записывать и получать доступ к каталогам.
Далее ваша система проверит значение umask и дополнительно удалит любые разрешения, которые оно указывает. Umask всегда удаляет разрешения; оно не добавляет никаких дополнительных.










Добавить комментарий