Поиск по сайту:

Что такое права доступа к файлам в Linux и как убедиться, что мои файлы безопасны?


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

Что такое права доступа к файлам?

Права доступа к файлам отслеживают разрешения для трех разных групп. Каждая группа представлена тремя битами:

  • r: разрешение Чтение позволяет процессу считывать содержимое этого файла в память.
  • w: Разрешение «Запись» дает процессу доступ для перезаписи физического места на диске, где хранится этот файл.
  • x: разрешение «Выполнение» предназначено для программ и позволяет выполнять этот файл.

В терминале права отображаются так:

Первый «d» означает, является ли файл каталогом. Первая группа из трех предназначена для владельца файла. В этом случае владелец файла имеет полный доступ для чтения, записи и выполнения. Следующая группа из трех — «владельцы группы», которая обозначает права доступа для группы, к которой принадлежит файл, в данном случае только для чтения. Следующая группа — все остальные, только для чтения.

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

Под капотом они хранятся в двоичном виде, где каждое разрешение представляет собой бит. Например, rw- – это 110 в двоичном формате, что равно 6 в десятичном формате. Итак, строка разрешения:

rwxrw-r--

…можно сохранить как «764». Права доступа к файлам часто упоминаются таким образом; «777» означает полный доступ, «700» — приватный, «644» — только чтение. Технически это называется восьмеричным, а не десятичным, поскольку для каждой цифры существует восемь возможных значений.

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

  • r: разрешение на список. Позволяет открыть каталог и использовать ls. Требуется установить атрибут x.
  • w: разрешение на запись. Позволяет создавать новые файлы, удалять файлы и переименовывать файлы. Не препятствует изменению содержимого существующих файлов с возможностью записи в каталоге.
  • x: вводимость. Разрешает использование cd. Это соблюдается во всей системе и предотвращает открытие папки в проводнике файлов с графическим интерфейсом.

В некоторых системах, особенно в macOS, после строки прав доступа к файлу может стоять символ «@». Это означает, что файл имеет расширенные атрибуты, которые можно проверить с помощью ls -l@. Например, атрибут com.apple.quarantine назначается исполняемым файлам, которые еще не были открыты, поэтому привратник может заблокировать двойной щелчок по нему, заставить вас щелкнуть правой кнопкой мыши > открыть, а затем без необходимости спрашивать вас, действительно ли вы хотите его открыть.

Что такое владельцы файлов и группы?

Владелец файла — это просто конкретный пользователь, но пользователи в системах Unix работают не так, как в Windows. В Unix могут быть разные пользователи для отдельных процессов, таких как mysql и nginx. Это может сделать разрешения очень подробными; например, экземпляр MySQL, работающий под пользователем mysql , может получить доступ к своей собственной базе данных, а пользователь nginx – не может.

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

Как проверить права доступа к файлам каталогов

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

Если вы хотите отобразить права доступа к определенному файлу или каталогу, вам нужно передать выходные данные ls в grep:

ls -la | grep filename

Обратите внимание, что разрешения для текущей папки и родительской папки отображаются как . и .. при использовании флага -a . Однако даже это отображает только два уровня разрешений. Чтобы отобразить разрешения для каждой родительской папки, вам нужно использовать команду namei :

namei -l `pwd`

Эта команда не может быть установлена в каждом дистрибутиве Linux. В macOS вам придется установить его из brew.

Чтобы найти отдельные файлы в этих папках, которые могут иметь ошибочные разрешения, вы можете использовать команду find с флагом -perm :

find ~ -type f -perm 777

Это рекурсивный поиск и может занять некоторое время, если вы запускаете его в корневом каталоге.

Как изменить права доступа к файлам и владельца

Изменить права доступа к файлу очень просто с помощью команды chmod :

chmod 700 filename

Вы также можете добавить разрешения, не указывая полную строку разрешений. Это короткий путь, но он может сэкономить время. Например, если вы не можете открыть файл скрипта, вы можете добавить владельцу разрешение на выполнение с помощью:

chmod u+x filename

Это добавляет разрешение на выполнение (x) для текущего владельца (u, для «пользователя»).

Смена владельцев работает аналогично команде chown :

chown owner:group filename

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

chmod 700 -R directory

Вы также можете использовать chmod как параметр -exec для find, который позволяет изменять права доступа к файлам во всей системе. Например, эта команда найдет файлы с открытыми правами на запись и сделает их доступными только для чтения:

find / -type f -perm 777 -print -exec chmod 744 {} ;