Система Linux
делает различия между пользователями. То,
как они могут воздействовать друг на друга и на систему, чётко
определено. Права доступа (permissions) к файлам устроены так,
что рядовой пользователь не сможет стереть или изменить файлы в
каталоге, например, /bin
или /usr/bin
. Большинство
пользователей защищают собственные файлы, устанавливая
соответствующие права доступа, так что другие пользователи либо
не имеют доступа к этим файлам, либо не могут изменить (или
стереть) их. Действительно, никто не сделает открытой, например,
свою переписку по электронной почте. У каждого зарегистрированного в
системе пользователя есть имя и соответствующий каталог
(домашний каталог) с данным именем[1]. Кроме того, система заводит специальные имена
пользователей, у которых имеются особые привилегии. Наиболее
важен пользователь root
, в качестве которого в системе
работает системный администратор. В большинстве случаев между
этими понятиями (пользователь root
и человек, исполняющий
функции системного администратора) не делается различий.
На действия пользователя root
нет никаких ограничений. Он
может читать, изменять или удалять любой файл системы, изменять
права доступа и принадлежность (ownership) любого файла,
запускать любые специальные программы. Например, те, которые создают
разделы на жёстком диске или создают файловые системы. Основная
идея состоит в том, что лицо, ответственное за функционирование
операционной системы, входит в систему как пользователь root
и
выполняет действия, которые не может выполнить рядовой
пользователь. Поскольку пользователю root
разрешено делать
все, ошибка в его действиях может иметь катастрофические
последствия.
Если обычный пользователь по неаккуратности вдруг попробует
удалить все файлы в каталоге /etc
, то система не позволит ему
это сделать. Однако если то же самое попробует сделать
пользователь root
, то система даже не выдаст никакого
предупреждения. Таким образом, работая в качестве пользователя
root
, легко разрушить операционную систему. Наилучший способ
предупредить подобные последствия заключается в
следующем.
Быть очень внимательным, запуская команду, которая имеет необратимые последствия. Если предполагается вычистить часть файлов из каталога, следует перечитать всю команду и убедиться, что в ней все правильно.
Использовать отличающееся от других приглашение
(prompt) для пользователя root
. В файлах
.bashrc
или .login
для пользователя root
должен быть определён специфический вид приглашения
командной оболочки, отличающийся от приглашения для остальных пользователей.
Во многих случаях для пользователя root
используется в
качестве приглашения символ #
, а для других пользователей — символ
$
.
Входить в систему как пользователь root
следует только тогда, когда это абсолютно необходимо. После
окончания работы в качестве пользователя root
следует
выйти из системы. Чем реже для работы используется root
,
тем меньше вероятность случайно повредить систему и спутать
права пользователя root
с правами других
пользователей.
Всякая будничная работа под Linux
, не являющаяся системным
администрированием, может и должна выполняться
непривилегированными пользователями. Этому правилу необходимо
следовать для того, чтобы вероятность приведения системы в
нерабочее состояние из-за вашей случайной ошибки или возможных
ошибок в используемых вами программах была сведена к минимуму.
К сожалению, немалая часть программного обеспечения написана безграмотно с точки зрения безопасности. Запуская такие программы непривилегированным пользователем, вы тем самым автоматически уменьшаете риск повреждения системы от сбоя и усложняете процедуру вторжения в вашу систему потенциальных взломщиков.
Административные задачи требуют привилегий пользователя root
.
Следует учитывать, что настройки для пользователя root
определяются спецификой его задач, а потому не приспособлены для
повседневной работы и лишь ограниченно локализованы.
Sudo — это программа, разработанная в помощь системному администратору и позволяющая делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы. Основная идея — дать пользователям как можно меньше прав, но при этом ровно столько, сколько необходимо для решения поставленных задач.
Команда sudo предоставляет возможность
пользователям выполнять команды от имени root
либо других
пользователей. Правила, используемые
sudo для принятия решения о
предоставлении доступа, находятся в файле
/etc/sudoers
; язык их написания и примеры
использования подробно изложены в
sudoers(5).
Кроме того, пример правил,
предоставляющих непривилегированным пользователям
возможность
устанавливать, обновлять и удалять пакеты в системе[2], приведён в
файле
/usr/share/doc/sudo-<версия>/rpm.sudoers
.
Для редактирования файла /etc/sudoers
следует использовать программу visudo,
которая проверяет синтаксис и тем самым позволяет избежать
ошибок в правилах.
В большинстве случаев грамотная настройка sudo делает работу от имени суперпользователя ненужной.
Человеку, отвечающему за работоспособность системы, очень важно всегда отчётливо представлять, что с нею творится. Теоретически, никакое происшествие не должно ускользнуть от его внимания. Однако компьютерные системы столь сложны, что отслеживать все события в них — выше человеческих возможностей. Для того, чтобы довести поток служебной информации до разумного объёма, её надо просеять (выкинуть незначащие данные), классифицировать (разделить на несколько групп сообразно тематике) и журнализировать (сохранить в доступном виде для дальнейшего анализа).
В Linux
эта задача решается с помощью механизма
централизованной журнализации, который
реализован демоном (системной службой)
syslogd. Все части системы (включая
ядро и системные службы) рапортуют syslogd о происходящих в
них событиях. В этот рапорт включается имя службы,
категория (facility) и
важность (priority) произошедшего
события. Демон, сообразно настройкам, классифицирует все эти
рапорты в несколько выходных потоков. Классификация и отсев
данных всякого выходного потока происходит так: для каждой
категории событий определяется наименьшая
важность, которой событие должно обладать, чтобы попасть в этот
выходной поток. Например, легко определить поток «ошибки», в
который будут попадать только важные
рапорты любых категорий, или поток
«безопасность», в который будут попадать
все рапорты категории «безопасность» и те
рапорты других категорий, важность которых заставляет
подозревать угрозу безопасности системы (например, рапорт
категории «демон» об аварийном завершении работы системной
службы).
Главное место хранения уже
классифицированного syslogd потока событий — системный журнал (т. н. log-файл). Системный журнал —
текстовый файл, содержащий рапорты
одного потока. Обычно
syslogd хранит системные журналы в
каталоге /var/log
и его
подкаталогах. Именно в системные журналы, прежде всего в
/var/log/messages
,
/var/log/maillog
и
/var/log/dmesg
,
необходимо заглядывать администратору, который хочет знать, что
происходит в системе. Поток рапортов о
важных событиях
syslogd направляет и на
системную консоль — выделенное
терминальное устройство. В ALT Linux роль системной консоли
выполняет 12-я виртуальная консоль,
доступная по сочетанию клавиш Alt-F12 или Alt-Ctrl-F12. Стоит
заметить, что некоторые службы (например, WWW-сервер
apache)
самостоятельно, в обход
syslogd, ведут журнализацию своих
событий, поэтому информацию о количестве и местоположении их
журналов можно почерпнуть из их файлов настроек (обычно, тем не
менее, журналы хранятся в /var/log
).
Новые рапорты, поступающие в системный журнал,
наиболее актуальны, а предыдущие, по мере их устаревания, эту
актуальность утрачивают. Если самые старые данные в журнале не
удалять, файловая система, рано или поздно, окажется
переполненной. В Linux
организован механизм
устаревания журналов, которым занимается
служба logrotate. Запускаясь раз в
день, logrotate проверяет, какие из
файлов следует признать устаревшими. Файл объявляется устаревшим
раз в определённый промежуток времени (например, раз в неделю),
или если он достиг определённого размера.
Процедура устаревания такова. Для каждого журнала,
как, например, для /var/log/syslog/alert
,
logrotate держит в том же каталоге
очередь устаревших копий — файлы с именами
от alert.0.bz2
(предыдущая копия) до
alert.4.bz2
(самая старая копия). Очередь
alert
в нашем примере состоит
из пяти упакованных с помощью bzip2
файлов. В момент устаревания alert.3.bz2
переименовывается в alert.4.bz2
(старые
данные теряются), копия с номером 2
превращается в третью, первая — во вторую, нулевая в первую.
Наконец, сам журнал упаковывается и переименовывается в
alert.0.bz2
, а на его месте заводится новый — пустой. Таким образом, администратор всегда имеет доступ к
свежему журналу и к нескольким его копиям
за определённое время.
Некоторые файлы в /var/log
— нетекстовые, они не являются
полноценными журналами, а представляются собой «свалку событий» для служб авторизации и учёта. Текстовую информацию
о входе пользователей в систему и выходе оттуда можно получить
по команде last, а узнать о тех, кто в данный момент
пользуется системой, помогут команды w и who.
Множество важной информации может дать анализ загруженности системы — в плане процессорного времени и потребления оперативной памяти (ps, top, vmstat), в плане использования дискового пространства (du, df, lsof) и в плане работы сетевых устройств (netstat).