Права на исполнение linux

Настало время поговорить о швабре на которую наступают новички. Речь сегодня пойдет о правах доступа. И так вы садитесь за компьютер, работа не идет и в порыве вы уничтожаете случайно важные системные файлы. Или ваши знакомые или сослуживцы залезли в папку которую не должны были видеть. Или... Ситуация я думаю знакомая. Но зато согласитесь удобно. Я сам себе режиссер, что хочу то делаю, любая программа, пользователь имеет доступ ко всем системным файлам и ресурсам, никаких ограничений. Красота. Отсюда эпидемии вирусов. Так вот в Linux всего такого нет. Почему?

Файлы в Linux имеют двух владельцев: пользователя (user owner) и группу (group owner) под которой понимается определенный список пользователей и причем владелец файла не обязательно должен быть членом группы владеющей файлом. Каждый пользователь может быть членом сразу нескольких групп одна из которых называется первичной (primary), а все остальные - дополнительными (supplementary). Это дает большую гибкость в организации доступа к определенному файлу. Совместное использование некоторым ресурсом организовать очень просто, достаточно создать новую группу и включить в нее всех кому это действительно необходимо, а если человек предположим перешел в другой отдел и уже нет необходимости в использовании данного файла. А все очень просто, необходимо просто выключить его из состава данной группы. Ну а, что делать с остальными неужели они так и не смогут хотя бы прочитать содержимое файла или их прийдется каждый раз включать и исключать из группы. А вот для всех остальных (other) которые не принадлежат ни к user owner и group owner права доступа устанавливаются отдельно и как правило самые минимальные. Обычно владельцем файла является пользователь который создал данный файл. Владелец-группа вновь создаваемого файла устанавливается равной первичной группе пользователя создавшего файл, но в некоторых версиях Unix владелец-группа наследуется от владельца-группы каталога в котором создается файл. Для изменения владельца файла используется команда chown в качестве параметров принимающая имя нового владельца и список файлов: # chown new_owner file1 file2 ...Конечно же на месте названия файла может быть и имя каталога, но при этом владелец файлов внутри каталога не изменится, для того чтобы это произошло лучше всего воспользоваться флагом -R (chown -R). При использовании данной команды (впрочем как и большинства) можно пользоваться регулярными выражениями если есть необходимость отобрать файлы удовлетворяющие определенному критерию (chown - R lys *.с). Для изменения владельца группы используется команда chgrp, синтаксис использования данной команды аналогичен предыдущей: # chgrp sales /home/sales/*. Кстати команда chown позволяет сразу установить и группу-владельца для этого необходимо сразу за именем владельца без пробелов и др. знаков поставить двоеточие и написать название необходимой группы

# chown - R sergej:gljuk *

допускается и такой вариант записи:

# chown - R:gljuk * (т.е. аналог команды chgrp).

Владение файлом определяет те операции которые тот или иной пользователь может совершить над файлом. Самые очевидные из них это изменение владельца и группы для некоторого файла. Эти операции может проделать суперпользователь и владелец файла (в производных BSD UNIX только суперпользователь). Если с первым все понятно, то например написав программу и сделать затем ее владельцем, например суперпользователя увы не получится, и хотя вариант изменения владельцем допускается варианта такого применения я честно говоря не нашел. А вот группу, если вы являетесь владельцем файла, можно изменить только на свою первичную (по умолчанию имеет то же название, как и имя соответствующего пользователя). Эти все ограничения введены по нескольким причинам, чтобы никто не мог подсунуть какой ни будь зловредный файл и для того чтобы если на компьютере установлен лимит дискового пространства для конкретного пользователя, нельзя было просто переопределив владельца превысить его.

Следующие базовые операции которые можно совершить над файлом: это доступ на чтение (Read), доступ на запись (Write) и доступ на выполнение (eXecute). Эти операции устанавливаются для каждой из трех групп пользователей раздельно. Причем проделать это может только пользователь владелец и конечно же суперпользователь. Для установки соответствующих прав используется команда chmod. Применяется она в двух формах абсолютной - когда игнорируются старые права, а безусловно устанавливаются новые, и относительной - когда к имеющимся правам добавляются/убираются другие. Абсолютная форма предполагает задание прав доступа к файлу прямым заданием его в восьмеричной форме. Для того чтобы получить полный код необходимого режима файла, необходимо просто сложить значения кодов приведенных в таблице.

Таким образом команда # chmod 755 file устанавливает следующие права доступа, это исполняемый файл, запустить его на выполнение и прочитать содержимое имеют право все (т.е. владелец, группа и остальные), а владелец дополнительно имеет право на изменение содержимого - запись. Это кстати пример задания прав классического cgi сценария.

Относительная форма команды требует конкретного указания классов доступа ("u"- владелец, ‘g"- группа, ‘o"- остальные, ‘a" -все вместе), соответствующие права доступа ("r" - чтение, ‘w" - запись, ‘x" - выполнение) и операцию которую необходимо произвести для списка файлов ("+" добавить, ‘-" удалить, ‘=" присвоить) для соответствующего списка файлов. Например команда # chmod u+w, ug+r, a+x file добавляет дополнительно к имеющимся всем право запустить файл на выполнение, группа и владелец смогут прочесть содержимое, а владелец кроме того и изменить содержание. Да и команда ‘=" относится скорее к абсолютному заданию прав доступа так как устанавливает соответствующие права вместо имеющихся.

Просмотреть соответствующие права доступа, а также владельца и группу можно с помощью команды ls -l:

$ ls -l

drwxrwxr-x 2 sergej sergej 1024 Авг 17 09:45 bin
-rw-rw-r- 1 sergej sergej 604 Авг 22 21:07 printenv.pl

Буква ‘d" означает, что это каталог, прочерк ‘-" - обыкновенный файл, ‘l" - символическая связь, ‘b"- блочное устройство, ‘c" - символьное устройство. Исполняемый файл может быть как откомпилированной программой (для его запуска необходимо только право на выполнение) и скриптом. Чтобы запустить на выполнение последний необходимо дополнительно право на чтение, так как программа-интерпретатор должна перед этим его прочитать. Значение прав доступа для различных типов файлов также различно. Вы ведь не забыли, что все остальное: каталоги, устройства, сокеты и именованные каналы тоже являются файлами. Например для последних трех право на выполнение смысла не имеет. Для символических связей они контролируются целевым файлом. Для каталогов они имеют немного другой смысл. Каталог по своей сути файл содержащий имена всех файлов которые содержатся в данном каталоге, а также указатели на дополнительную информацию, позволяющие операционной системе производить необходимые операции. Так вот право на чтение каталога позволяет всего лишь получить только имена файлов, находящихся в данном каталоге. А вот для того, чтобы получить дополнительную информацию, необходимы право на исполнение так, как уже прийдется заглянуть в "метаданные" каждого файла. Также чтобы перейти в какой ни будь каталог (cd) (и все каталоги на пути) необходимо иметь право на выполнение. Поэтому например часто создав каталог для домашней страницы Web-сервера Apache (public_html) и при попытке открыть его http://localhost/~user_name, получаете сообщение о том, что узел не достижим одной из причин является, то что сервер просто не может прочитать содержимое соответствующего каталога и всех каталогов на пути к нему. Кстати из-за наличия этих особенностей можно добиться так называемого эффекта "dark directory". Когда есть возможность создать каталог файлы в котором доступны только если пользователь знает точно имя соответствующего файла. Давайте посмотрим, как создать такой каталог.

$ mkdir darkcat # создаем каталог

$ chmod a-r+x darkcat # устанавливает необходимые права доступа, добавляем исполнение для всех и убираем возможность чтения списка файлов

$ ls -l # маленькая проверка

d-wx-wx-x 2 sergej sergej 1024 Сен 7 15:14 darkcat

$ cp myfile darkcat # копируем файл в каталог

$ cd darkcat # переходим в каталог

$ ls -l # пробуем прочитать список файлов

ls: .: Permission denied # вот те раз

$ cat myfile # выводим содержимое файла на терминал

Получилось.

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

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

Справедливости стоит отметить, что права доступа имеет не пользователь, а процесс запущенный ним. Не вдаваясь в подробности (я думаю о процессах разговор отдельный), каждый пользователь зарегистрировавшись в системе получает свою копию текущего процесса shell который имеет установленные идентификаторы RID и RGID реальные индетификаторы пользователя и первичной группы пользователя. А все процессы запущенные пользователем (дочерними), которые наследуют все переменные в том числе и RID, RGID. К чему это я собственно. У нас остались не рассмотренными три режима файла: бит сохранения задачи (stisky bit или save text mode), а также флаги SUID и SGID. Со stisky bit все просто, этот бит указывает на необходимость сохранения копии выполняющейся программы в памяти после завершения выполнения. Этот режим позволяет сэкономить время на запуске программы при частом использовании, но в современных системах применение этого режима встречается редко. А вот флаги SUID и SGID позволяют изменить (расширить) права пользователя (группы) запустившего программу на выполнение, на время выполнения программы. Как уже говорилось запущенное приложение имеют права доступа к системным ресурсам такие же, что и пользователь, запустивший программу. А установки этих флагов позволяет назначить права доступа исходя из прав доступа владельца файла. Отсюда если владельцем запущенного приложения является root, то любой независимо кто запустил данное приложение будет иметь права суперпользователя. При этом при установке флага SUID наследуется права владельца файла, а SGID - группы-владельца.

В качестве примера где может применяться это свойство рассмотрим утилиту passwd, которая позволяет изменить пользователю свой пароль. Все учетные записи и пароли (в зашифрованном виде) хранятся в файлах /etc/passwd и /etc/shadow, если предоставить право каждому пользователю на самолично вносить изменения в эти файлы напрямую, то можете представить, что это будет. И естественно вам и не кто и не даст такое право.

$ ls -l /etc/passwd /etc/shadow

Как видите все пользователи имеют право только на чтение файла /etc/passwd, а записывать информацию может только root (а /etc/shadow как вы видите закрыли от всех, чтобы пароли не могли подобрать). Теперь смотрим на утилиту passwd:

$ ls -l /usr/bin/passwd

R-s-x-x 1 root root 15104 Мар 14 03:44 /usr/bin/passwd

Буква "s" означает, что установлен флаг SUID, а владельцем файла является его величество root и теперь кто бы ни запустил утилиту на выполнение, на время работы программы он временно получает права суперпользователя, т.е. произвести запись в защищенный системный файл. Естественно утилита должна (и делает это) производить изменение учетной записи только запустившего ее пользователя. Как вы понимаете требования по безопасности к программам использующим данный метод должны быть повышены. Это наверное самая большая дыра во всех Unix, потому что найдя ошибку в одной из программ использующих биты SUID/SGID можно производить любые действия не обладая при этом правами суперпользователя. А аксиома программирования говорит, что ошибки будут всегда. Поэтому сейчас где можно пытаются уйти или сильно изменить этот механизм. Да почитайте хотя бы аннотацию к большинству дистрибутивов Linux, там производитель с гордостью сообщает, что такие то программы уже не используют механизм SUID/SGID. Для установки битов SUID/SGID в символьной форме используется буква - "s", sticky bit устанавливается буквой -"t", а с помощью буквы ‘l" можно установить блокировку файла, для устранения возможных конфликтов когда несколько процессов попытаются работать с одним и тем же файлом. И еще один интересный момент.

$ ls -l /

drwxrwxrwt 25 root root 4096 Сен 8 20:08 tmp

Посмотрите, в каталоге /tmp установлен sticky bit. Зачем? Как говорилось предоставление права на запись в каталог позволяет удалять все файлы даже те владельцами которых он не является. Чтобы избежать этого устанавливается sticky bit для каталога и теперь удалить файл может только пользователь создавший его. А при установке бита SGID для каталога, все вновь созданные файлы будут теперь наследовать группу не по пользователю создавшему его, а по группе-владельцу каталога.

А теперь для чего все это собственно я вам рассказываю т.е. о наших швабрах. Представьте такую ситуацию смотрировали CDROM под root и скопировали с него файлы в домашний каталог обычного пользователь, поработали и выключили компьютер. Угадайте на следующий день вы сможете открыть там хоть один файл. Да работать мне целую неделю в Windows если да, а все потому, что владельцем файла окажется все тот же суперпользователь. Это относится и к различным конфигурационным файлам скопированным в домашний каталог (или созданным под root), процесс запущенный обычным пользователем просто не сможет его прочитать и пользоваться вы будете общесистемным, недоумевая почему не вступают в силу настройки произведенные вами. А вот еще ситуация настроили принтер утилитой princonf, под обычным пользователем не печатает. Почему? А потому, что вам не дано право на выполнение. Самый радикальный метод который я встречал в некоторых книгах выглядит так.

# chmod a+rwx /dev/*

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

$ ls -l /dev/lp0

Видите право на выполнение дано root и членам группы lp, отсюда если нужен принтер добавьте себя в эту группу. Либо прямым редактированием файла /etc/group (sergej:x:500:sergej,gdm,mysql,named,nobody,sound,lp), либо с помощью различных графических утилит вроде System Setting.
Зачем все это?

Например не играет звук. Смотрим.

$ ls -l /dev/dsp

Получается что только пользователь sergej будет слушать музыку. Парадокс однако. Пришлось создавать группу sound и добавить в нее себя, сделать владельцем обиженного root"a, а для группы sound определить чтение. Справедливости хотелось отметить, что права доступа это заслуга не только операционной, но и файловой системы ext2. В inode файла внесена вся необходимая информация о соответствующих правах доступа.

Или например на форумах часто спрашивают как сделать чтобы ppp соединение было доступно обычному пользователю. А все просто. Не нужно ничего выдумывать. Ищем пользователя и группу которая имет доступ к этому сервису и добавляем себя любимого. В Ubuntu это группа dip.

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

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

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

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

Пользователь может быть членом нескольких групп, равно как и несколько пользователей может быть членами одной и той же группы. Исторически сложилось так, что одна из групп - группа по умолчанию - является для пользователя основной: когда (не вполне точно) говорят о «GID пользователя» , имеют в виду именно идентификатор группы по умолчанию. Пользователь не может не быть членом как минимум одной группы, как снаряд не может не попасть в эпицентр взрыва! Часто процедуру создания пользователя проектируют так, что имя группы по умолчанию совпадает с входным именем пользователя, а GID пользователя - с его UID. Однако это совсем не обязательно: не всегда нужно заводить для пользователя отдельную группу, а если заводить, то не всегда удаётся сделать так,чтобы желаемый идентификатор группы совпадал с желаемым идентификатором пользователя.

При создании объектов файловой системы - файлов, каталогов и т. п. - каждому в обязательном порядке приписывается UID - идентификатор пользователя-владельца файла, GID - идентификатор группы, которой принадлежит файл, тип объекта и набор т. н. атрибутов, а также некоторую дополнительную информацию. Атрибуты определяют, кто и что с файлом имеет право делать, и описаны ниже.

В Linux существует выделенный пользователь системы, на которого не распространяются ограничения прав доступа - суперпользователь (root) . UID суперпользовательских процессов равен 0: так система отличает их от процессов других пользователей. Именно суперпользователь имеет возможность произвольно изменять владельца и группу файла. Ему открыт доступ на чтение и запись к любому файлу системы и доступ на чтение, запись и использование к любому каталогу. Наконец, суперпользовательский процесс может на время сменить свой собственный UID с нулевого на любой другой. Среди учётных записей Linux всегда есть запись по имени root («корень»), соответствующая нулевому идентификатору, поэтому вместо «суперпользователь» часто говорят «root». Множество системных файлов принадлежат root-у, множество файлов только ему доступны на чтение или запись. Пароль этой учётной записи - одна из самых больших драгоценностей системы. Свойство root иметь доступ ко всем ресурсам системы накладывает очень высокие требования на человека, знающего пароль root. Суперпользователь может всё - в том числе и всё поломать, поэтому любую работу стоит вести с правами обычного пользователя, а к правам root прибегать только по необходимости. Существует два различных способа получить права суперпользователя .

Первый - это зарегистрироваться в системе под этим именем, ввести пароль и получить стартовую оболочку, имеющую нулевой UID. Это - самый неправильный способ, пользоваться которым стоит, только если нельзя применить другие. Что в этом случае выдаст команда last ? Что тогда-то с такой-то консоли в систему вошёл неизвестно кто с правами суперпользователя и что-то там такое делал. С точки зрения системного администратора, это - очень подозрительное событие, особенно, если сам он в это время к указанной консоли не подходил... сами администраторы такой способ не любят.

Второй способ - это воспользоваться специальной утилитой su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. Отличие от предыдущего способа - в том, что всегда известно, кто именно запускал su, а значит, с кого спрашивать за последствия.

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

Утилита id (см. man id) выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является.

Вся информация о пользователях и группах, зарегестрированных в систееме, хранится в файлах /etc/passwd, /etc/shadow и /etc/groups

Таким образом, конкретный пользователь по отношению к его собственным файлам выступает как их владелец (u - user).

У каждого файла есть еще и группа (g - group), к которой принадлежит владелец файла.

Кроме владельца и группы в системе могут существовать и другие пользователи. Поэтому в атрибутах файла содержаться значения, запрещающие или разрешающие доступ всем другим (o - other), кто не вошел в группу и не является владельцем.

Возможные действия над файлом

Что можно делать с файлом после его создания? В первую очередь просматривать, или читать (r - read). Во вторую очередь, файл можно изменить (дописать, исправить, переименовать, переместить). Таким образом, мы можем говорить о возможности записи (w - write) в файл. Если файл является программой, то его содержимое представляет собой команды для процессора, выполнение которых приводит к тому или иному желаемому (мы надеемся) эффекту. Другими словами, некоторые файлы можно исполнять (x - execution).

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

Представление прав доступа

Основные атрибуты прав доступа можно представить в виде двеннадцати битов двоичного числа, равных 1, если атрибут установлен, и 0, если нет. Порядок битов в числе следующий:

sU|sG|t|rU|wU|xU|rG|wG||xG|rO|wO|xO .

где sU - это SetUID, sG - это SetGID, t - это t-атрибут (sticky–бит), после чего следуют три тройки атрибутов доступа:

rU|wU|xU - права чтения (Read), записи (Write) и выполнения (eXecute) для владельца файла (User);

rG|wG|xG - права чтения (Read), записи (Write) и выполнения (eXecute) для группы файла (Group);

rO|wO|xO - права чтения (Read), записи (Write) и выполнения (eXecute) для всех остальных (Other).

Процессы с установленным битом sU выполняются с правами владельца. А с установленным битом sG – с правами группы.

В каталоге с установленным sticky–битом удалять файлы может только владелец или root. При том устанавливать этот бит может только root, а сбрасывать может владелец и root.

Например, команда ls -l выводит права доступа в таком формате:

«-rw-rw-rw-» (Первая черточка - обычный файл, и 9 прав доступа - все могут читать и изменять)

«drwx------» (Каталог, полный доступ (чтение, изменение, выполнение) имеет только владелец файла)

«-rw-r-----» (Обычный файл, владелец может читать и изменять, группа - читать, остальные - не имеют прав)

«drwxr-xr--» (Каталог, владелец имеет полный доступ, группа - чтение и выполнение, остальные - только чтение)

«drwxrwxrwt» (Каталог, все имеют полный доступ, однако, установлен sticky–бит, поэтому права записи в каталог для членов группы и для посторонних ограничены их собственными файлами, и только владелец имеет право изменять список файлов в каталоге, как ему вздумается. Такие каталоги называются разделяемыми, потому что предназначены они, как правило, для совместной работы всех пользователей в системе, обмена информацией и т. п. При установке атрибута «t» доступ на выполнение для посторонних («t» в строчке атрибутов стоит на месте последнего «x») не отменяется. Просто они так редко используются друг без друга, что ls выводит их в одном и том же месте. Если кому-нибудь придёт в голову организовать разделяемый каталог без доступа посторонним на использование, ls выведет на месте девятого атрибута не «t» , а «T» .)

«-rws--x--x» (Обычный файл, установлен атрибут SetUID. Как и в случае с t -атрибутом, ls выводит букву «s» вместо буквы «x» в тройке «для владельца». Точно так же, если соответствующего x -атрибута нет (что бывает редко), ls выведет «S» вместо «s» .)

«-rwx--s--x» (Обычный файл, установлен атрибут SetGID. Утилита ls выводит SetGID в виде «s» вместо «x» во второй тройке атрибутов («для группы»). Замечания касательно «s» , «S» и «x» действительны для SetGID так же, как и для SetUID.)

права доступа представляются также в двоичном и восьмиричном виде.

Например:

Примеры записи прав доступа в двоичной форме 110 110 110
111 100 000
001 111 100 000
010 111 100 000
100 111 100 000
Примеры записи прав доступа в восьмиричной форме 666 все могуть читать и изменять
740 владелец имеет все права, группа - чтение, остальные не имееют никкаких прав
1740 установлен t-атрибут, владелец имеет все права, группа - чтение, остальные не имееют никкаких прав
2740 установлен атрибут SetGID, владелец имеет все права, группа - чтение, остальные не имееют никкаких пра
4740 установлен атрибут SetUID, владелец имеет все права, группа - чтение, остальные не имееют никкаких прав

Особенности доступа к каталогам

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

Если каталог можно исполнять (x), то это означает, что в него можно заходить и просматривать содержимое файлов (доступ к которым разрешен для данной категории), узнавать свойства (атрибуты) файлов. Можно изменить содержимое файла (если его разрешено менять), но не имя файла.

Если каталог можно изменять (w), то это означает, что в нем можно изменять файлы, их имена, удалять их. Опасность! Это можно делать даже с файлами, доступ к которым запрещен для данной категории. Лечение! Вводят дополнительный t-бит. При его наличии пользователь может изменять только свои файлы.

Следует понимать, что:

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

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

Изменение прав доступа к указанному файлу (или каталогу) chmod .

При создании каталога также можно сразу указать права доступа к нему с помощью команды mkdir -m .

Изменение владельца и группы файлов выполняется с помощью команды chown . Группу также пожно назначить командой chgrp .

Тем же побитовым представлением атрибутов регулируются и права доступа по умолчанию при создании файлов и каталогов. Делается это с помощью команды umask . Единственный параметр umask - восьмеричное число, задающее атрибуты, которые не надо устанавливать новому файлу или каталогу. Так, umask 0 приведёт к тому, что файлы будут создаваться с атрибутами «rw-rw-rw-» , а каталоги - «rwxrwxrwx» . Команда umask 022 убирает из атрибутов по умолчанию права доступа на запись для всех, кроме хозяина (получается «rw-r--r--» и «rwxr-xr-x» соответственно), а с umask 077 новые файлы и каталоги становятся для них полностью недоступны («rw-------» и «rwx------»).

Специальные атрибуты файлов

В файловой системе Linux присутствует поддержка дополнительных флагов или по другому "атрибутов" для файлов в ядрах начиная с серии 1.1. Файловая система в ядрах серий 2.2 и 2.4. позволяет работать со следующим набором атрибутов:

-A Atime система не апдейтит atime(access time) для данного файла.
-S Sync система фиксирует все изменения, происходящие в данном файле на физическиом диске синхронно с приложением изменяющим данный файл.
-a Append система позволяет открывать данный файл с целью его дополнения и не позволяет никаким процессам перезаписывать или усекать его.Если данный атрибут применяется к директории процесс может создавать или модифицировать файлы в этой директории, но не удалять их.
-i Immutable система запрещает любые изменения данного файла. В случае директории, процессы могут модифицировать файлы уже содержащиеся в данной директории, но не могут удалять файлы или создавать новые.
-d No Dump программе создающей дампы дается указание игнорировать данный файл во время создания backup.
-c Compress система применяет прозрачную компрессию для данного файла. Т.е. чтение из него дает уже декомпрессованые данные и предварительно перед записью на диск производится их сжатие.
-s Secure Deletion удаление такого файла сопровождается перезаписью блоков диска,на которых он располагался нулями.
-u Undelete когда приложение запрашивает файл на удаление, система должна сохранить блоки на диске, на которых расположен данный файл, чтобы потом его можно было восстановить.

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

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

* позволяет устанавливать флаг и учитывает его значение

i позволяет устанавливать флаг,но игнорирует его значение

Полностью игнорирует флаг

/ 1.0 1.2 2.0 2.2 2.4
A - - * * *
S * * * * *
a - * * * *
i - * * * *
d - * * * *
c i i i i i
s * * i i i
u i i i i i

В некоторых версиях разработчики исключили атрибут "secure deletion", поскольку, на их взгляд, его использование повышает общую безопасность лишь незначительно.

Флаг "A" или "atime" для определенных файлов может дать некоторую прибавку производительности, так как избавляет систему от необходимости апдейтить access time для этих файлов каждый раз, когда их открывают на чтение.

Атрибут "S" или "synchronous" предоставляет новый уровень поддержки целостности данных. Но поскольку все изменения в файлах немедленно сохраняются на диске несколько понижается производиельность.

Основное внимание мы уделим флагу "a" ("append only") и "i" ("immutable"), так как их использование дает наиболее ощутимые приемущества в плане обеспечения безопасности и целостности файловой системы.

Различные open source BSD системы, такие как FreeBSD и OpenBSD, с некоторых пор поддерживают аналогичные флаги в своих файловых системах (UFS и FFS соответственно) и частично решение о реализации аналогичных спецвозможностей в Linux основывается на этом положительном опыте.

Изменение специальных атрибутов файла выполняется с помощью команды chattr .

Просмотр специальных атрибутов файла выполняется с помощью команды lsattr .

Подробную информацию о файле или каталоге можно получить с помощью команды stat .

Изменить временные метки файлов или директорий можно с помощью команды touch .

Команды для работы с пользователями и группами пользователей

# id # Показывает сводную информацию по текущему пользователю (логин, UID, GID, группы);
# finger User # Показать информацию о пользователе User;
# last # Показывает последних зарегистрированных пользователей;
# who # Показывает имя текущего пользователя и время входа;
# useradd Denis # Добавление нового пользователя Denis;
# groupadd ITShaman # Добавление группы ITShaman;
# usermod -a -G ITShaman Denis # Добавляет пользователя Denis в группу ITShaman (для Debian-подобных дистрибутивов);
# groupmod -A Denis ITShaman # Добавляет пользователя Denis в группу ITShaman (SuSE);
# userdel Denis # Удаление пользователя Denis;
# groupdel ITShaman # Удаление группы ITShaman.

Вадим Виниченко, Мэтт Уэлш

Пользователи и группы

Поскольку система Linux с самого начала разрабатывалась как многопользовательская, в ней предусмотрен такой механизм, как права доступа к файлам и каталогам. Он позволяет разграничить полномочия пользователей, работающих в системе. В частности, права доступа позволяют отдельным пользователям иметь “личные ” файлы и каталоги. Например, если пользователь ivanov создал в своём домашнем каталоге файлы, то он является владельцем этих файлов и может определить права доступа к ним для себя и остальных пользователей. Он может, например, полностью закрыть доступ к своим файлам для остальных пользователей, или разрешить им читать свои файлы, запретив изменять и исполнять их.

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

“Пользователями ” системы Linux , выполняющими различные действия с файлами и каталогами, являются на самом деле вовсе не люди, а программы, выполняемые в системе - процессы . Одна из таких программ - командная оболочка, которая считывает команды пользователя из командной строки и передаёт их системе на выполнение. Каждая программа (процесс) выполняется от имени определённого пользователя. Её возможности работы с файлами и каталогами определяются правами доступа, заданными для этого пользователя.

С целью оптимальной настройки прав доступа для ряда программ-серверов в системе созданы системные пользователи (учётные записи), от имени которых работают эти программы. Например, в системе ALT Linux веб-сервер (Apache) выполняется от имени пользователя apache , а ftp-сервер - от имени пользователя ftp . Такие учётные записи не предназначены для работы людей-пользователей.

У любого файла в системе есть владелец - один из пользователей. Однако каждый файл одновременно принадлежит и некоторой группе пользователей системы. Каждый пользователь может входить в любое количество групп, и в каждую группу может входить любое количество пользователей из числа определённых в системе.

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

Механизм групп может применяться для организации совместного доступа нескольких пользователей к определённым ресурсам. Например, на сервере организации для каждого проекта может быть создана отдельная группа, в которую войдут учётные записи (имена пользователей) сотрудников, работающих над этим проектом. При этом файлы, относящиеся к проекту, могут принадлежать этой группе и быть доступными для её членов. В системе также определено несколько групп (например, bin), которые используются для управления доступом системных программ к различным ресурсам. Как правило, членами этих групп являются системные пользователи, пользователи-люди не включаются в такие группы.

В некоторых дистрибутивах Linux (в т. ч. в дистрибутивах ALT Linux) с помощью групп могут быть предоставлены права, необходимые для выполнения определённых пользовательских задач. Например, чтобы пользователь получил возможность собирать пакеты RPM , его следует включить в группу rpm , чтобы предоставить возможность записи дисков CD-R/RW, пользователя нужно включить в группу cdwriter и т. д.

Виды прав доступа

Права доступа определяются по отношению к трём типам действий: чтение, запись и исполнение. Эти права доступа могут быть предоставлены трём классам пользователей: владельцу файла (пользователю), группе, которой принадлежит файл, а также всем остальным пользователям, не входящим в эту группу. Право на чтение даёт пользователю возможность читать содержимое файла или, если такой доступ разрешён к каталогам, просматривать содержимое каталога (используя команду ls ). Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для каталога - возможность создавать новые файлы или удалять файлы из этого каталога. Наконец, право на исполнение позволяет пользователю запускать файл как программу или сценарий командной оболочки (разумеется, это действие имеет смысл лишь в том случае, если файл является программой или сценарием). Для каталогов право на исполнение имеет особый смысл - оно позволяет сделать данный каталог текущим , т. е. “перейти ” в него, например, командой cd .

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

Первое поле в этой строке (-rw-r--r--) отражает права доступа к файлу. Третье поле указывает на владельца файла (ivanov), четвёртое поле указывает на группу, которая владеет этим файлом (users). Последнее поле - это имя файла (report1303). Другие поля описаны в документации к команде ls .

Данный файл является собственностью пользователя ivanov и группы users . Последовательность -rw-r--r-- показывает права доступа для пользователя - владельца файла, пользователей - членов группы-владельца, а также для всех остальных пользователей.

Первый символ из этого ряда (-) обозначает тип файла. Символ - означает, что это - обычный файл, который не является каталогом (в этом случае первым символом было бы d) или псевдофайлом устройства (было бы c или b). Следующие три символа (rw-) представляют собой права доступа, предоставленные владельцу ivanov . Символ r - сокращение от read (англ. читать), а w - сокращение от write (англ. писать). Таким образом, ivanov имеет право на чтение и запись (изменение) файла report1303 .

После символа w мог бы стоять символ x , означающий наличие прав на исполнение (англ. execute, исполнять) файла. Однако символ - , стоящий здесь вместо x , указывает, что ivanov не имеет права на исполнение этого файла. Это разумно, так как файл report1303 не является программой. В то же время, пользователь, зарегистрировавшийся в системе как ivanov , при желании может предоставить себе право на исполнение данного файла, поскольку является его владельцем. Для изменения прав доступа к файлу или каталогу используется команда chmod .

Следующие три символа (r--) отражают права доступа группы к файлу. Группой-собственником файла в нашем примере является группа users . Поскольку здесь присутствует только символ r , все пользователи из группы users могут читать этот файл, но не могут изменять или исполнять его.

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

Вот ещё несколько примеров:

Rwxr-x--x

-rw------- -rwxrwxrwx ----------

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

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

Права доступа и администрирование системы

Установка и поддержание оптимальных прав доступа является одной из важнейших задач системного администратора. Права должны быть достаточными для нормальной работы пользователей и программ, но не большими, чем необходимо для такой работы. Дистрибутивы ALT Linux обладают продуманной системой прав (предопределённые группы, псевдопользователи для различных программ-серверов, права доступа для системных файлов и каталогов). Прежде чем вносить существенные изменения в эту систему, целесообразно понять её логику и выяснить, нет ли другого способа достичь нужной цели.

Поскольку программы, исполняемые от имени суперпользователя (root), могут совершать любые действия с любыми файлами и каталогами, их выполнение может нанести системе серьёзный ущерб. Это может быть как следствием уязвимостей или ошибок в программах, так и результатом ошибочных действий самого пользователя. Поэтому работа с правами суперпользователя требует особой осторожности. Чтобы уменьшить связанные с этим риски, разработчики дистрибутивов ALT Linux рекомендуют для выполнения задач, требующих таких прав, использовать утилиту sudo .

Основные команды

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

chmod

Изменение прав доступа к файлу или каталогу.

chown

Изменение владельца файла.

chgroup

Изменение группы, которой принадлежит файл.

umask

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

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

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: