Права доступа: первая линия обороны LinuxМодель безопасности Linux основана на той, которая используется в системах UNIX, и является такой же строгой (и иногда даже более). В системе Linux каждый файл принадлежит пользователю и группе пользователей. Есть также третья категория пользователей, которые не являются пользователем-владелецем и не принадлежат группе, владеющей файлом. Для каждой категории пользователей, разрешение на чтение, запись и выполнение может быть предоставлено или отклонено. Мы уже использовали "длинный" вариант просмотра файлов с помощью команды ls -l, хотя и по другим причинам. Эта команда также отображает разрешения файла (права доступа) для этих трех категорий пользователей; они указаны девятью символами, которые следуют за первым символом (индикатором типа файла). Как видно из приведенных ниже примеров, первые три символа из этой серии девяти отображают права доступа реального пользователя, который является владельцем файла. Следующие три — предназначены для группы-владельца файла, последние три — для других пользователей. Разрешения всегда описываются в одном и том же порядке: чтение, запись и исполнение (выполнение, запуск) для пользователя, группы и других. Вот некоторые примеры: marise:~> ls -l To_Do -rw-rw-r-- 1 marise users 5 Jan 15 12:39 To_Do marise:~> ls -l /bin/ls -rwxr-xr-x 1 root root 45948 Aug 9 15:01 /bin/ls* Первый файл является обычным (вначале прочерк). Пользователь с именем marise или пользователи, принадлежащие к группе users, могут читать и переписывать (изменять/перемещать/удалять) файл, но они не могут исполнять его (второе и третье тире). Другим пользователям разрешено только читать этот файл, но они не могут изменять или выполнять его (четвертое и пятое тире). Второй пример — это исполняемый файл; отличие: все могут запустить данную программу, но вам нужно быть суперпользователем, чтобы изменить его. Info-страницы подробно объясняют, каким образом команда ls управляет отображением прав доступа (см. в разделе What information is listed). Для удобства работы с командами, как права доступа (или режимы), так и категории пользователей имеют коды. См. таблицы ниже. Таблица 3.7. Коды режимов доступа
Таблица 3.8. Коды группы пользователей
Использование данного механизма разделения прав обязательно; это позволяет обеспечить высокий уровень безопасности даже без сетевой защиты. Среди прочих функций такая схема безопасности заботится о доступе пользователей к программам, it can serve files on a need-to-know basis и защищает конфиденциальные данные, такие как домашние каталоги и системные конфигурационные файлы. Вы должны знать ваше имя пользователя. Если вы не знаете, то его можно отобразить, используя команду id, которая также отображает группу по умолчанию, к которой вы принадлежите и, в конечном итоге, другие группы, членом которых вы являетесь: tilly:~> id uid=504(tilly) gid=504(tilly) groups=504(tilly),100(users),2051(org) Ваше имя пользователя, также хранится в переменной окружения USER: tilly:~> echo $USER tilly ИнструментыКоманда chmodОбычным следствием применения строгих правил доступа к файлам, а иногда и неудобством, является то, что права доступа должны быть изменены по тем или иным причинам. Чтобы это сделать, мы используем команду chmod, что привело к тому, что chmod стал почти приемлемым английским глаголом, обозначающим изменение режима доступа к файлу. Команда chmod может быть использована с буквенными и числовыми опциями, что вам больше всего нравится. В приведенном ниже примере используются буквенные параметры для решения проблемы, с которой обычно сталкиваются начинающие пользователи: asim:~> ./hello bash: ./hello: bad interpreter: Permission denied asim:~> cat hello #!/bin/bash echo "Hello, World" asim:~> ls -l hello -rw-rw-r-- 1 asim asim 32 Jan 15 16:29 hello asim:~> chmod u+x hello asim:~> ./hello Hello, World asim:~> ls -l hello -rwxrw-r-- 1 asim asim 32 Jan 15 16:29 hello* + и - используются для разрешения или запрещения конкретного права для определенной категории. Комбинации через запятую не допускаются. Info и man-страницы содержат полезные примеры. Здесь еще один, в котором файл из предыдущего примера становится личным файлом пользователя asim: asim:~> chmod u+rwx,go-rwx hello asim:~> ls -l hello -rwx------ 1 asim asim 32 Jan 15 16:29 hello* Ситуации, в которых появляются сообщения об ошибках, говорящих, что допуск запрещен, как правило, связаны с проблемой прав доступа. Также, реплики вроде: "Это работало вчера" и "Когда я запускаю это как root, то оно работает", скорее всего, вызваны тем, что не были учтены права доступа к файлам. При использовании chmod с цифровыми аргументами, значения для каждого предоставляемого права доступа указываются в "месторасположение" категории. Таким образом, получается трехзначное число, которое представляет собой символическое обозначение того, что должна сделать команда chmod. В следующей таблице перечислены наиболее распространенные комбинации. Таблица 3.9. Защита файлов с помощью chmod
Если в качестве аргумента chmod вы вводите число, состоящее менее чем из трех цифр, опущенные символы заменяются на нули, начиная слева. В системах Linux на самом деле существует четвертая цифра, которая предшествует первому из трех и устанавливает специальные режимы доступа. Все об этом и многом другом находится в info-страницах. Вступление в другую группуКогда вы введете id в командной строке, то получите список всех групп, к которым вы можете принадлежать; перед этим будет ваше имя пользователя и ID, а также название группы и ее ID, с которой вы в настоящее время связаны. Однако, во многих системах Linux можно активно входить только в одну группу в одно и то же время. По умолчанию, это активная или первичная группа является первой, которая вам устанавливается из файла /etc/passwd. Четвертое поле в этом файле содержит ID основной группы пользователей, что можно также увидеть в файле /etc/group. Например: asim:~> id uid=501(asim) gid=501(asim) groups=100(users),501(asim),3400(web) asim:~> grep asim /etc/passwd asim:x:501:501:Asim El Baraka:/home/asim:/bin/bash asim:~> grep 501 /etc/group asim:x:501: В приведенном выше примере четвертое поле в строке из /etc/passwd содержит значение "501", которое представляет собой группу asim. Из /etc/group мы можем получить имя, соответствующие этому идентификатору группы. При первом подключении к системе, это та группа, к которой будет принадлежать asim.
Помимо своей собственной группы, пользователь asim также может быть в группах users и web. Т.к. это вторые группы для данного пользователя, ему придется использовать команду newgrp, чтобы войти в любую из этих групп (сначала используйте gpasswd для установки пароля для группы). В этом примере asim необходимо создать файлы, которые принадлежат группе web. asim:/var/www/html> newgrp web asim:/var/www/html> id uid=501(asim) gid=3400(web) groups=100(users),501(asim),3400(web) Теперь, когда asim создает новые файлы, они будут находиться в собственности группы web, вместо того, чтобы принадлежать группе asim: asim:/var/www/html> touch test asim:/var/www/html> ls -l test -rw-rw-r-- 1 asim web 0 Jun 10 15:38 test Вход в новую группу освобождает вас от необходимости использовать chown (см. Раздел "Смена владельцев и групп") или вызывать системного администратора для смены владельцев для вас. См. man-страницу для newgrp для получения дополнительной информации. Маска файлаПрежде чем новый файл куда-то сохраняется, он подвергаться стандартной процедуре защиты. В Linux не существуют файлы без установленных прав доступа. Стандартное разрешение на файл определяется маской при его создании. Значение этой маски может быть получено с помощью команды umask: bert:~> umask 0002 Вместо добавления символических значений друг к другу, как с chmod, для выяснения разрешения на новый файл, необходимо вычесть из суммарной возможности прав доступа. Однако в примере выше мы видим четыре значения, но есть только три категории разрешений: для пользователя, группы и других. Первый ноль — это установленные специальные файловые атрибуты, которые мы будем обсуждать в Разделе "Смена владельцев и групп" и в Разделе "SUID и SGID". Возможно, с тем же успехом, в вашей системе этот первый ноль не отображается при вводе команды umask, и тогда вы видите только три числа, представляющих маску по умолчанию, «накладываемую» на файл. Каждая UNIX-подобная система имеет системную функцию для создания новых файлов, которая вызывается каждый раз, когда пользователь использует программу, которая создает новые файлы, например, при загрузке файлов из Интернета, при сохранении нового текстового документа и т.д. Эта функция создает как новые файлы, так и директории. Полные права на чтение, запись и выполнение предоставляются всем при создании нового каталога. При создании нового файла, эта функция создаст право на чтение и запись для всех, но прав на выполнение отсутствует для всех категорий пользователей. Таким образом, первоначально применяется маска для каталога с разрешением 777 или rwxrwxrwx, а для обычного файла 666 или rw-rw-rw-. Значение umask вычитается из этих разрешений по умолчанию, определенных инструментом, создающим новый файл или каталог. Таким образом, каталог будет иметь права доступа 775 по умолчанию, а файл 664, если значение маски (0)002. Это демонстрируется на примере ниже: bert:~> mkdir newdir bert:~> ls -ld newdir drwxrwxr-x 2 bert bert 4096 Feb 28 13:45 newdir/ bert:~> touch newfile bert:~> ls -l newfile -rw-rw-r-- 1 bert bert 0 Feb 28 13:52 newfile
Если вы войдете в другую группу, используя команду newgrp, маска остается неизменной. Таким образом, если она установлена на 002, файлы и каталоги, которые вы создаете, находясь в новой группе, также будут доступны для других членов этой группы; вам не придется использовать команду chmod. Пользователь root обычно имеет более строгую маску по умолчанию: [root@estoban root]# umask 022 Эти значения по умолчанию — общесистемная установка в конфигурационном файле shell, например /etc/bashrc или /etc/profile. Вы можете изменить их на ваш собственный файл конфигурации shell, см. в Главе 7, “Дом сладкий /home” о настройках окружения оболочки. Смена владельцев и группЕсли файл находится в собственности не того пользователя или группы, то недочет может быть устранен с помощью команд chown (смена владельца) и chgrp (смена группы). В среде, где файлы должны находиться в коллективном доступе группы, изменение владельца является частой задачей системного администрирования. Обе команды достаточно гибкие, о чем можно узнать с помощью опции --help. Команда chown может использоваться как для изменения владельца-пользователя файла, так и группы, а chgrp изменяет только группу. Конечно, система проверит, имеет ли пользователь, использующий эти команды, достаточно прав на файл(ы), чтобы изменять владельцев. Чтобы изменить лишь владельца-пользователя файла, используйте следующий синтаксис: chown newuser file Если вы используете двоеточие после имени пользователя (см. info-страницы), группа-владелец будет изменена также на основную группу пользователя, запускающего команду. В системе Linux каждый пользователь имеет свою собственную группу, так что эта особенность может использоваться, чтобы делать файлы личными: jacky:~> id uid=1304(jacky) gid=(1304) groups=1304(jacky),2034(pproject) jacky:~> ls -l my_report -rw-rw-r-- 1 jacky project 29387 Jan 15 09:34 my_report jacky:~> chown jacky: my_report jacky:~> chmod o-r my_report jacky:~> ls -l my_report -rw-rw---- 1 jacky jacky 29387 Jan 15 09:34 my_report Если jacky захотел бы поделиться этим файлом, без предоставления всем разрешения на запись, то он может использовать команду chgrp: jacky:~> ls -l report-20020115.xls -rw-rw---- 1 jacky jacky 45635 Jan 15 09:35 report-20020115.xls jacky:~> chgrp project report-20020115.xls jacky:~> chmod o= report-20020115.xls jacky:~> ls -l report-20020115.xls -rw-rw---- 1 jacky project 45635 Jan 15 09:35 report-20020115.xls Таким образом, пользователи из группы project смогут работать с этим файлом. У пользователей не из этой группы нет никакого доступа к нему вообще. Как chown, так и chgrp могут быть использованы для рекурсивной смены владельца с помощью опции -r. В этом случае, все вложенные файлы и подкаталоги данного каталога будет принадлежать указанному пользователю и/или группе.
Специальные режимыЧтобы все время не беспокоить системного администратора решением проблем, связанных с правами, специальные права доступа могут быть предоставлены для целых каталогов или отдельных программ. Есть три специальных режима:
mark:~> ls -ld /var/tmp drwxrwxrwt 19 root root 8192 Jan 16 10:37 /var/tmp/ Липкий бит установливается с помощью команды chmod o+t directory. Историческое происхождение “t” - сохранение возможности Text access (текстовый доступ) в UNIX.
mimi:~> ls -ld /opt/docs drwxrws--- 4 root users 4096 Jul 25 2001 docs/ mimi:~> ls -l /opt/docs -rw-rw---- 1 mimi users 345672 Aug 30 2001-Council.doc Это стандартный способ совместного доступа к файлам в UNIX.
|
|||||||||||||||||||||||||||||||||||||||||

"Механизм" индивидуальной группы пользователя. 
Последние комментарии
3 дня 22 часа назад
4 дня 16 часов назад
4 дня 20 часов назад
4 дня 22 часа назад
5 дней 17 часов назад
5 дней 17 часов назад
6 дней 17 часов назад
1 неделя 17 часов назад
1 неделя 2 дня назад
1 неделя 4 дня назад