учебники, программирование, основы, введение в,
Мягкая кровля

 

Введение в UNIX. Устройство системы

История UNIX вкратце
Первая версия многозадачной многопользовательской системы UNIX была разработана в 1969 году сотрудниками подразделения Bell Labs фирмы AT&T Деннисом Ритчи (Dennis Ritchie) и Кеном Томпсоном (Ken Thompson). Она была написана на ассемблере для компьютера PDP-7. К лету 1972 года систему переписали на язык высокого уровня С, что позволяло перенести ее на любую аппаратную платформу. Создатели UNIX впервые предложили операционную систему, полностью написанную на языке высокого уровня.
Первым компьютером, которым управляла новая версия системы, стал компьютер PDP-11 компании Digital Equipment Corporation (DEC). Несколько десятилетий спустя DEC была переименована в Digital, затем поглощена компанией Compaq, которая, в свою очередь, слилась с Hewlett-Packard.
В начале 70-х годов XX века выпускники Университета в Беркли (University of California-Berkeley), вдохновленные новыми идеями UNIX, начали работу над собственной версией UNIX.
В 1977 году вышла первая версия Berkeley Software Distribution - известная университетская версия UNIX. Так как эта система была основана на коде AT&T, для ее использования была необходима лицензия AT&T. Разработчики BSD, подстегиваемые ростом цен на лицензии, полностью переписали исходный код системы к 1991 году.
После этого началось развитие UNIX в двух направлениях: одни команды разработчиков взяли за основу версию Беркли, другие - версию System V Release 4.2, которая была разработана AT&T.
Этот краткий экскурс в историю UNIX необходим нам для того, чтобы понимать, отчего все версии UNIX имеют много схожего, но некоторые отличия между разными вариантами систем иногда удивляют и даже досаждают системному администратору.
Solaris относится к ветви систем System V. Это означает, что в этой системе приняты стандартные для указанной ветви структура каталогов с файлами конфигурации, порядок загрузки ОС и системные утилиты, а также их ключи.
С другой стороны, в Solaris используются некоторые весьма специфичные именно для этой системы соглашения, которые не имеют отношения ни к System V, ни к BSD, поэтому такие случаи будут оговорены особо, чтобы не дезориентировать тех читателей, которые уже имеют опыт работы с другими вариантами UNIX.
Какую систему лучше установить?
При всей схожести систем UNIX каждый системный администратор хотя бы раз в жизни оказывался перед необходимостью принять решение о том, какую именно систему UNIX следует установить на конкретный компьютер в конкретной сети.
Хорошо тем, кому нужно было устанавливать систему на оборудование фирм Sun Microsystems, Silicon Graphics или Hewlett-Packard. Для этих аппаратных платформ существует по одной операционной системе, так что выбирать не из чего: придется ставить Solaris, IRIX или HP-UX соответственно.
Все остальные (а это, как минимум, все обладатели компьютеров архитектуры i386) должны решить, с какой системой им по пути на этот раз. Нередко выбор делается раз в жизни, в самом начале профессиональной карьеры и обусловливается самыми иррациональными причинами. Например, тем, какую систему уже установил более опытный приятель, которому предстоит отвечать первый месяц или год на все вопросы новоявленного администратора UNIX.
Выбор систем UNIX для i386 впечатляет: это и система реального времени QNX, и Solaris, и FreeBSD, и Linux, и многие другие, менее известные системы.
Как выбирать? Что выбрать?
Как ни странно, выбор "по примеру приятеля" может оказаться самым верным. Хорошая техническая поддержка и разумный совет - это главное подспорье новичку в деле администрирования систем. Если у вас есть друг или коллега, готовые делиться с вами знаниями днем и ночью, стоит поинтересоваться их мнением, какую систему устанавливать, даже если их совет окажется неоптимальным с точки зрения соответствия системы вашим задачам.
Если проблема технической поддержки для вас - не главное, лучше с самого начала определить, какую функцию будет выполнять компьютер, на который надо установить новую систему.
Если это - высокопроизводительный сетевой сервер, к которому следует подключить адаптер АТМ 622 Мбит, то придется покупать дорогое оборудование Sun SPARC, а для него нет иных систем, кроме Solaris. Если требуется установить компьютер, который будет почтовым сервером небольшой компании или компьютером для хостинга нескольких десятков web-сайтов среднего размера, то подойдет любой новый компьютер i386 под FreeBSD. Если требуется поддержка широкого спектра устройств - от новейших CD-рекордеров до flash-дисков с интерфейсом USB - один из вариантов Linux будет отличным выбором.
После того как выбрана основная функция сервера или рабочей станции, определяются требуемое оборудование и операционная система. С одной стороны, если вопросы производительности системы стоят на первом месте, придется вначале выбрать оборудование. С другой стороны, если в конце концов вы придете к выводу о необходимости установить Solaris, это может вызвать дополнительные (и достаточно строгие!) требования к оборудованию.
Может оказаться, что производительность не так важна, как совместимость с конкретным программным обеспечением. Предположим, система автоматизации управления предприятием SAP R/3 работает только под Solaris, а решение о внедрении SAP R/3 уже принято и изменить его нельзя. Тогда волей-неволей придется устанавливать Solaris. Единственным вопросом будет, на какую платформу его устанавливать - SPARC или Intel?
Анализ реальных требований задачи к программному обеспечению и оборудованию - это самая важная часть проектирования информационной системы, независимо от того, проектируется крупный завод с нуля или система бухгалтерского учета маленькой торговой фирмы.
Системный администратор (и его начальник!) должен всегда помнить, что любая компьютерная система служит для достижения совершенно конкретных производственных или организационных целей и должна проектироваться исходя из этих целей.
Что же делать системному администратору, который уже сформулировал требования к создаваемой системе и уяснил, какое оборудование или программное обеспечение станет использовать? Часто уже на этом этапе выбирать нечего, примеры таких ситуаций описаны выше. Но бывает, что выбор все-таки есть.
Например, какой UNIX лучше установить на компьютер, чтобы "просто поучиться"? Это обычный вопрос, который слушатели задают на курсах по UNIX. Для обучения следует устанавливать систему, которая на первых порах не будет причинять владельцу крупных проблем. Действительно, много ли опыта добавит новичку процесс подбора совместимых с Solaris 9 сетевых карт или видеоадаптеров? В то же время, Linux или FreeBSD безразлично, какая у него есть сетевая карта (и видеоадаптер!), так как они поддерживают куда более широкий спектр устройств.
Тому, кто впервые в жизни устанавливает UNIX, можно посоветовать установить Red Hat Linux, Suse Linux или Mandrake Linux. По умолчанию они установятся с поддержкой графической среды, и результат установки будет пригоден для использования в качестве рабочего места секретарши, равно как и в качестве файлового сервера компании. Если вы решили начать с установки почтового сервера, маршрутизатора или web-сервера, правильнее потренироваться на FreeBSD. Тем, кто хочет стать высокооплачиваемым специалистом по Solaris, можно начинать прямо с Solaris. Следует понимать, что каждый вариант UNIX отличается (возможно, незначительно) чем-то своим, и чтобы научиться с первого взгляда разбираться в поведении каждой встретившейся UNIX-системы, все равно придется набраться опыта, пробуя разные варианты UNIX.
Разные версии UNIX и Solaris в частности
Каждая из систем UNIX, будь то HP-UX, Slackware Linux, FreeBSD или Solaris, имеет различные версии. Это естественно: системы UNIX выпускаются уже давно, и каждая система много раз модифицировалась с момента создания ее первой версии. При выборе системы всегда следует обращать внимание на ее версию и дату выхода. Разные версии систем UNIX обычно называют выпусками (releases). Нумерация выпусков в каждой системе UNIX ведется по-своему. О правилах нумерации всегда сообщается на сайте производителя системы, если же эту информацию оказалось нелегко найти, постарайтесь воспользоваться советами из лекции 8 для поиска нужных сведений.
В Solaris принята относительно простая нумерация выпусков системы. Каждый новый выпуск получает номер, на единицу больший предыдущего. Так повелось с момента создания Solaris 7, которому предшествовал Solaris 2.6. С тех пор нумерация не "прыгает", и очередная версия системы, покидающая в момент написания этой книги цех упаковки продукции завода Sun, имеет номер 10. Если в систему после ее выхода вносятся некие изменения, недостаточно существенные для того, чтобы системе присвоить новый номер, измененный вариант текущей версии называют с указанием даты (месяца и года) внесения изменения, например, Solaris 9 12/02.
Это означает, что мы имеем дело с Solaris 9, версией от декабря 2002 года.
В файле /etc/release в Solaris хранится информация о версии установленной на компьютер операционной системы.

Внутреннее устройство UNIX
Система состоит из ядра, демонов и утилит. В системе принят ряд соглашений, которые соблюдаются всеми разработчиками программ под UNIX, в частности, поддержка POSIX.
Ядро - это набор системных таблиц и подпрограмм работы с ними. В ядро также входят драйверы устройств - небольшие программы, обеспечивающие системе интерфейс для общения с аппаратурой компьютера - дисками, видеоподсистемой, сетевыми интерфейсами и т.п. Ядро состоит из статической части, которая загружается при старте системы, и модулей. Модули могут динамически загружаться при старте системы или во время работы, при необходимости поддержки той или иной функции. В частности, подсистема поддержки NFS и драйверы внешних устройств оформлены в виде модулей.
Основная часть ядра Solaris состоит из двух файлов - genunix и unix. Это - статическая часть кода ядра. Независимый от платформы файл genunix содержит общие для всех ядер Solaris компоненты, а unix - это зависимый от платформы файл. Специфичный для платформы файл, который используется программой ufsboot для загрузки системы в 32-разрядном режиме, называется /platform/`uname -m`/kernel/unix. Конструкция "обратные апострофы" (` `) обозначает, что часть названия (а именно, название аппаратной платформы) можно узнать по команде uname -m.
В файле конфигурации ядра /etc/system можно установить значение переменной moddir, которая содержит список каталогов, разделенных двоеточием. Минимальное значение по умолчанию
/platform/platform-name/kernel:/kernel:/usr/kernel

но это значение может быть различным для различных платформ. Наиболее частым значением для большинства платформ является
/platform/platform-name/kernel:/platform/hardware-classname/
kernel:/kernel:/usr/kernel

Конкретное значение platform-name сообщает команда
uname -i

значение hardware-class-name сообщает
uname -m

Файл конфигурации ядра в Solaris - /etc/system, для получения детальной информации об этом файле следует ознакомиться со страницей руководства system(4), это можно сделать командой
man 4 system

В системах, загружающихся в 64-разрядном режиме, файл unix называется /platform/`uname -m`/kernel/sparcv9/unix. Когда загрузчик ufsboot загрузит оба этих файла (genunix и unix) в память, они становятся одним целым - ядром. Затем это ядро загружает модули, используя ufsboot для чтения файлов.
Подробнее о процессе загрузки говорится в лекции 9.
Демоны - это серверные приложения, отвечающие за обработку запросов от других (клиентских) программ.
Утилиты - это программы, которые нужны для выполнения разных базовых работ в системе: копирования файлов, управления процессами, восстановления файловой системы и т.п.
В разных вариантах UNIX используются разные файловые системы, причем часто поддерживается несколько разных файловых систем. Например, Linux умеет работать с ext2, ext3 (это ее родные файловые системы), UFS, HPFS, NTFS, FAT и другими. Solaris, как и некоторые другие ОС UNIX, использует файловую систему типа UFS.
UNIX - это многопользовательская многопроцессная система, т.е. в ней может одновременно быть запущено несколько процессов от имени разных пользователей. Число процессов, которые можно одновременно запустить, ограничивается размерами таблицы процессов в ядре и другими настройками ядра.
Каждый процесс в UNIX работает в своем собственном адресном пространстве, поэтому сбой в работе одного процесса никак не влияет на работу других. Подсистема виртуальной памяти, являющаяся частью ядра, запрещает процессам обращаться к чужим адресным пространствам.
Одной из функций ядра является планирование процессов, т.е. передача управления от одного процесса к другому. Для этого в ядре есть отдельная подпрограмма, называемая планировщиком задач. Процессы получают управление от планировщика задач в соответствии со своим приоритетом. Планировщик задач через определенное количество микросекунд решает, следует ли передать управление следующему в очереди процессу.
Ядро представляет собой отдельный процесс, выполняющийся с наивысшим приоритетом. В большинстве систем UNIX, включая Solaris, реализована возможность выполнять несколько параллельных подпроцессов внутри процесса. Эти подпроцессы называют потоками (threads). Более подробно этот аспект процессов рассмотрен в лекции 8.
Каждый пользователь в UNIX имеет свою собственную учетную запись пользователя (account), которая содержит имя пользователя, пароль, идентификатор пользователя (UID), идентификатор главной группы пользователя (GID), описание пользователя, его домашний каталог и путь к командному процессору, который следует запустить при интерактивном входе пользователя в систему.
Пользователь, работающий в UNIX, имеет уникальное имя пользователя и уникальный идентификатор. Идентификатор пользователя (User ID, UID) - это целое число от 0 до 2147483647. Обычные пользователи в Solaris имеют идентификатор в диапазоне от 100 до 60000.
Пользователю не надо знать свой идентификатор, потому что он используется только системой, а для входа в систему пользователь указывает свое имя (username). Имя пользователя может состоять из латинских букв и цифр; длина имени должна быть от 2 до 8 символов. Первый символ должен быть буквой, и по крайней мере один символ должен быть буквой нижнего регистра. Имя пользователя назначает системный администратор при создании новой учетной записи. Имя пользователя в руководствах часто называют "логин" (login) или "username".
Пользователи объединены в группы. Каждая группа имеет свое имя и уникальный идентификатор (Group ID, GID). В группе может быть сколько угодно пользователей, и каждый из них может быть участником любого количества групп. Однако у каждого пользователя есть главная группа - она указывается в свойствах любого файла, который создает пользователь. Идентификатор группы имеет значение от 100 до 60000, если только это не специальная группа. Для специальных (предопределенных) групп зарезервирован диапазон от 0 до 99.
Пользователей объединяют в группы для того, чтобы было удобнее администрировать систему.
Например, если право редактировать содержимое web-сайта надо предоставить нескольким ответственным, то достаточно создать специальную группу, например, webedit, и включить их всех в эту группу.
Предположим, что эти ответственные - пользователи ivan, lena и kira. Тогда в файл /etc/group следует добавить новую группу:
webedit::101:ivan,lena,kira

Концепция прав доступа в UNIX требует объединять пользователей в группы всегда, когда нужно предоставить одинаковые права доступа к файлам или каталогам группе людей.
Домашний каталог и путь к командному процессору играют роль только при интерактивном входе пользователя в систему. В UNIX каждый пользователь может работать с системой как непосредственно (набирая команды ОС на клавиатуре), так и обращаясь через сеть к тем или иным службам, запущенным на компьютере под UNIX.
При входе в систему пользователь набирает имя в ответ на приглашение login:. Затем в ответ на password: следует набрать пароль. При вводе пароль никак не отображается, в том числе и звездочками.
Пароль обычно назначается системным администратором при добавлении пользователя в систему. Подробнее о параметрах пароля (частота изменения, ограничение длины и т.п.) в Solaris рассказано в лекции 4.
Пользователь или системный администратор имеют возможность изменить пароль с помощью команды passwd имя_пользователя. Системный администратор может изменить пароль любого пользователя, все остальные - только свой собственный. Команда passwd без параметров меняет пароль того пользователя, который ее запустил. При изменении своего пароля потребуется набрать старый пароль (чтобы подтвердить, что вы - действительно тот, за кого себя выдаете) и затем - новый пароль. Новый пароль потребуется набрать дважды, чтобы система была уверена в вашем выборе.
Пароль может содержать любые символы. Допустимая длина пароля в Solaris составляет от 6 до 8 символов. Символы разных регистров в паролях, как и повсюду в UNIX, считаются различными.
Пароль не должен легко отгадываться. Идеальный пароль в системах UNIX состоит из восьми символов, среди которых есть латинские буквы разных регистров, цифры и знаки препинания. Не следует набирать пароль латинскими буквами, соответствующими русскому слову на клавиатуре, - эти комбинации давно попали в словари взломщиков, так же, как и комбинации последовательных клавиш типа qazwsx.
Так же, как на военном заводе нельзя одолжить чужой пропуск на денек, пользователям нельзя делиться с коллегами своим паролем. Строго запрещено писать пароль на бумажке и приклеивать ее к столу, на стену или монитор.
Если под одним именем и паролем работает несколько человек, нельзя выяснить, кто конкретно выполнил в системе действие от этого имени.
Список пользователей системы хранится в файлах /etc/passwd (в нем нет зашифрованных паролей, и его можно читать всем) и /etc/shadow (здесь есть зашифрованные пароли и дополнительная информация о параметрах пароля, читать можно только пользователю root). Список групп хранится в /etc/group. Структура файлов /etc/passwd, /etc/shadow и /etc/group рассмотрена в лекции 4.
Руководство по системе
В любом варианте UNIX есть главная команда - man. Это команда работы с руководством по системе. Подробнее структура руководства по Solaris будет рассмотрена в лекции 9. Однако уже сейчас, приступая к работе в системе, вы должны знать, что она вас не бросит в трудную минуту. По каждой программе, установленной в системе, по каждому системному вызову из системных библиотек, по многим понятиям и файлам конфигурации, а также драйверам устройств в стандартном комплекте установки системы есть страница руководства.
Для вызова руководства по команде следует набрать
man команда

Для вызова руководства по самой программе man, которая и показывает страницы руководства, наберите
man man

Это всегда верный и рекомендуемый, а иногда - единственно возможный способ получения справки о системе для тех, кто хочет разобраться в хитростях работы программ под UNIX или в их настройках.

Предопределенные пользователи и группы
При установке системы в файлы /etc/passwd и /etc/group автоматически записываются сведения о предопределенных пользователях и группах. Это делается для того, чтобы было проще управлять правами доступа к системным файлам.
Предопределенные группы и пользователи требуются для того, чтобы от их имени работали системные службы, и в то же время доступ к файлам этих служб был ограничен для всех остальных.
В Solaris 9 предопределенными являются пользователи, перечисленные ниже:
root:x:0:1:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
nobody:x:60001:60001:Nobody:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x Nobody:/:

К предопределенным группам относятся следующие:
root::0:root
other::1:
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
staff::10:
daemon::12:root,daemon
sysadmin::14:
smmsp::25:smmsp
nobody::60001:
noaccess::60002:
nogroup::65534:

Привилегированный пользователь
Один из предопределенных пользователей - это пользователь root с UID, равным нулю.
Пользователь с таким UID называется суперпользователем (superuser) или привилегированным пользователем и всегда имеет имя root. Он имеет неограниченные права на доступ к любому объекту в системе.
Тот, кому доверен пароль суперпользователя, должен хорошо знать основные процедуры администрирования UNIX и работать в системе так, чтобы не навредить ей. Системный администратор отвечает за безопасность системы, ее стабильную работу, добавление и удаление пользователей, регулярное резервное копирование и т.д. Он должен хранить пароль суперпользователя как зеницу ока. Доверять пароль суперпользователя многим людям не следует: системный администратор всегда должен точно знать, что любое действие от имени root сделал проверенный человек. Круг работ, которые выполняет системный администратор, всегда следует очень четко делить между несколькими людьми, а еще лучше - поручать эту работу единственному сотруднику.
Вход в систему под именем root разрешен только с терминалов, непосредственно присоединенных к UNIX-машине. Подключение через сеть от имени root запрещено. При надобности выполнить команду от имени root через сеть следует подключиться от имени обычного пользователя, а затем выполнить команду "превращения" в привилегированного пользователя (su). Пользователь root никогда не должен иметь пустой пароль.
Как стать привилегированным пользователем
В UNIX можно "перевоплотиться" в любого пользователя. Для этого служит команда su (switch user):
su имя_пользователя

Команда su без параметров эквивалентна su root.
Для перевоплощения в другого пользователя нужно знать его пароль. В некоторых системах UNIX дать команду su для того, чтобы работать от имени root, по умолчанию может только член группы wheel. Так, например, установлено во FreeBSD. В системах, где для аутентификации используется подсистема PAM, такой эффект достигается следующей строкой в файле /etc/pam.d/su:
auth required /lib/security/pam_wheel.so

Подсистема PAM в настоящее время поддерживается во всех основных системах UNIX: Solaris, HP-UX, FreeBSD и всех новых версиях Linux. Более подробно эта подсистема рассматривается в лекции 20.
"Перевоплощение" означает, что дальнейшая работа будет происходить в командном процессоре, который программа su запускает от имени другого пользователя - того, в которого вы перевоплотились. Каждому пользователю, кроме root, для того, чтобы начать работу от имени другого пользователя, требуется знать его пароль.
Команда su по умолчанию запускает командный процессор от имени другого пользователя, но сохраняет среду окружения старого, т.е. среда окружения наследуется от того командного процессора, в котором выполнена команда su. Это мешает перевоплотиться полностью. Например, если пользователь alen выполнил команду su, то работать от имени root он сможет, а читать почту из почтового ящика root - нет. Потому что почтовая программа проверяет переменную mail и (или) user, которая унаследуется от старого командного процессора.
Чтобы получить среду окружения в том виде, в котором ее получает другой пользователь при своем входе в систему, следует дать команду
su - имя_пользователя

Обратите внимание на знак - (минус) после команды su.
Например, для полного перевоплощения в пользователя breatney следует дать команду
su - breatney

В некоторых системах UNIX есть программа sudo, с помощью которой любой пользователь может выполнить команду от имени другого пользователя. Системный администратор должен заранее отредактировать файл /etc/sudoers, в котором определяется, кто и что может запускать от чужого имени. При выполнении программа sudo спросит у пользователя его пароль, чтобы убедиться, что ее запускает не тот, кто случайно подошел к терминалу с незакрытой сессией работы.
В Solaris нет sudo, зато есть более сложный способ делегирования части полномочий администратора другим пользователям. Для этого используется управление доступом на основе ролей (RBAC - role based access control). Его смысл состоит в том, что среди всех полномочий системного администратора выделяются их группы, а затем некоторые пользователи наделяются таким подмножеством полномочий, которое соответствует их реальной роли в администрировании системы. Более подробно RBAC рассматривается в лекции 21.
Что делать, если вы забыли пароль суперпользователя
Если пользователь забыл свой пароль, то сообщить ему, какой он был, невозможно. Надо просто установить ему новый. Это можно сделать командой
passwd user

или с помощью программы admintool (в графическом режиме). Изменить пароль любого пользователя может только root. Если же забыт пароль root, то следует поступить одним из следующих способов:
Способ 1 (рекомендован Sun Microsystems):

  1. Загрузитесь с установочного диска Solaris. Например, дав команду boot cdrom -s.
  2. Создайте каталог /tmp/a (или любой другой, чтобы смонтировать в этот каталог корневой раздел диска).
  3. Смонтируйте корневой раздел в /tmp/a (для этого надо знать, какой раздел на диске является корневым).
  4. Исправьте /etc/shadow:
  1. vi /tmp/a/etc/shadow

    
в редакторе найдите поле пароля в учетной записи root и удалите все поле (между первым и вторым двоеточиями).

  1. Перезагрузите систему, войдите под именем root без пароля, установите новый пароль.
  2. Запомните пароль. Для этого можно несколько раз подряд войти в систему и выйти из нее под именем root. Обычно системный администратор запоминает произвольную комбинацию из восьми символов с третьего раза.

Способ 2:

  1. Загрузитесь с установочного диска Solaris так, как будто вы собираетесь делать upgrade системы.
  2. При этом установщик Solaris смонтирует файловые системы, в том числе и корневую, на /a и спросит "Upgrade or Exit"; выберите Exit.
  3. Отредактируйте /etc/shadow как в способе 1, вызвав редактор командой
  1. vi /a/etc/shadow

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

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика