Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Другие сервисы. Уровни запуска.

Рубрика: Безопасность -> Основные меры защиты Linux
Метки: |
Среда, 6 мая 2009 г.
Просмотров: 7144

Другие сервисы.

     He все сервисы могут запускаться с помощью суперсервера (xinetd/inetd). Отдельные сервисы запускаются независимо - в так называемом автономном (standalone) режиме. Чтобы включить/выключить такие сервисы, необходимо знать, как работать с инициализационными сценариями сис­темы. В дистрибутивах, использующих систему инициализации System V, всякий сервис контролируется отдельным сценарием. Например, сцена­рий random, скопированный с Mandrake-машины: этот сценарий управ­ляет запуском и остановом генератора случайных чисел.


#!/bin/bash #

# random Script to snapshot random state and reload it at

# boot time. #

# Author: Theodore Ts'o <tytso@mit.edu> #

# chkconfig: 2345 20 80

# description: Saves and restores system entropy pool for

# higher quality \ random number generation.

. /etc/init.d/functions random_seed=/var/lib/random-seed

# Обработка параметров

case "$1" in

start) #start - параметр, использующийся для запуска сервиса if [ -f $random_seed ]; then

cat $random_seed >/dev/urandom else

touch $random_seed fi

action "Initializing random number generator: " /bin/true chmod 600 $random_seed

dd if=/dev/urandom of=$random_seed count=l bs=512 2>/dev/null touch /var/lock/subsys/random

stop)

# stop - параметр для останова сервиса

touch $random_seed

chmod 600 $random_seed

action "Saving random seed: " dd if=/dev/urandom of=$random_seed count=l bs=512 2>/dev/null

rm -f /var/lock/subsys/random

status)

# status - выводит информацию о работе сервиса

if [ -с /dev/random ] ; then

gprintf "The random data source exists\n" else

gprintf "The random data source is missing\n" fi

r f

restart|reload)

# ничего не делает - в перезагрузке нет смысла

г г

*)

# действие по умолчанию - выводим, как нужно использовать

#сценарий

gprintf "Usage: %s\n" "$(basename $0) {start|stop|stat us|restart|reload}"

exit 1 esac

exit 0

     Для запуска сервиса нужно выполнить команду:

# /etc/rc.d/init.d/random start

     Для останова:

# /etc/rc.d/init.d/random stop

     Для вывода статуса сервиса используется команда:

# /etc/rc.d/init.d/random status

     Некоторые дистрибутивы, например, Red Hat, Mandrake и SuSe, подде­рживают команду service, что делает запуск и останов сервиса еще проще, к примеру, команда:

# service nfslock stop

     эквивалентна команде:

# /etc/rc.d/init.d/nfslock stop

     Уровни запуска и инициализационные сценарии.

     Известно, как запускать и останавливать сервисы, однако делать это при каждой загрузке системы довольно утомительно. Linux может запускаться на разных уровнях запуска (к справке, останов системы - это шестой уровень): к примеру, на третьем уровне (многопользовательский режим с поддержкой сети) или на пятом (то же, что и 3-й, но с автоматическим запуском X Window). Перейти на надобный уровень принудительно можно, выполнив команду init n, где n - номер уровня запуска. Номер уровня за­пуска по умолчанию задан в файле /etc/inittab.

     Переходим в каталог /etc/rc.d. В нем подкаталоги rcN.d (N - номер уровня). В каждом каталоге размещены ссылки на сце­нарии запуска сервисов, которые должны запускаться на этом уровне. Сами же сценарии находятся в каталоге /etc/rc.d/init.d/.

     Ссылки на сценарий запуска - это обыкновенные символические ссылки, но с необычными именами. Формат имени ссылки следующий: <S|К>NNимя. Символы S и К определяют, что нужно сделать с сервисом: S - запустить (start), К - убить (kill).

     На шестом уровне (останов системы) все ссылки идут в формате КNNимя. NN - это порядковый номер запуска сервиса. То есть если есть три сервиса с номерами 10, 20 и 30 (ссылки S1Oservice1, S20service2, S30service3), то вначале будет запущен главнейший сервис (service1), позже - второстепенный, а после - третий.

     Чтобы отключить запуск сервиса, нужно прямо удалить соответствующую символическую ссылку. Нужно убедиться, что ссылка удалена из нужного каталога: может случиться, что система запускается на третьем уровне, а ссылка удалена на сервис с пятого уровня (из каталога rс05.d) - но на третьем уровне сервис будет все еще запускаться.

     Такой подход крайне не удобен. Все нужно делать вручную. В дистрибутивах Red Hat и Suse есть утилита chkconfig, позволяющая автоматизировать этот процесс. Параметр -list этой утилиты позволяет вывести все самостоятельные и xinetd-сервисы, которые запускаются на разных уров­нях:

pptpd 0:выкл 1:выкл 2:выкл 3:выкл 4:вкл 5:вкл 6:выкл

privoxy 0:выкл 1:выкл 2:вкл 3:выкл 4:вкл 5:вкл 6:выкл

clamd 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл

freshclam 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл

сервисы на основе xinetd:

  chargen-udp: выкл

  chargen: выкл

  daytime-udp: выкл

  daytime: выкл

  echo-udp: выкл

  echo: выкл

      Вывод программы немножко сокращен, но его хватит, чтобы понять, что выводит программа chkconfig. Вначале выводятся самостоятельные сервисы. В первой колонке указывается название сервиса, после этого список состо­яний сервиса на разных уровнях в формате <Non|off>, где N - это номер уровня, a on или off- признак того, что сервис включен (on) или выключен (off). Сервис clamd выключен на всех уровнях запуска, а сервис pptpd работает только на уровнях 4-6.

     После списка автономных сервисов выводятся Xinetd-сервисы. Тут все просто: сервис либо отключен (off), либо включен (on).

     Для отключения сервиса нужно просто указать его имя и опцию --del:

# chkconfig --del nfs

     Данная команда удалит сервис из списка загрузки, но не остановит его. Для останова нужно дополнительно ввести команду service nfs stop.

     Если дистрибутив использует BSD-систему инициализации, процесс отключения сервисов еще проще. В каталоге /etc/rc.d будет серия файлов - rc.inetl, rc.inet2, например, для инициализации всей сети и Интернета. Чтобы отключить сервис NFS и связанные с ним RPC-cepвисы, нужнозакомментировать строки запуска сервиса NFS в файле /etc/rc.d/rc.inet2:

# Start the NFS server. Note that for this to work correctly

# you'll need to load the knfsd module for kernel NFS server

# support

# You'll also need to set up some shares in /etc/exports.

# Starting the NFS server:

if [ -x /etc/rc.d/rc.nfsd ]; then

/etc/ rc.d/rc.nfsd start fi

# Done starting the NFS server