Пользователи и группы
Linux - многопользовательская система. Человек может отличать пользователей реальных (учётные записи людей, которые работают за компьютером) и системных (от имени которых запускаются системные процессы), но для машины разницы между ними нет никакой. Каждый пользователь представлен его уникальным идентификатором (UID, user ID), которым компьютер и оперирует в работе.
Пользователи могут объединяться в группы пользователей. В одной группе может находиться сколько угодно пользователей, так же как и один пользователь может состоять в скольких угодно группах. Любой пользователь обязательно состоит хотя бы в одной группе. По аналогии с пользователями, группы в cиcтеме также представлены их идентификаторами (GID, group ID).
При переименовании пользователя или группы новое имя присваивается прежнему ID, никаких других изменений не происходит и это очень удобно.
Посмотреть идентификатор пользователя можно командой id. Например:
Если имя не вводить, то выйдет информация про текущего пользователя. И кстати да, у root-а всегда UID=GID=0.
Файлы и права
Каждый файл в Linux принадлежит какому-либо пользователю (пользователь-владелец, владелец) и одновременно группе пользователей (группа-владелец). Пользователь-владелец не обязательно должен состоять в группе-владельце. Для каждого файла в Linux определяются отдельно права доступа для владельца, группы-владельца и для всех остальных пользователей.
Разновидностей прав доступа всего три: чтение, запись и выполнение, но их совместное использование даёт нам 23=8 комбинаций (3 категории прав и 2 варианта для каждого права - установлено оно или нет, см. комбинаторику).
Рассмотрим права доступа к файлу, которые выводятся как:
Запись -rwxr-xr-x состоит из трёх блоков: это права доступа к файлу владельца, группы-владельца и всех остальных. Про первый символ минуса поговорим отдельно позже.
Буквы блока rwx определяют, соответственно, право доступа на чтение (r, read), запись (w, write) и выполнение (x, execute). Порядок букв менять нельзя. Если соответствующего права нет, то вместо буквы ставится минус (как, например, во втором и третьем блоках).
В данном примере у владельца файла полные права, а у группы и всех остальных - только чтение и выполнение, запись запрещена (удаление также относится к записи).
Буквы и цифры
Компьютер работает в двоичном коде. В двоичном коде он хранит данные на жёстком диске и в нём же производит вычисления.
Оперируя с числами в жизни мы имеем дело с десятичной системой счисления, так она называется потому, что все числа записываются десятью цифрами: от 0 до 9. В двоичной системе счисления цифр всего две: ноль и единица. К примеру, посчитаем от 0 до 7 в десятичной и двоичной системах, это поможет понять дальнейшее:
Десятичная система | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Двоичная система | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 |
Двоичная система (по 3 цифры) | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
Каждый блок rwx - это три бита информации по правам. Первый бит - чтение, второй - запись, третий - выполнение. Если право есть, бит равен 1, если нет - 0. То есть, для нашего примера, rwx = 111 = 7, r-x = 101 = 5, поэтому rwxr-xr-x = 111101101 = 755.
Большинство сайтов даёт такое правило пересчёта: x=1, w=2, r=4, нужные права просуммировать. Например, r-x = 4+1 = 5. Это даёт метод пересчёта, но не приносит понимания. Понимать надо так: права на чтение и запись это r-x = 101 (в двоичной записи) = 100+1 (в двоичной системе) = 4+1 (в десятичной системе) = 5.
Математики нервно курят, настолько лихо я использую знак равенства.
Это всё неправильно!
Потому что права доступа к файлу задаются не 9, а 12 битами. То есть:
А всё то, о чём говорилось раньше - это укороченная запись прав.
На что уходят первые три бита?
Первый бит - SUID. Устанавливается на исполняемый файл. В этом случае файл выполнится от имени не текущего пользователя (как обычно и бывает), а от имени владельца файла. Группа для запуска - группа текущего пользователя.
Второй бит - SGID. Устанавливается на исполняемый файл. То же самое, что и для SUID, но для запуска подменяется не владелец, а группа.
Третий бит - Т-бит. Говорят, обычно устанавливается на папки. Если Т-бит установлен, то операция удаления больше не входит в операцию записи (w) и удалить файл может только его владелец.
Установка этих битов (и их комбинаций) в цифровом виде считается так же, как и установка прав. То есть, при установке Т-бита на файл с правами 755, получим права 1755.
Запись прав в буквенном виде всё-таки предназначена для человека, поэтому в ней есть нюансы. Установка SUID заменит x в блоке владельца на s и наш пример будет выглядеть как rwsr-xr-x. Установка SGID проделает то же самое с блоком группы-владельца: rwxr-sr-x. Установка Т-бита поменяет x на t в блоке остальных пользователей: rwsr-xr-t.
Забытый минус
Первый символ в этой записи - это тип файла, а его, как ни крути, мы поменять не сможем. Но знать полезно.
Комментарии
Владимир
#cid8419
Ответить
В принципе можно было бы добавить (а можно -- и не добавлять):
что изменить владельцев может только root;
про смысл бита "x" для файлов (т.е. что исполняться могут и текстовые файлы, а бинарники -- не обязательно исполняемые);
про смысл бита "x" для директорий, т.к. могут возникать вопросы типа "как это -- исполнить директорию?" (и сразу -- забавный пример про доступ к содержимому директории);
примеры как выставить SUID и SGID биты;