оступа. Начнем со знакомой
вам (если вы уже установили Linux) программы распечатки каталогов ls. Обычно программа
не балует пользователя избытком информации, но если вы воспользуетесь ключом -l,
то получите следующее:
rw-rw-rw- 1 vovka root 4067 Nov 5 13:12 caterpillar.tar.z
Что же нам сообщила система? Первая, непонятная на первый взгляд, последовательность
символов как раз и представляет собой права доступа к этому файлов со стороны различных
категорий пользователей. Затем (1) выводится количество синонимов, под которыми
данный файл известен системе. Далее вам сообщается имя владельца файла (vovka),
то есть идентификатор лица его создавшего, и группа, к которой он принадлежит (root).
Ну а затем все как обычно - длина файла в байтах, дата и время его создания и собственно
имя файла. Надеюсь, что пользователи DOS обратят внимание на тот факт, что в UNIX
точка в имени файла лишена своего таинственного ореола-у файла может быть несколько
расширений (Это не блажь. Несколько расширений используется для обозначения последовательности
операций, которым подвергалась информация, записанная в файле. Так, в нашем примере,
.tar-расширение устанавливаемое одноименной программой архивации, а .z добавляется
программой упаковки gzip. В результате для распаковки архива вам потребуется вначале
распаковать файл с помощью gunzip, а уже затем разархивировать с помощью tar. А
вот если вам встретится архивный файл с расширением .tgz-придется воспользоваться
программой tar и ее встроенным распаковщиком-прим.ред.).
Давайте рассмотрим, из чего складывается запись прав доступа. Первый символ показывает
тип файла (обычный файл, каталог или файл, ассоциированный с устройством ввода/вывода).
А вот за ним следует три группы из трех символов, определяющих права: владельца
файла, его группы и всех прочих пользователей. Для каждой из этих категорий может
быть установлен или запрещен доступ к файлу на чтение (r) , запись-то есть внесение
модификаций и удаление (w) и на выполнение файла (x). Если соответствующая категория
доступа разрешена, она отображается буквой, если нет-дефисом. Поэтому прочитать
права доступа при просмотре записей каталога оказывается при наличии некоторых навыков
очень легко.
Обычно на суперпользователей (таким является, например, root) описанные выше
ограничения не распространяются. Однако, различные серверы и демоны подобных привилегий
не имеют, а следовательно вы должны не забывать устанавливать для них соответсвующие
права доступа в области "прочие пользователи".
Наряду с защитой от несанкционированного доступа к файлам, каталогам и устройствам
(без каких-либо проблем вы можете ограничить доступ к каталогам или устройствам,
которые являются так называемыми специальными файлами UNIX) механизм прав доступа
используется и для контроля целостности программного обеспечения системы. Как вы
знаете, немалую часть системных программ составляют скрипт-файлы, написанные на
языке оболочек (shell). Но как отличить обычный текстовый файл от исполняемого скрипт-файла?
Здесь на помощь приходит атрибут x из записи прав доступа. Если этот атрибут установлен,
вы можете исполнять файл как обычную UNIX-программу, если же нет...
В этом случае необходимо позаботиться об этом самому. При создании вами файла
с помощью текстового редактора (лично я предпочитаю JOE, который без проблем работает
с русским языком и поддерживает синтаксическую раскраску основных языков программирования)
вы получите текстовый файл, который не может самостоятельно исполняться как программа.
А каждый раз подавать команду типа:
ksh myscript
на мой взгляд, просто неприлично. К счастью, вы можете разрешить системе интерпретировать
любой файл как исполняемый (естественно, назначение этого атрибута файлу с текстами
анекдотов не заставит ваш компьютер хохотать до упаду!). Для этого вы можете воспользоваться
командой chmod. Синтаксис команды следующий:
chmod {a,u,g,o} {+|-} {r,w,x} <имя файла>
Первая группа кодов указывает на категорию пользователей (a-все, u-владелец файла,
g-группа, к которой принадлежит владелец, o-все прочие). Плюс или минус устанавливают
или отменяют атрибут, который кодируется тем же символом, который появляется при
выводе каталога.
Предположим, что вы разработали замечательный скрипт-файл, которым хотите поделиться
со своими друзьями, но не хотели бы, чтобы они без спросу вносили туда изменения.
А всем прочим пользователям вы милостиво разрешаете восхищаться вашим гением, не
желая, однако, чтобы они изучали ваши секреты. В результате, вы поступите следующим
образом:
chmod u+rwx prettysript
chmod g+rx prettyscript
chmod o+x prettyscript
А-а-а-а! -- воскликнет искушенный пользователь, -- а если текстовый редактор
по умолчанию разрешает доступ на чтение и запись всем пользователям? Тогда придется
каждый раз отдельно запрещать доступ по записи и приведенные выше примеры носят
абстрактный характер!
Читатель, как всегда оказывается прав. Приведенный выше синтаксис chmod ориентирован
больше на любителя, чем на настоящего UNIX-оида, который не боится использовать
самые разные системы счисления. Дело в том, что впервые UNIX был реализован на компьютерах
фирмы Digital, в которой в отличие от Intel была принята не шестнадцатиричная, а
восьмиричная система счисления (каждый разряд числа, записанного в этой системе
счисления соответствует не четырем, а трем двочным разрядам, а при записи чисел
вполне хватает цифр от 0 до 7). Обратите внимание, что права доступа для каждой
категории пользователей могут быть записаны с помощью одного восьмиричного числа.
И chmod поддерживает этот формат.
Вот например, как можно записать приведенную выше настройку прав доступа с помощью
одной строки:
chmod 751 prettyscript
Что означает сие непонятное число? Давайте расшифруем его биты и, как
говорится, "приведем в соответствие". Вот что мы имеем:
u7 g5 o1
1 1 1 1 0 1 0 0 1
r w x r w x r w x
В результате, при распечатке каталога мы получим вот такую запись прав доступа:
rwxr-x-x
что в полной мере соответствует нашим ожиданиям. Кстати, в литературе и документации
к системе обычно ссылка на права доступа дается именно в восьмиричном счислении,
поэтому наткнувшись на предложение типа "установите права доступа для данного файла
640", не мудрствуйте, а просто выполните команду chmod 640 <имя файла>.
Кто варежку потерял?
Теперь нам осталось определить самую малость - кто является владельцем файла,
членом его рабочей группы и "прочими". Для файлов, которые вы создаете с помощью
текстового редактора или в результате компиляции программы все понятно - используются
ваши идентификаторы пользователя и группы. Если вы разархивируете дистрибутив какого-либо
продукта, то все вновь созданные файлы и каталоги также получает ваши идентификаторы.
Вы уже догадались, к чему это может привести?
Совершенно верно - к конфузам. Вот типовая ситуация. Суперпользователь (root),
обладает всеми необходимыми полномочиями, чтобы установить, ну скажем, BBS RoCat
(Roman Catacombs-диск LinuxWare 1.0). И совершенно спокойно создает дерево каталогов
на пару мегабайт. После этого вы садитесь за чтение документации и с ужасом обнаруживаете,
что и имя каталога должно быть вполне определенное (ну это-то просто, можно использовать
либо команду mv -- чисто DOS-овский подход, либо воспользоваться командой ln, что
предпочтительнее), да и владельцем файлов должен быть системный оператор с идентификатором
BBS из группы BBS.
Но ведь не распаковав архив, вы не сможете узнать о необходимости использования
вполне специфического идентификатора пользователя и группы! Как же быть? Стирать
с диска только что распакованный каталог и повторять весь процесс установки с самого
начала? Или можно каким-либо образом изменить имена владельцев файлов и групп?
Можно, и без проблем. Для этого вы можете воспользоваться командой chown, которая
позволит изменить идентификатор владельца любого файла, каталога и даже дерева каталогов.
Для изменения группы владельца файла вы можете использовать команду chgrp. А UNIX
при попытке доступа к файлу сопоставит идентификатор пользователя и его группу с
соответствующими полями в характеристиках файла и сделает соответствующие выводы.
Если оба идентификатора совпадают-вы законный владелец файла. Если совпадает
только идентифкатор группы-вы можете пользоваться только теми правами, которые предоставляются
члену группы. А уж если не совпал ни один из идентификаторов-вам доступны только
права доступа класса "others".
Группы и пользователи
Теперь давайте разберемся с пользователями и группами. Очевидно, что пользователи-это
все, кому разрешено пользоваться системой. И поскольку таких людей может оказаться
довольно много за ними нужно приглядывать. Для достижения этой благородной цели
на каждого пользователя заводится счет (account), в котором определяется пользовательский
идентификатор-кличка, под которой пользователь известен системе, его идентификационный
номер и ряд других параметров.
Отметим, что кличка нужна системе только для того, чтобы вы не путали UNIX-систему
и концлагерь, самому же компьютеру, наоборот, удобнее использовать числовые идентификационные
номера.
Как показала практика использования вычислительных машин, зачастую над одним
проектом работает несколько пользователей. объединенных в так называемые группы.
Группы пользователей имеют ряд общих данных (например, работая над одним проектом
разумно пользоваться единой версией библиотек и готовить единый макет технической
документации к проекту). И естественно, что для пользователей "своей" группы целесообразно
сделать некоторые послабления.
Кроме того, существует несколько специализированных групп, которые предназначены
для псевдопользователей (каковыми являются некоторые службы и демоны), обеспечивающих
функционирование системы. Обычно группы для пользователей начинаются с сотни, то
есть обозначаются трехзначными числами, а системные группы находятся в первой сотне.
Справочная информация о пользовательских группах обычно хранится в файле /etc/group,
который носит чисто информационный характер и иногда даже не используется. А вот
информация о пользователях жизненно необходима для нормального функционирования
системы.
Пароли и профили пользователей
Концепция паролей традиционна для системы UNIX и поддерживается в практически
неизменном виде вот уже более двух десятков лет. Идея проста-проверить, имеет ли
пользователь право доступа к системе путем сравнения идентификатора и пароля, введенных
пользователем с эталонами, хранящимися в файле паролей (обычно -- /etc/passwd).
Это обычный ASCII-файл, который вы можете отредактировать с помощью vi или Emacs.
Как и большинство конфигурационных файлов UNIX, passwd состоит из записей, поля
которых разделены двоеточиями. Вот пример одной из записей:
vovka:Xv75fs1Z521:102:0:Vladimir Vodolazkiy:/home/vovka:/bin/tcsh
Первое поле-vovka, содержит идентификатор пользователя. За ним следует пароль,
который хранится в зашифрованном виде. Дело в том, что обычно файл /etc/passwd открыт
на чтение всем категориям пользователей, поскольку позволяет в удобной форме получить
информацию о том, кто и как работает в системе. И нужно это прежде всего не для
людей, а для программ-демонов, выполняющих автоматическую обработку информации.
Дабы максимально затруднить злоумышленнику взлом пароля в качестве ключа шифрования
используется сам пароль. Поэтому при загрузке системы система шифрует введенный
пользователем пароль и проверяет, совпадает ли полученная строка с содержанием поля
в /etc/passwd. После чего и решает-пускать пользователя в систему или нет. Вся информация,
которая содержится в оставшихся полях, по большому счету относится к профилю пользователя
и используется при загрузке системы, о чем мы уже писали ранее.
Несколько полезных советов
В заключение позвольте поделиться с вами некоторыми нехитрыми приемами, которые
позволяют более эффективно использовать парольную систему Linux-системы.
Как добавить пользователя?
Для этого вы должны выполнить несколько действий. Во-первых, необходимо создать
регистрационную запись в /etc/passwd. Проще всего воспользоваться утилитой adduser,
которая автоматически сформирует и добавит запись в файл /etc/passwd. Но при желании
вы можете выполнить эту поерацию и вручную. Во-вторых, для того, чтобы пользователь
мог войти в систему, необходимо, чтобы его "домашний каталог" был ему доступен (то
есть, чтобы на момент регистрации соответствующий диск был смонтирован!). Если вы
использовали упоминавшуюся выше программу, то можете не волноваться-каталог будет
создан автоматически. Далее, вы должны позаботиться о том, чтобы в системе была
установлена та оболочка, с которой будет работать пользователь. Если вы не уверены,
поместите в это поле /bin/sh-уж эта-то программа найдется на диске всегда!
Как создать группу?
Для этого предназначена команда groupadd. Ее следует вызывать раньше, чем вы
начнете создавать регистрационные записи пользователей. В противном случае вам придется
в команде adduser вводить числовые идентификаторы GID (group ID). А вот если группа
уже заведена, то вы можете на соответствующий вопрос команды adduser просто набрать
на клавиатуре название группы, к которой хотите отнести нового пользователя.
Обязательно ли нужно грузить одну из оболочек?
Ну зачем же? Если ваш пользователь должен работать только с одной и той же прикладной
программой (клиентской частью какой-нибудь мощной многопользовательской системы)
укажите полное имя этой программы вместо оболочки! И при завершении работы с программой
пользователь автоматически отключится от системы, а кроме того, физически не сможет
поиграть в тетрис в рабочее время!
Как запретить регистрацию пользователя в системе, не изгоняя его
из списков пользователей?
Очень просто. Вам достаточно поместить в первую позицию парольной записи символ
*. В результате парольный вход для данного пользователя будет заблокирован (ведь,
по сути говоря, вы изменили пароль пользователя, да так, что и сами не саможете
зарегистрироваться под этим именем).
Как создать "гостевой вход" в систему, не требующий ввода пароля?
Для этого достаточно не указывать никакого пароля при добавлении пользователя
с помощью adduser, или стереть пароль, сдела это поле пустым: vovka::102... Имейте
в виду, что с