==== Права доступа к файлам и каталогам ==== Посмотреть права можно командой ''ls -la''. У любого файла и каталога в Linux есть 4 группы прав: - первая группа состоит из одного символа. Как правило вам будет встречаться "-" что означает обычный файл, "d" - директория или же "l" - символьная ссылка. - блок rwx, относящийся к владельцу файла. Буквенное обозначение - u (user) - блок rwx, относящийся к группе. Буквенное обозначение - g (group) - блок rwx, относящийся ко всем остальным. Буквенное обозначение - o (other) [{{:for_students:os:113.jpg?}}] * r - read, права на открытие и чтение файла или просмотр содержимого в каталоге * w - write, права на запись в файл или возможность создавать, удалять или переименовывать объекты в каталоге * x - execute, возможность выполнить файл или войти в каталог Права можно записывать как в буквенной нотации, так и в цифровой. \\ Каталог - это особый тип файла. Его содержание - это список других файлов. Каталоги имеют те же «биты прав», что и остальные файлы. Однако то, что эти права означают может быть не таким простым для понимания. Если каталог можно изменять (w), то это означает, что в нем можно изменять файлы, их имена, удалять их. Это можно делать даже с файлами, доступ к которым запрещен для данной категории. Вводят дополнительный t-бит. При его наличии пользователь может изменять только свои файлы. [{{:for_students:os:114.jpg?}}] === Изменение прав доступа === * ''chgrp'' - изменение принадлежности файла или каталога к определенной группе * ''chown'' - изменяет владельца файла или каталога * ''chmod'' - изменяет режим доступа к файлу или каталогу. === Специальные права === * SUID (Set UID) - файл, у которого есть такой бит, выполняется с правами владельца файла программы. Этот бит стоит использовать с исполняемыми файлами. * SGID (Set GID) - аналогично SUID, но выполняется с правами группы, которой принадлежит файл. Кроме исполняемых файлов этот бит может устанавливаться на директории. * Stiky — бит имеет смысл только если он установлен на директорию. Означает, что в этой директории файл может удалить только его хозяин. (Суперпользователь может удалять любые файлы, в том числе и не принадлежащие ему.) Рассмотрим эти права более детально.\\ **SUID** Изменение пароля происходит с помощью записи в файл /etc/shadow, при это любой пользователь может менять свой пароль. Поэтому, логично было бы предположить, что на этот файл у всех права на запись. Однако же, если выполнить команду ''ls -la /etc/shadow'', мы увидим ''-rw-r----- 1 root shadow 1640 фев 1 09:12 /etc/shadow'', то есть писать в этот файл может только root. Каким же образом любой пользователь может изменить свой пароль? Вспоминаем, что для изменения пароля требуется утилита passwd, которая находится в /usr/bin/passwd. Посмотрим на права доступа к этому файлу - ''-rw**s**r-xr-x 1 root root 68208 июл 15 2021 /usr/bin/passwd''. Здесь стоит обратить внимание на бит s, который говорит о том, что используется как раз SUID. То есть файл будет выполняться всегда с правами владельца (который в данном случае root). \\ Если вы хотите установить такой бит на файл, то можно воспользоваться числовым форматом - ''chmod 4751 test'', где 4 - это как раз нужный нам бит, или же в символьном формате - ''chmod u+s test''. \\ **GUID** редко используется с исполняемыми файлами. Его чаще используют для работы группы пользователей с одним проектом. То есть, у вас есть проект, состоящий из нескольких файлов и эти файлы создавали разные пользователи. При создании файла, он принадлежит пользователю и его основной группе, при этом изменять владельца и группу - нельзя. Но нам надо, чтобы группа людей работала не только со своими файлами, но и с чужими, то есть нужен полный доступ для группы. Рассмотрим ситуацию, когда есть некий проект и файлы этого проекта лежат в директории /project, для работы над проектом создана группа pr_user, то есть эта группа имеет полный доступ к этой директории. В группу входят пользователи Vasya и Petya. [{{:for_students:os:115.jpg?}}]Эти пользователи могут создавать файлы в директории ''drwxrwxr-x 2 root pr_user 4096 фев 2 11:20 project/''. Каждый из сотрудников создал по своему файлу для работы [{{:for_students:os:116.jpg?}}] Как мы видим, файл принадлежит пользователю, который его создал и его основной группе. Поэтому файл Васи не может редактировать Петя и наоборот. Они могут только удалять файлы друг друга. Для решения этой проблемы необходимо сделать так, чтобы все файлы принадлежали той же группе, что и пользователи ''chmod g+s /project/'' и тогда увидим ''drwxrwsr-x 2 root pr_user 4096 фев 2 11:33 project/''. Теперь попробуем от имени Васи создать еще один файл и посмотрим на его права [{{:for_students:os:117.jpg?}}] Судя по этим правам, пользователь Петя теперь может редактировать новый файл Васи. Профит! При создании новой директории в директории с уже установленным SGID-битом, у созданной директории SGID-бит устанавливается автоматически! **Stiky** бит применяется только к директориям. Если такой бит установлен на директорию, значит, в этой директории файл может удалить только хозяин файла или суперпользователь. Stiky-бит рекомендуется устанавливать на публичные директории, такие как: /tmp и /var/tmp