Русский язык, увы все больше и больше засоряется буржуазными словечками (даже не словечками, а так, гибридами). Сколько раз я уже встречал выражение "залогиниться в системе", "я логинюсь..." и так далее. На самом деле говорящий или пишущий подразумевает процесс регистрации в системе.
Под регистрацией понимается процесс опознания пользователя и выделения в его распоряжение санкционированного системным администратором набора вычислительных ресурсов. Под ресурсами понимается доступ к тем или иным дискам (каталогам), перифериным устройствам и так далее. Само опознавание выполняется одной из программ семейства getty:
uugetty - стандартная программа регистрации
на консоли (виртуальной линии);
uugetty_ps - программа, позволяющая зарегистрироваться,
подключившись к последовательному порту через нуль-модем или (как
бы его получше назвать) не-нуль-модем;
mgetty - программа регистрации, распознающая
приходящие факсы.
login:
ведущую свое происхождение от двух слов LOG IN (один из переводов - "шлагбаум на вьезде"). В ответ на подсказку вы должны ввести свой идентификатор, и, если это потребутся, пароль. В случае, если идентификатор пользователя и пароль присутствуют в файле /etc/passwd вы будете допущены в систему.
Если программа getty обнаружит файл /etc/nologin (совершенно неважно, что в нем находится) то регистрация в системе будет запрещена! Создается этот файл обычно программой shutdown или ее аналогами. Смысл мероприятия довольно прозрачен - не допустить внесения изменений в систему после завершения разгрузки. При запуске системы это файл должен автоматически ликвидироваться и проблем у вас возникать не должно. За исключением того случая, когда вы вручную создадите этот файл во время работы. Так что будьте бдительны!
Основным понятием, определяющим все отношение к "правам и обязанностям пользователей" являются атрибуты файла. Напомню, что атрибуты файла, принятые в MS-DOS заимствованы из CP/M, а туда попали из UNIX. Насколько удачным оказалось использование "испорченного телефона" можно судить по большому количеству признаков, одним из которых является, например, количество вирусов. В этой области Microsoft есть чем гордиться - MS-DOS и впрямь впереди планеты всей. Но давайте вернемся к правам доступа. Начнем со знакомой вам (если вы уже установили 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
В результате, при распечатке каталога мы получим вот такую запись прав доступа:
что в полной мере соответствует нашим ожиданиям. Кстати, в литературе и документации к системе обычно ссылка на права доступа дается именно в восьмиричном счислении, поэтому наткнувшись на предложение типа "установите права доступа для данного файла 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... Имейте в виду, что с системным пользователем (root) этот номер не пройдет!
"Ежовые рукавицы" или "свободная любовь"?
Конечно же, немаловажную роль в обеспечении
эффективности системы защиты от несанкционированного доступа играет
и политика системного администратора. Будете ли вы тираном, маленькоим,
но свирепым, или же позволите пользователям своей системы "пожирать"
друг друга, взирая на их мышиную возню с олимпийских высот привилегий
суперпользователя - зависит только от вас. Но вот что вам необходимо
сделать в любом случае, так это по крайней мере объяснить конечным
пользователям, для чего в системы введена система паролей, если
вы не пытаетесь противостоять козням ЦРУ.
И вот тут то довольно часто искушенного системного программиста ставит в тупик необходимость разработки "примитивной инструкции пользователю", в которой необходимо объяснять, казалось бы, очевидные вещи. Поэтому позвольте привести образцовое методическое пособие, позволяющее "повысить личную ответственность безответственных пользователей за сохранение целостности собственного счета в вычислительном комплексе и предотвращение случаев несанкционированного проникновения в систему с корыстными или вредительскими побуждениями!"
Выбор пользовательского пароля играет исключительно важную роль в пресечении попыток злоумышленников, поскольку большинство попыток проникновения в систему в той или иной степени связаны с подбором пароля. Взломщик, проникнув в систему, не только может удалить или модифицировать ваши файлы, но и нанести вред другим пользователям системы, которые не проявляли преступной небрежности.
Хороший пароль, создать нелегко, и в каждом конкретном случае он должен продумываться тщательно, с осознанием того, что это первая линия обороны, защищающая информацию вашей фирмы (а следовательно и источник вашего благосостояния) от конкурентов и недоброжелателей.
Прежде всего необходимо указать, что не следует использовать в качестве пароля:
Вообще говоря, хороший пароль представляет собой смесь из нескольких слов со случайной сменой регистра символов. Примером продуманного подхода к подбору паролей может служить АО РелКом, предоставляющая пользователям своей системы достаточно эффективные пароли, например MYxND34MN. Использование цифр в произвольных позициях пароля только повышает его устойчивость к подбору.
Пароль не догма, и не имеет права на вечное существование. Периодически пользователь должен изменять пароль (либо самостоятельно, то есть по доброй воле, либо после дружеской подсказки системного администратора, то есть принудительно). Имеет смысл определить срок службы паролей, скажем в два-три месяца. Смену пароля можно выполнить с помощью команды passwd (использование ее очевидно).
Пользователь обязан изменить пароль, предоставленный ему администратором сразу же после первой регистрации в системе, и самостоятельно следить за его сменой с периодичностью в один-два месяца (здесь нет никаких противоречий с обязанностями системного администратора следить за периодической сменой паролей пользователями, разница только в том, что администратор должен вступать в игру только в том случае, если пользователь нерадиво относится к защите собственных интересов).
Пользователь не обязан никому сообщать свой пароль, вне зависимости от обстоятельств.
Об этом стоит поговорить несколько подробнее. Вы не должны сообщать пароль никому. И ни при каких обстоятельствах. Известны случаи взлома систем, при которых злоумышленник отправлял пользователям письма по электронной почте, представляясь системным администратором и предлагал предоставить свой пароль в обмен на какую-либо иную информацию. Так вот, системному администратору ваш пароль ни к чему, поскольку всей полнотой доступа к системным ресурсам (в том числе и к вашим) он обладает a priori. Более того, ни по нашему, ни по международному законодательству не регламентирована обязанность пользователя сообщать кому-бы то ни было свой пароль для входа в систему. Поэтому, столкнувшись с подобной попыткой пользователь обязан поставить в известность лицо ответственное за безопасность вычислительной системы или администратора системы.
Отучите пользователей от пагубной привычки записывать пароли где попало. В противном случае профессионал без проблем обнаружит бумажку, которая, как правило, приклеена к монитору или клавиатуре (не смейтесь, а лучше пройдитесь лишний раз вдоль рабочих мест!). Если же пользователю жизненно необходимо записывать пароль, системный администратор должен добиться того, чтобы эта запись хранилась в бумажнике, вместе с кредитными карточками и документами-пользователь, по крайней мере, должен осознавать, чего стоит это труднозапоминаемое слово.
И уж во всяком случае, не стоит записывать на одном листке бумаги одновременно и регистрационное имя и пароль. А кроме того, рекомендуется воздерживаться от ввода паролей при посторонних, особенно в тех случаях, когда вы не слишком уверенно пользуетесь клавиатурой. При некотором навыке злоумышленник без проблем может определить ваш пароль по движениям пальцев.
Каждый пользователь должен позаботиться об установке корректных прав доступа к личному каталогу и его поддеревьям. Рекомендуется использовать шаблоны 700, 711 или 755. В любом случае необходимо запретить посторонним возможность записи в личный каталог! В противном случае вы предоставляете неизвестным лицам возможность создания или уничтожения файлов в вашем каталоге по своему, а не вашему. усмотрению.
Для самых важных файлов рекомендуется устанавливать права - 644 или 600. И только в редких случаях стоит использовать шаблон 666, позволяющий всему миру читать и записывать информацию в данном файле.
Практически в каждом личном каталоге имеются специальные файлы, имена которых начинаются с точки, и называются по иностранному - дот-файлами. Эти файлы являются аналогами CONFIG.SYS и AUTOEXEC.BAT из мира DOS, но являются не общими для всей системы, а ориентированы только на конкретного пользователя. Это как раз те данные, для которых права доступа должны устанавливаться в соответствии с шаблоном 600. Вот их список:
.login, .logout, .cshrc, .bashrc, .kshrc, .xinitrc, .exrc, .dbxinit, .profile, .sunview, .mwmrc, .twmrc.
Даже если пользователь не имеет достаточной квалификации, чтобы скорректировать содержащуюся в этих файлах информацию, необходимо предпринять все меры к тому, чтобы к подобным операциям не допускались посторонние лица. В противном случае реальный контроль над счетом пользователя получит тот, кто сконфигурировал дот-файлы!
Пользователи не должны пренебрегать элементарными правилами физической безопасности. После того, как будет завершена регистрация в системе, недопустимо оставлять доступ к терминалу без контроля, даже в случае кратковременной отлучки. На этот случай разработаны специальные программы блокировки доступа к клавиатуре и экрану монитора, установить которые обязан любой уважающий себя администратор. Если же этого не сделать, то злоумышленнику достаточно будет выполнить всего две команды - chmod и cp, чтобы похитить все принадлежащие вам данные.
Жизнь, как известно, всегда вносит коррективы в наши планы. Поэтому, время от времени возникает необходимость предоставления доступа к вашему счету некоторых третьих лиц. Тем не менее, и в этом случае не следует забывать о мерах безопасности. Довольно часто идут по пути минимального сопротивления, передавая "соратникам" пароль или устанавливая для всех своих файлов шаблон доступа 777. Нужно ли говорить к каким пагубным последствиям все это может привести! Попытайтесь либо ограничить диапазон предоставляемых возможностей оластью рабочей группы, либо просто скопировать необходимые для вашего партнера файлы. Не оставляйте счет в системе без контроля.
Конечно, приведенных в данном приложении данных явно недостаточно для того, чтобы освоить все тонкости системного администрирования в UNIX. Однако этого материала должно хватить для того, чтобы сделать первые шаги от DOS к UNIX. Которые, как правило, оказываются самыми трудными. Но как только вы установите систему и зарегистрируетесь в ней, то к вашим услугам окажется огромнуый кладезь информации, который уже будет находиться на вуашем диске-это система man (контекстная подсказка), пакет info (описание основных пакетов программ и языков программирования), а также многочисленные текстовые файлы FAQ, содержащие методические рекомендации по установке различного периферийного оборудования или служебных программ UNIX.
Программа поиска уязвимых мест в защите - CRACK
"Теневые пароли"
npasswd - генератор надежных паролей