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

Денис Колисниченко

В статье рассматривается ограничение доступа с помощью демона tcpd, таблиц доступа пользователей, программы sendmail, а также с помощью сервера ProFTPD. Естественно, существуют многие способы ограничения доступа. Практически у каждой службы есть директивы, запрещающие или разрешающие отдельным пользователям доступ к ней. Например, можно ограничить доступ к серверу Apache или прокси-серверу Squid, а также задать время работы сервиса с помощью суперсервера xinetd, но рассмотрение всего этого выходит за рамки данной статьи.

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

Ограничение доступа к узлу

Демон tcpd аутентифицирует удаленных пользователей и проверяет корректность их запросов. С помощью этого демона можно ограничить запросы с удаленных компьютеров. Файл hosts.allow содержит список хостов, которым разрешено подключаться к вашей системе, а hosts.deny - запрещено. Записи имеют формат


служба:хост.домен
Если вы хотите разрешить или запретить доступ всем, используйте модификатор ALL. Запись ALL:ALL открывает или закрывает доступ к вашей машине всем компьютерам для всех видов сервисов (см. листинг 1).

Листинг 1. Файл /etc/hosts.allow


http:ALL
ftp:ALL
ALL:main.dhsilabs.com

В листинге 1 доступ к http и ftp разрешен всем, доступ ко ВСЕМ сервисам разрешен только компьютеру main.dhsilabs.com.

Обычно настройку доступа рекомендуется проводить следующим образом. Сначала запрещается доступ всем узлам, а потом разрешается отдельным узлам (или подсетям) по мере необходимости.

Ограничения пересылки почты

Для ограничения пересылки почты через ваш сервер используется файл /etc/mail/access (точнее access.db, в который преобразуется файл access). Данный файл используется программой sendmail. В нем вы можете указать узлы, которым разрешено (запрещено) использовать ваш сервер SMTP. Формат этого файла такой:
узел | сеть | пользователь действие
Например:

localhost.localdomain	RELAY
localhost		RELAY
127.0.0.1		OK
spammer@spamworld.com   REJECT
spamworld.com           ERROR:"550 Access denied"
192.168.1		RELAY
host.mydomain.ru	REJECT
mydomain.ru		RELAY
В первой-третьей строках мы разрешаем самим себе использовать SMTP сервер. Затем мы запрещаем пересылку почты пользователю spammer@spamworld.com, а также всему домену spamworld.com. Шестая строка разрешает пересылку почты всей нашей локальной подсети - 192.168.1.*. Последняя строка разрешает использовать сервер SMTP нашему домену, а предпоследняя запрещает использовать наш сервер одному узлу из домена mydomain.ru - host.

Разница между действием OK и RELAY заключается в том, что в первом случае (ОК) пересылка разрешается, даже если другие правила sendmail запретили пересылку почты, например, имя узла не разрешено (при использовании DNS).

Для запрещения пересылки можно просто использовать REJECT. Тогда пользователь увидит сообщение Access denied. Действие ERROR более информативно, так как вы можете указать любое свое сообщение (установить реакцию на ошибку). Действие ERROR можно записать по-другому: ERROR:D.S.N:Message, где D.S.N - это код ошибки в соответствии с RFC 1893.

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

makemap hash /etc/mail/access < /etc/mail/access
Изменения вступят в силу сразу после завершения работы программы makemap. Перезагружать sendmail при этом не нужно!

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

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

  1. access.conf
  2. console.perms
  3. limits.conf

Эти файлы расположены в каталоге /etc/security. Первый файл - это таблица доступа пользователей. Когда кто-то регистрируется в системе (удаленно или локально), в этой таблице система ищет запись, содержащую имя пользователя и предоставляет соответствующий этому пользователю доступ или вообще запрещает его. Если имя пользователя не найдено, но может регистрироваться со всех терминалов (для локальной регистрации) или со всех узлов (для удаленной регистрации).

Формат файла access.conf такой:

Разрешение : Пользователи : Доступ

Первое поле может содержать либо символ "+", который означает, что доступ разрешен, или символ "-", запрещающий доступ. Поле Пользователи содержит список имен пользователей, разделенных пробелами. Можно указывать имя пользователя в формате user@host. Такая запись описывает пользователя user, который регистрируется из машины host. Для обозначения всех пользователей можно указать ALL в качестве значения второго поля.

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

Можно также использовать модификатор EXCEPT (кроме) для исключения некоторых элементов списка (во втором и в третьем полях)

Рассмотрим несколько примеров:


-:ALL EXCEPT den user serge:LOCAL .microsoft.com
+:reboot shutdown:LOCAL
+:root:tty1
-:root:LOCAL
-:den user serge:LOCAL EXCEPT host1

Первое правило запрещает регистрацию всех пользователей, кроме (EXCEPT) den, user, serge из любого хоста локальной сети и домена .microsoft.com. Но эти пользователи могут регистрироваться из любого другого домена.

Второе правило разрешает регистрацию пользователей reboot и shutdown из любого узла локальной сети. Третье правило разрешает регистрацию пользователя root из терминала tty1, а следующее правило - запрещает регистрацию пользователя root по сети (локальной). Последнее правило запрещает регистрацию пользователей den, user, serge из любого узла локальной сети, кроме узла host1.

C точки зрения безопасности приведенные примеры не имеют никакого смысла. Я привел данный пример только в демонстрационных целях. Во-первых, как видно из имен пользователей во втором правиле, первый используется для перезагрузки системы, а второй - для ее останова. То есть при регистрации этих пользователей система, соответственно, или перезагружается или останавливается. Подобное практикуется многими системными администраторами, которых я знаю. Как они говорят, этих пользователей создали для удобства: если нужно перезагрузить машину, нужно просто войти в систему под пользователем reboot. Такое удобство вам может дорого обойтись, если кто-то, узнав ваш пароль, остановит машину во время вашего отсутствия, поэтому не рекомендую вам создавать подобных пользователей вообще. Третье правило разрешает регистрацию пользователя root с терминала tty1 (локальная регистрация), но не запрещает регистрацию со всех остальных. Можно было бы указать правило -:root:ALL перед третьим правилом, но специально для этих целей служит файл /etc/securetty, о котором мы поговорим немного позже.

Теперь перейдем ко второму файлу - console.perms. Этот файл определяет полномочия привилегированных пользователей, которые будут им присвоены при регистрации через консоль системы (локальная регистрация). Скорее всего, вам не нужно будет редактировать этот файл. После внесения изменений в этот файл выполните команду:

pam_console_apply -r

Обычно данная команда помещается в один из инициализационных сценариев системы. Для получения более подробной информации обратитесь к справочной системе.

В файле limits.conf определяются квоты системных ресурсов, например, максимальное число процессов или максимальное время процессора. Прежде чем ограничить пользователей, рассмотрим как можно ограничить самого себя, то есть пользователя root. В файле /etc/securetty, который уже упоминался выше, указываются терминалы и виртуальные консоли, из которых может регистрироваться пользователь root. Я рекомендую вообще запретить регистрацию пользователя root из консоли. Для этого удалите (или закомментируйте) все строки в файле securetty. Если вам будут нужны максимальные привилегии, используйте команду su (super user). После ввода этой команды, программа запросит у вас пароль пользователя root, и если пароль правилен, вы получите привилегии пользователя root.

В файле limits.conf определяются ограничения ресурсов системы для пользователя или группы пользователей. Формат файла такой:


<domain> <type> <item>	<value>

Первое поле (domain) может содержать:

  1. Имя пользователя
  2. Имя группы. Перед именем группы нужно указать символ "@"
  3. Символ "*". Данное ограничение будет ограничением по умолчанию.
Второе поле - это тип ограничения: мягкое (soft) или жесткое (hard). Мягкое ограничение определяет число системных ресурсов, которое пользователь все еще может превысить, жесткое ограничение превысить невозможно. При попытке сделать это, пользователь получит сообщение об ошибке.
Элементом ограничения (item) может быть:
  1. core - ограничение размера файла core (Кб)
  2. data - максимальный размер данных (Кб)
  3. fsize - максимальный размер файла (Кб)
  4. memlock - максимальное заблокированное адресное пространство (Кб)
  5. nofile - максимальное число открытых файлов
  6. stack - максимальный размер стека (Кб)
  7. cpu - максимальное время процессора (минуты)
  8. nproc - максимальное число процессов
  9. as - ограничение адресного пространства
  10. maxlogins - максимальное число одновременных регистраций в системе
  11. locks - максимальное число файлов блокировки
Рассмотрим несколько примеров. Например, нам нужно установить максимальное число процессов для пользователя user. Это можно сделать с помощью таких записей

user soft nproc 50
user hard nproc 60

Первая строка определяет мягкое ограничение (равное 50), а вторая - жесткое.

Допустим, у нас есть группы dialup1 и dialup2. В каждую группу входят 30 пользователей. У нас есть всего 30 входящих линий, поэтому нужно обеспечить одновременную работу не более 15 пользователей из каждой группы. Это делается так:


@dialup1 - maxlogins 14
@dialup2 - maxlogins 14

В первом и втором случае из каждой группы пользователей одновременно работать смогут не более 15 (maxlogins 14 - отсчет начинается с нуля). При регистрации шестнадцатый пользователь увидит сообщение:

Too many logins for 'dialup1'

Ограничение доступа к серверу FTP

При использовании сервера ProFTPD ограничить регистрацию пользователей вы можете с помощью блока Limit, который указывается в файле конфигурации /etc/proftpd.conf. С помощью этого блока можно ограничить и другие действия пользователей, например, запись в каталоги сервера FTP, сохранение (загрузку) файлов. Блок Limit может указываться в блоке Directory или Anonymous. Пример блока Limit:

<Limit LOGIN>
	DenyAll
	AllowUser user1
	MaxClients 1
	Deny from 123.141.181.191
	Deny from 192.168.2.
</Limit>

Первая директива в блоке Limit запрещает регистрацию всем пользователям, вторая разрешает только регистрацию пользователя user1, третья - задает максимальное число клиентов (1). Последние две директивы запрещают регистрацию с узла 123.141.181.191, а также из подсети 192.168.2. Кроме директив DenyAll и AllowUser существуют противоположные им по действию - AllowAll и DenyUser соответственно.


Cчетчик Linux coutner
Hosted by uCoz