Документ взят из кэша поисковой машины. Адрес оригинального документа : http://comet.sai.msu.ru/lig/lig-4.html
Дата изменения: Sat Aug 24 02:59:32 1996
Дата индексирования: Mon Oct 1 19:34:55 2012
Кодировка: koi8-r

Поисковые слова: п п п п п п п п п п п п п п п п п р п р п р п р п
Администрирование

4 Администрирование

Содержимое этого раздела

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

Как в каждой бочке меда присутствует ложка дегтя, так и каждая система имеет своего администратора. А администрирование системы - это очень важная и иногда пожирающая уйму времени работа, даже если вы единственный пользователь системы.

Мы постараемся обсудить здесь наиболее важные вещи, связанные с администрированием, о котором вы должны знать при использовании Linux, чтобы не испытывали неудобств при работе с ОС. Чтобы быть не слишком болтливыми и приятными собеседниками, мы и раньше рассматривали только основные черты, пропуская многие важные детали. Вам следует прочитать книгу " Linux System Administrator's Guide", если у вас относительно Linux серьезные намерения. Это поможет вам лучше понять как там все происходит, и как там все взаимодействует. В крайнем случае, стоит все это просмотреть, чтобы знать что в книге содержится и какой помощи вам следует от нее ожидать.

4.1 О корнях власти, волшебной шапке и приятных ощущениях.

Как вы знаете, UNIX различает различных пользователей, так что то, что они могут сделать друг другу и системе, регулируется (например, не хочется, чтобы кто-то читал чужие любовные письма). Каждый пользователь получает account (регистрируется в системе), что включает имя пользователя, домашний каталог и т.д. В дополнение к регистрации реальных людей, регистрируются (для них также открывается счет :-) несколько специальных пользователей, имеющих привилегии. Наиболее "важный" даже среди них пользователь - root (корень).

Регистрация root

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

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

Например, если вы как обычный пользователь случайно попытаетесь удалить файл в /etc, система не разрешит вам это сделать. Но, если вы вошли как root, система даже не пикнет, выполняя все, что прикажете. Легко уничтожить систему, пребывая в системе в качестве root. Лучший способ избежать неприятностей, это:

Разумеется, есть племя хакеров, которые используют root практически всегда и везде. Но каждый из них когда-то по глупости уничтожил хотя бы (в лучшем случае) одну систему. Есть общее правило: пока вы не познакомились с неограниченными возможностями root, и не привыкли к отсутствию ограничений, входите под root в крайнем случае.

Разумеется, все совершают ошибки. Однажды сам Linus Torvalds (создатель linux) случайно удалил все поддерево каталогов, содержавшее программы ядра. Многие часы работы пропали (бы) в один миг навсегда. К счастью, однако, благодаря своему знанию кодов файловой системы, он смог перезагрузить систему и реконструировать дерево каталогов вручную.

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

Злоупотребление системой

С приходом ощущения власти приходит желание вредить. Это темная сторона администрирования в UNIX, но всякий через это когда-то должен пройти. Большинство пользователей UNIX никогда не получат возможность испытать это на университетских и производственных системах UNIX. Только высокооплачиваемые и высокообразованные системные администраторы могут входит в систему под именем root. Действительно, во многих таких заведениях пароль root - это строго охраняемый секрет. Это священная корова фирмы. Много делается попыток пролезть под именем root в систему; она представляется мудрой и устрашающей силой, покоряющейся только тем, кто знает заклинания.

Такая позиция по отношению к root очень легко приводит к опасностям и соблазнам. Поскольку root столь одурманивающая штука, то когда пользователь дорывается до возможности войти под root, прослеживается начало использования свалившихся привилегий в плане вредительства. Я знавал таких "системных администраторов", которые читали без разрешения почту других пользователей и вообще вели себя как дети, которым дали столь мощную клевую "игрушку".

Поскольку root имеет в системе такие привилегии, требуется определенный уровень зрелости и самоконтроля, чтобы использовать этот account (этот привилегированный "счет"), как это было задумано - для эксплуатации системы. Существует негласный закон чести в отношениях администратора с пользователями. Как вы будете себя чувствовать, если системный администратор читает ваши письма и просматривает ваши файлы? До сих пор нет достаточно серьезной юридической основы для неприкосновенности личной информации в многопользовательских компьютерных системах. В системах семейства UNIX пользователь root имеет возможность преодолевать все штатные механизмы защиты системы. Важно, чтобы у администратора были доверительные отношения с пользователями системы. Невозможно переоценить важность этого.

Взаимодействие с пользователями

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

Системный администратор может выбрать две тактики взаимодействия с злоупотребляющими (прим. переводчика: в исходном, а не в узко русском смысле этого слова) пользователями. Это может быть параноидная тактика и тактика доверия. Системный администратор с паранойей обычно своими действиями наносит больше вреда, чем предотвращает. Одна из моих любимых присказок: "Никогда не списывай на зловредность то, что можно списать на тупость". Взгляните с другой стороны, большинство пользователей не имеют возможностей и знаний, чтобы причинить реальный вред системе. 90% процентов того, что делает пользователь, причиняя вред системе (например, забивая пользовательский раздел огромными файлами или выполняя сразу несколько экземпляров громадной программы), он делает просто не подозревая, что он кому-то создает проблемы. Мне приходилось сталкиваться с пользователями, которые были источниками огромных неприятностей, но они они действовали по простоте душевной, а не со зла.

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

Если вы убедились, что пользователь действительно пытается ``взломать'' систему или умышленно ей вредит, старайтесь не отвечать угрозами на угрозы. Вместо этого просто предупредите его, но сохраняйте гибкость. Во многих случаях вы можете"схватить его за руку" в процессе свершения вредительства - вот тут и предупредите. Скажите, чтобы он так больше не делал. Но если вы снова его поймаете на вредительстве, то убедитесь, что это действительно намеренно. Я просто не смогу перечислить все случаи, когда оказывалось, что неприятность была либо случайной, либо я сам был виноват.

Установление правил

Лучший способ управления системой - это управление без применения железного кулака. Может так вы хорошо управляли в армии, но это не для UNIX. Имеет смысл сделать простой и гибкий свод руководств для пользователей, но чем меньше у вас будет правил, тем меньше шансов их нарушить. Даже если ваши правила использования системы очень ясны и разумны, пользователи все равно время от времени будут их без злого умысла нарушать. Это, в особенности, относится к новичкам в UNIX, которые еще только изучают основы системы. Да и вы сами можете время от времени рассылать гигабайтные файлы всем пользователям системы... Пользователям надо помочь понять правила и об'яснить, зачем они нужны.

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

Что все это значит

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

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

Наконец, быть системным администратором, это невесть что. При этом не имеет значения, опекаете вы маленький 386-ой или суперкомпьютер Cray. Знание заветного пароля root не принесет вам денег и славы; оно поможет сопровождать систему и поддерживать ее работоспособность. Вот так.

4.2 Загрузка системы

Существует несколько способов загрузки системы: либо с дискеты, либо с жесткого диска.

Использование загрузочной дискеты

Многие загружают Linux используя ``загрузочную дискету'', которая содержит копию ядра Linux. В ядре есть информация о корневом разделе Linux, так что ядро знает, где искать на жестком диске корневую файловую систему. (Команда rdev может использоваться для установки корневого раздела в образе ядра; см. ниже). Это тип дискеты, созданной, например, Slackware в процессе инсталляции.

Для создания своей собственной загрузочной дискеты, сначала разместите образ ядра на своем жестком диске. Оно должно быть в файле /Image или /etc/Image. Некоторые инсталляции используют для формирования ядра файл /vmlinux.

Вместо этого у вас может быть скомпрессированное ядро. Скомпрессированное ядро само раскомпрессируется при загрузке в память и занимает значительно меньше места на диске. Если у вас есть скомпрессированное ядро, оно находится в файле /zImage или /etc/zImage.

Зная, где у вас находится ядро, установите корневое устройство в образе ядра на имя вашего корневого раздела командой rdev. Формат команды:

    rdev <kernel-name> <root-device>

где <kernel-name>; это имя образа ядра, a <root-device> - имя корневого раздела Linux. Например, для установки корневого устройства в ядре /etc/Image на /dev/hda2 используется команда

    # rdev /etc/Image /dev/hda2

rdev может устанавливать другие опции в ядре, такие как взятый по умолчанию режим SVGA, для использования во время загрузки. Используйте ``rdev -h'' для получения помощи.

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

Например, для копирование файла ядра /etc/Image на дискету в /etc/fd0 используйте команду

    # cp /etc/Image /dev/fd0

Теперь эта дискета должна загружать Linux.

Использование LILO

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

LILO может быть также использована, как начальный загрузчик для нескольких операционных систем, позволяя вам выбирать во время загрузки, какую операционную систему (например, Linux или MS-DOS) загружать. Когда вы загружаетесь с использованием LILO, то загружается операционная система, установленная по умолчанию, если вы не нажмете ctrl, alt или shift во время выполнения загрузочной последовательности. Если вы нажмете любой из этих ключей, то вам будет выдана подсказка загрузчика, в ответ на которую вы напечатаете имя операционной системы, которую надо загрузить (например, ``linux'' или ``msdos''). Если вы нажмете tab в ответ на подсказку загрузчика, вам будет выдан перечень доступных операционных систем.

Простой способ инсталлировать LILO - отредактировать файл конфигурации /etc/lilo.conf и выполнить команду

    # /sbin/lilo

Файл конфигурации LILO содержит ``stanza''("стансы" - не пугайтесь, это действительно про поэзию). для каждой операционной системы, которую вы желаете загрузить. Лучший способ продемонстрировать это на примере конфигурационного файла LILO config. Нижеприведенные установки для системы, которая имеет корневой раздел Linux на /dev/hda1 и раздел MS-DOS на /dev/hda2.

    # Tell LILO to modify the boot record on /dev/hda (the first
    # non-SCSI hard drive). If you boot from a drive other than /dev/hda,
    # change the following line.
    boot = /dev/hda

    #  Name  of  the  boot  loader.  No  reason  to  modify  this
    #  un less you're doing some serious hacking on LILO.
    install = /boot/boot.b

    # Have LILO perform some optimization.
    compact

    # Stanza for Linux root partition on /dev/hda1.
    image = /etc/Image   # Location of kernel
       label = linux     # Name of OS (for the LILO boot menu)
       root = /dev/hda1  # Location of root partition
       vga   =   ask     # Tell kernel to ask for SVGA modes at boot time

    # Stanza for MSDOS partition on /dev/hda2.
    other = /dev/hda2    # Location of partition
       table = /dev/hda  # Location of partition table for /dev/hda2
       label = msdos     # Name of OS (for boot menu)

Стансы первой операционной системы в файле config - это та ОС, которую LILO загружает по умолчанию. Вы можете выбрать другую ОС во время загрузки в ответ на подсказку LILO, как это уже обсуждалось ранее.

Помните, что каждый раз, когда вы изменяете образ ядра на диске, вы должны заново выполнить /sbin/lilo, чтобы изменения отразились в загрузочном секторе вашего диска.

Имейте также в виду, что если вы используете здесь строку ``root ='', нет смысла использовать rdev для установки корневого раздела в образе ядра. LILO установит ее во время загрузки.

Linux FAQ (смотри Приложение A) дает дополнительную информацию по тому, как использовать LILO при загрузке Boot Manager OS/2. (прим. переводчика: The Linux FAQ - Часто Задаваемые Вопросы по Linux.

4.3 Выключение системы

Выключение Linux - это немножко акробатика. Не забывайте, что никогда нельзя просто выключить питание или нажать кнопку "reset" во время работы системы. Ядро отслеживает диск при вводе- выводе с помощью буферов. Если вы перезагружаете систему, не дав шанса ядру переписать буфера на диск, вы можете попортить файловые системы.

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

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

    shutdown <time> <warning-message>

<time> - время выключения системы (в формате hh:mm:ss - чч:мм:сс) и <warning-message> - сообщение, выдаваемое на терминалы всех пользователей перед выключением. Вы можете просто указать время (<time>) как ``now'', что приведет к безотлагательному выключению. Опция -r приведет к перезагрузке после выключения.

Например, выключить систему в 8:00 вечера можно командой

       # shutdown -r 20:00

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

ВНИМАНИЕ! На выключайте электропитание и не перезагружайте ее, пока не увидите на консоли сообщение:

       The system is halted

Важно cделать выключение "чисто", используя команды shutdown или halt. В некоторых системах нажатие ctrl-alt-del будет перехвачено системой и приведет к ее выключению, но в других системах использование "затычки для вулкана" приведет к немедленной перезагрузке системы и может быть причиной неприятностей.

4.4 Работа с пользователями

Вне зависимости от того, много у вас пользователей или нет, важно понять проблему работы с пользователем Linux. Даже если вы единственный пользователь вы должны иметь различные account для root и для себя. Каждый человек, использующий систему, должен иметь свой собственный account (быть индивидуально зарегистрированным в системе). Редко может быть целесообразно, чтобы несколько человек входили в систему под одним именем. Здесь дело не только в безопасности, но account используется для идентификации пользователя в системе. Необходимо иметь возможность проследить, кто что делает.

Концепция работы с пользователями

Система сохраняет различную информацию о каждом пользователе К такого рода информации относится перечисленная ниже.

username

уникальный идентификатор, присваиваемый каждому пользователю в системе. Примеры имен пользователей larry, karl и mdw. Могут использоваться буквы и цифры, а также нижнее подчеркивание и точка. Обычно имена пользователей ограничиваются восемью символами.

user

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

group

ID (или GID) - идентификатор группы это идентификатор группы пользователя. В Разделе 3.9 мы обсуждали права группы; каждый пользователь принадлежит к одной или более группам, определенных системным администратором. Подробнее об этом ниже.

password

Система также хранит в зашифрованном виде пароль пользователя. Команда passwd используется для установки и изменения пароля.

full

name "Полное имя" или "действительное имя" хранится вместе с именем пользователя. Например, пользователь schmoj может иметь действительное имя ``Joe Schmo'' (прим. переводчика: неужели для английского уха оно звучит также красиво, как для русского).

home directory

Домашний каталог - это каталог, в который пользователь начально попадает при входе в систему. Каждый пользователь должен иметь свой собственный домашний каталог, обычно ниже /home.

login shell

Исходный shell - это shell, который запускается для пользователя при его входе в систему. Это, например, может быть /bin/bash и /bin/tcsh.

Файл /etc/passwd содержит эту информацию про пользователей. Каждая строка этого файла содержит информацию об одном пользователе; формат строки имеет вид:

username:encrypted_password:UID:GID:full_name:home_directory:login_shell

Например, это может выглядеть так:

    kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

Как видно, первое поле ``kiwi'' - имя пользователя. Следующее поле ``Xv8Q981g71oKK'' - зашифрованный пароль. Пароли в читаемом виде в системе не хранятся. Сами пароли шифруются как секретные ключи. Другими словами, вы должны знать пароль, чтобы его расшифровать. Эта форма шифрации достаточно надежна.

Некоторые системы Linux используют "теневой пароль", в котором информация о паролях хранится в файле /etc/shadow. Поскольку /etc/passwd всем доступен, /etc/shadow обеспечивает дополнительный уровень секретности своей недоступностью. Теневой пароль обеспечивает и некоторые другие свойства, вроде прекращения действия пароля и т.д.; мы здесь не будем вдаваться в эти тонкости.

Третье поле, ``102'', - идентификатор пользователя (UID). Оно должно быть уникальным для каждого пользователя. Четвертое поле, ``100'', идентификатор группы (GID). Этот пользователь принадлежит к группе номер 100. Информация по группе хранится в файле /etc/group. Смотрите дополнительную информацию в Разделе 4.4.5.

Пятое поле - полное имя пользователя , ``Laura Poole''. Последние два поля - домашний каталог пользователя (/home/kiwi) и исходный shell (/bin/bash) соответственно. Домашний каталог пользователя не обязательно должен иметь имя, совпадающее с именем пользователя (username). Однако это помогает в идентификации.

Добавление пользователей

При добавлении пользователя следует совершить несколько шагов. Первое, пользователь должен быть занесен в файл паролей /etc/passwd под уникальным именем и идентификатором. Должны быть описаны идентификатор группы (GID), полное имя и другая информация.

Должен быть создан домашний каталог пользователя и установлены необходимые права доступа. Домашний каталог должен быть снабжен необходимыми файлами инициализации shell. Должны быть выполнены и другие работы по конфигурации ( например, создан spool для входной почты).

Хотя очень несложно добавлять пользователей вручную (я так делаю), когда вы сопровождаете систему со многими пользователями, легко что-то упустить. Самый простой способ регистрации пользователей - это использование диалоговой программы, которая задаст вам все необходимые вопросы и автоматически скорректирует все необходимые системные файлы. Эта программа называется useradd или adduser, в зависимости от вашего дистрибутива. Страницы руководства для этих программ должны быть достаточно понятными.

Удаление пользователей

Аналогично, удаление пользователей может быть выполнено с помощью команд userdel или deluser в зависимости от конкретного дистрибутива.

Если вы пожелаете временно "отключть" пользователя от системы, (без удаления его account ), вы можете просто приписать звездочку (``*'') в поле пароля в файле пароля /etc/passwd. Например, изменить у kiwi в файле /etc/passwd

    kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

это закроет для kiwi вход в систему.

Занесение атрибутов пользователя

После создания пользователя вам может потребоваться изменить его атрибуты, такие как домашний каталог и пароль. Простейший способ - это прямо изменить значения в /etc/passwd. Чтобы установить пароль пользователя используйте команду passwd.

Например,

    # passwd larry

изменить пароль larry.

Только root может изменять пароли других пользователей. Пользователи также могут изменять пароли с помощью команды passwd, но только свои собственные.

В некоторых системах имеются команды chfn и chsh, позволяющие пользователю самому устанавливать свое полное имя и исходные атрибуты shell. Если нет, то пользователи должны просить системного администратора изменить эти атрибуты для них.

Группы

Как мы говорили, каждый пользователь принадлежит к одной или более группам. Единственное значение группы замыкается на права доступа к файлу, как вы помните из Раздела 3.9. Каждый файл имеет "групповое владение" (``group ownership''), то есть хранит права доступа, которые определяют, как члены группы могут обращаться с файлом.

Существует несколько групп, определяемых системой, вроде bin, mail и sys. Пользователи не могут принадлежать к какой-либо из этих групп. Эти группы используются для системных файлов. А пользователи, наоборот, принадлежат к специальной группе, например users. Если вам хочется больше проблем, вы можете поддерживать несколько групп пользователей, наприме