Настройка pam centos 8

Обновлено: 07.07.2024

Библиотеки PAM или Pluggable Authentication Modules - это набор компонентов, предоставляющих программный интерфейс для авторизации пользователей в Linux. Возможно вы уже сталкивались с PAM, когда хотели запустить какую либо графическую программу от имени суперпользователя без использования sudo. Но применение этих библиотек намного шире. Они используются утилитой login и менеджером входа gdm при входе в системе, утилитой ssh при удалённом подключении по SSH, а также другими службами где нужна аутентификация.

Этот механизм появился примерно в 1997 году и с тех пор дошёл до нашего времени практически неизменным. Конечно, были дописаны новые модули, но суть работы осталась такая же как изначально. В этой статье мы рассмотрим как выполняется настройка PAM в Linux.

Как работает PAM в Linux?

Основа безопасности Linux - это аутентификация пользователей и их права. Если бы не было библиотек PAM, то разработчику каждой программы пришлось бы реализовать самому проверку логина и пароля пользователя, а также его прав, может ли он получить доступ к тому или иному ресурсу или нет. Чтобы этого не делать был создан набор библиотек, который поддерживает различные способы аутентификации. Для различных служб нужны разные способы аутентификации, это может быть логин и пароль Unix, открытый ключ, Fingerprint ключа или что-то ещё, и всё это поддерживается в PAM. Давайте рассмотрим как работает PAM на примере авторизации в текстовой консоли Linux с помощью утилиты login:

Теперь рассмотрим как выполняется настройка PAM Linux.

Как настроить PAM в Linux

Все конфигурационные файлы PAM для различных приложений находятся в папке /etc/pam.d. Давайте посмотрим на конфигурационный файл для утилиты sudo:

Каждая строчка файла состоит из нескольких полей:

тип обязательность модуль параметры

  • Первое поле - тип, определяет какой тип запроса к PAM надо выполнить. Существует четыре различных типа запроса auth (проверка данных входа, например, логина и пароля), account (проверка не истёк ли пароль пользователя), password (обновление пароля), и session (обслуживание сессии, например, логгирование и монтирование папок).
  • Второе поле определяет как нужно интерпретировать результат, возвращённый модулем PAM. Доступно тоже несколько возможных вариантов: required (тест должен быть обязательно пройден, но следующие строки тоже будут проверяться), requisite (аналогично required, только если тест не проходит, то следующие строки уже не проверяются), sufficient (противоположно requisite, если тест проходит, то следующие строки уже не проверяются), optional (проваленные тесты игнорируются).
  • Третье и четвертое поле - это название библиотеки модуля и её параметры. Всё это надо выполнить для выполнения теста авторизации или действия.

Кроме того, существуют директивы include, которые включают строки из других файлов так, как будто они были написаны в этом файле. Файл настройки sudo кажется совсем коротким, но в него включаются другие файлы. Давайте посмотрим ещё на файл /etc/pam.d/common-auth:

Здесь можно видеть более расширенный синтаксис параметра обязательности. Он позволяет лучше понять как всё это работает. Давайте его рассмотрим:

[значение1 = действие1 значение2 = действие2 …]

Модули PAM могут возвращать около 30-ти значений и они зависят от выбранного типа (account/auth/session. ), вот они все: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete и default. Последнее, default, означает все поля, которые явно не заданы.

В качестве действия могут быть указанны такие значения:

  • ignore - не влияет на общий код возврата в приложение;
  • bad - расценивать это значение как свидетельство сбоя модуля;
  • die - аналогично bad, только сразу возвращать управление в приложение;
  • ok - значение должно влиять на общий возвращаемый результат, переопределяет общий результат если он раньше был успешен, но не отменяет сбой;
  • done - аналогично ok, только управление сразу возвращается приложению.

Таким образом, те четыре варианта обязательности, которые мы рассматривали выше можно описать вот так:

  • required: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • requisite: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • sufficient: [success=done new_authtok_reqd=done default=ignore]
  • optional: [success=ok new_authtok_reqd=ok default=ignore]
  • success - модуль вернул состояние успешно, поскольку значение ok, это состояние будет учтено если ни один предыдущий модуль не дал сбоя;
  • new_authtok_reqd - модуль сообщает, что пароль пользователя желательно обновить;
  • ignore - модуль просит игнорировать его результат, игнорируем;
  • default - все остальные возвращаемые значение расцениваем как сбой.

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

Чтобы закрепить всё это на практике давайте рассмотрим как запретить авторизацию от имени пользователя losst на компьютере с помощью PAM. Для этого можно воспользоваться модулем /lib/security/pam_listfile.so. Он позволяет ограничить доступ для пользователей на основе файла со списком. Откройте файл /etc/pam.d/sshd и добавьте туда такую строчку:

sudo vi /etc/pam.d/sshd

auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/denyusers

Здесь мы используем тип запроса auth, обязательность required и указанный выше модуль. Вот его опции и их значения:

  • onerr=succeed - если возникает ошибка, доступ разрешить;
  • item=user - указывает, что в файле конфигурации находятся логины пользователей;
  • sense=deny - действие, если логин пользователя найден в файле;
  • file=/etc/denyusers - файл с логинами пользователей, для которых надо запретить доступ.

А если эту строчку закомментировать, то всё снова заработает.

Выводы

В этой статье мы рассмотрели как настроить PAM Linux, как видите, это очень гибкая система, но будьте осторожны. Любая неверная настройка может отнять у вас доступ к собственной системе!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.


Мануал

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

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

Многие современные дистрибутивы Linux по умолчанию поддерживают Linux-PAM (в дальнейшем именуемый «PAM»).

В этой статье мы расскажем, как настроить расширенный PAM в системах Ubuntu и CentOS.

Прежде чем мы продолжим, обратите внимание, что:

Вам не обязательно понимать внутреннюю работу PAM.

PAM может серьезно изменить безопасность вашей системы Linux.

Ошибочная конфигурация может отключить доступ к вашей системе частично или полностью.

Например, случайное удаление файла (ов) конфигурации в /etc/pam.d/* и / или /etc/pam.conf может заблокировать вас в вашей собственной системе!

Как проверить программу на работу с PAM

Чтобы использовать PAM, приложение / программа должны быть «осведомлены о PAM»; он должен быть написан и скомпилирован специально для использования PAM.

Чтобы узнать, является ли программа «осведомленной о PAM» или нет, проверьте, скомпилирована ли она с библиотекой PAM с помощью команды ldd.

Как настроить PAM в Linux

PAM будет игнорировать файл, если каталог существует.

Синтаксис основного файла конфигурации выглядит следующим образом.

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

Мы объясним эти токены в следующих разделах.

  • service: фактическое название приложения.
  • type: тип модуля / контекст / интерфейс.
  • control-flag: указывает на поведение PAM-API, если модуль не может выполнить свою задачу аутентификации.
  • module: абсолютное имя файла или относительный путь PAM.
  • module-argumetns: список токенов для управления поведением модуля.

Синтаксис каждого файла в /etc/pam.d/ аналогичен синтаксису основного файла и состоит из строк следующего вида:

Это пример определения правила (без аргументов модуля), найденного в файле /etc/pam.d/sshd, который запрещает вход без полномочий root при наличии /etc/nologin:

Понимание групп управления PAM и контрольных флагов

Задачи аутентификации PAM разделены на четыре независимые группы управления.

Эти группы управляют различными аспектами типичного запроса пользователя на ограниченный сервис.

Модуль связан с одним из этих типов групп управления:

  • account: предоставлять услуги для проверки учетной записи: срок действия пароля пользователя истек ?; разрешен ли этому пользователю доступ к запрашиваемой услуге?
  • authentication: аутентификация пользователя и настройка учетных данных пользователя.
  • password: отвечают за обновление пользовательских паролей и работают вместе с модулями аутентификации.
  • session: управление действиями, выполненными в начале сеанса и в конце сеанса.

Загружаемые объектные файлы PAM (модули) должны находиться в следующем каталоге: /lib/security / или /lib64/security в зависимости от архитектуры.

Поддерживаемые флаги управления:

Как ограничить root-доступ к SSH-сервису через PAM

В качестве примера, мы настроим, как использовать PAM для отключения доступа пользователя root к системе через SSH и программы входа в систему.

Здесь мы хотим отключить доступ пользователя root к системе, ограничив доступ к службам входа и sshd.

Мы можем использовать модуль /lib/security/pam_listfile.so, который предлагает большую гибкость в ограничении привилегий определенных учетных записей.

Откройте и отредактируйте файл для целевой службы в каталоге /etc/pam.d/, как показано ниже:

Добавьте это правило в оба файла.

Объяснение токенов в приведенном выше правиле:

  • auth: тип модуля (или контекст).
  • required: это управляющий флаг, который означает, что если модуль используется, он должен пройти, иначе общий результат будет неудачным, независимо от состояния других модулей.
  • pam_listfile.so: это модуль, который предоставляет способ запретить или разрешить услуги на основе произвольного файла.
  • onerr = успешно: аргумент модуля.
  • item = user: module аргумент, который указывает, что указано в файле и должно быть проверено.
  • sense = deny: аргумент модуля, который определяет действие, которое нужно предпринять, если оно найдено в файле, если элемент НЕ найден в файле, то запрашивается противоположное действие.
  • file = /etc/ssh/deniedusers: аргумент модуля, который указывает файл, содержащий один элемент в строке.

Далее нам нужно создать файл /etc/ssh/ deniedusers и добавить в него имя root:

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

Отныне вышеприведенное правило будет указывать PAM обратиться к файлу /etc/ssh/deniedusers и запретить доступ к SSH и службам входа для любого пользователя в списке.

Резюме

Это мощный, но очень сложный для понимания и использования.

В этой статье мы объяснили, как настроить расширенные функции PAM в Ubuntu и CentOS

. Если у вас есть какие-либо вопросы или комментарии, используйте форму обратной связи ниже.

date

05.02.2021

directory

CentOS, Linux

comments

комментариев 5

В этой статье мы рассмотрим чистую установку с нуля и в базовую настройку сервера CentOS 8 в минимальной конфигурации.

Что нового в CentOS 8?

Рассмотрим наиболее крупные изменения в релизе CentOS 8:

  • Используется ядро Linux kernel 4.18.
  • Переход с пакетного менеджера yum на dnf. В данный момент yum существует как алиас к dnf.
  • Выполнено разделение основного репозитория на 2 — это BaseOS и AppStream. Сделано это для того, чтобы у пользователя появилась возможность устанавливать разные версии пакетов на сервер. BaseOS работает как и раньше.
  • Обновилось все ПО, в том числе и ядро. В базовом репозитории теперь устанавливается php версии 7.2 (наконец-то).
  • Замена iptables на nftables. Лично я пока еще со вторым не работал напрямую, поэтому не могу сказать, хорошо это или плохо. Единственный момент, если нужно будет переносить какие-то проекты на новую ОС, придется разбираться с правилами, так как есть сервера с чистым iptables.
  • network-skripts не используются по умолчанию для настройки сети, теперь управления сетью возложено на Network Manager.
  • По умолчанию устаналивается веб-интерфейс управления сервером cockpit (удобно для новичков).
  • Для управления контейнерами используется podman (вместо docker и mobdy).
  • Новая версия стека TCP/IP 4.16 с улучшенной производительностью и поддержкой алгоритмов контроля BBR и NV.
  • Новые версии дситрибутивов:

Установка CentOS 8 с помощью ISO-образа

В рекомендуемых требования указано, что для установки CentOS 8 необходимо минимум 10 Гб места на диске и 512 Мб RAM на одно ядро процессора

Перезапустив виртуальную машину с примонтированным образом, я вошел в VNC-консоль. Первым шагом, вам будет предложено выбрать дальнейшие действия. Так как вы выполняем установку, нам интересен первый пункт меню:

Выбрав его, у вас запустится процесс установки:

запуск установки centos 8

В процессе пока все необходимое ПО загружается, можно просто наблюдать за процессом, от вас не требуется никаких действий.

И когда черный экран сменится на интерактивный с логотипом CentOS, пора брать в руки мышь и клавиатуру.

язык установки centos 8

параметры установки centos 8

Для запуска установки, обязательно настроить только один пункт “Installation Destination”, там вы указываете разбивку диска, но я предпочитаю так же, сразу настроить сеть и дату со временем.

выбор часового пояса в centos

В зависимости от вашего часового пояса, вы устанавливаете свои параметры, для меня это Москва.

Чтобы настроить сеть, переходим в пункт “Network & Host Name”

настройка сети при установке centos 8

В поле “Host Name” указываем имя сервера и для конфигурации сетевых интерфейсов нажимаем “Configure”

автоматически подключать сеть

В главной вкладке, нужно отметить галочкой “Automatically connect to this network when it is available”, это нужно для того, чтобы сетевой интерфейс поднимался автоматически.

Перейдите во вкладку “IPv4 Settings” (либо IPv6 если вы используете данный протокол) настройте IP-адрес, маску подсети и шлюз:

задать статический ip адрес при установке centos 8

Для ввода конкретного IP, нужно выбрать метод “Manual” и нажать кнопку “Add”, после чего у вас появится возможность ввести нужные данные. Сохранив все, мы вернемся к начальному окну настроек сети

сеть в centos подключена

Как можно увидеть на скриншоте, IP адрес добавился и сетевой интерфейс уже поднят (состояние Connected).

Следующим шагом мы перейдем к разбивке диска:

настройка диска при установке centos 8

Для примера установки я воспользовался автоматической разбивкой от разработчиков CentOS. Если вы хотите разбить диск по-своему, нужно выбрать пункт “Custom”.

Если контроллер вашего сервера не поддерживает аппаратный RAID, в этом пункте меню вы можете собрать программный RAID из дисков сервера на базе mdadm .

Так как на моей виртуальной машине, ранее была установлена ОС, система установки увидела это. Я удалил разделы предыдущей операционной системы в последующих открывающихся меню:

очистка разделов на диске при установке centos 8

reclaim disk space

Удалить разделы можно кнопкой “Delete all”, после чего потребуется нажать кнопку “Reclaim space”, чтобы размер дискового пространства стал актуальным.

Список пакетов для установки выбирается в пункте Software Selection. Если вы планируете использовать CentOS 8 в качестве сервера, достаточно выбрать Minimal Install, а из добавлений Standard и Guest Agents (если вы ставите гостевую ОС в виртуальной машине).

После вышеописанных действий, можно запускать установку кнопкой “Begin Installation”

начать установку centos 8

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

задать пароль root и создать новаых пользователей при установке centos 8

Нажмите на кнопку “Root Password”, введите и повторите пароль и нажмите “Done”, чтобы вернуться к установке:

пароль root

перезагрузка сервера после устаноовки centos 8

На этом установка CentOS 8 завершена.

Базовая настройка CentOS 8 после установки

Базовая настройка CentOS 8 практически не отличается от настройки CentOS, я делаю базовые настройки одинаковые на всех серверах.

CentOS 8: Установка обновлений и инструментов администратора

Как уже отмечалось ранее, в CentOS 8 на замену yum, пришел dnf.

Dnf – это следующее поколение приложения YUM, менеджер пакетов для дистрибутивов Linux на основе RPM-пакетов. Ранее dnf использовался в дистрибутивах Fedora, а теперь и в CentOS 8.

Первое действие, которое я выполняю на вновь установленном сервере, это обновление системы:

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

Если у вас обнаружатся обновления, обязательно их установите.

Следующим шагом, подключим репозиторий EPEL и установим необходимые утилиты для удобного администарирования сервера:

dnf install epel-release -y
dnf install mc wget screen nano net-tools bind-utils curl lsof vim -y

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

Автоматическое обновление системы я не включаю, так как всегда устанавливаю необходимые обновления вручную. Если вы хотите настроить автоматическое обновление, установите пакет dnf-automatic:

dnf install -y dnf-automatic

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

systemctl list-timers *dnf-*

Отключение SELinux

На начальном этапе я всегда отключаю SELinux (для применения изменения нужно перезагрузить сервер):

Отключение SELinux налету, можно выполнить командой:

Настройка сети в CentOS 8

Так как сеть я настроил на этапе установки системы, настройка ее в данный момент не требуется (подробная статья по настройке сети в CentOS). Хочу лишь сказать, что в CentOS 8, сеть управляется только через Network Manager и утилиту nmcl. Network-scripts по умолчанию не поддерживаются. Если честно, в своей работе я всегда отключал NM и не использовал, для меня это не удобный инструмент, теперь придется разбираться и с ним.

Проверка статуса сети:

Установка и смена hostname

Если вы не задали корректный hostname сервера при установке или просто хотите изменить, это можно выполнить несколькими способами. Измените его в файле /etc/hostname или поменяйте с помощью команды:

hostnamectl set-hostname нужный_хостнейм

Настройка firewalld в CentOS 8

Настройка времени и часового пояса (time-zone)

Чтобы посмотреть текущее время и time-zone, нужно ввести команду date:

Мы указали time-zone при установке самой системы, поэтому у нас время по Москве. Чтобы поменять time-zone, нужно воспользоваться соответствующей командой:

timedatectl set-timezone Europe/Moscow

Где вместо Europe/Moscow вы можете указать свой вариант, например:

Настройка истории команда в bash_history

Для удобного просмотра истории, я всегда добавляю пару строк в .bashrc, чтобы в последствии можно было легко ориентироваться в отчетах.

При настройке по умолчанию, вывод history выглядит следующим образом:

То есть мы видим, что выполнялось на сервере, но не видим время и точную дату, для меня это критично, так как доступ к серверам могут иметь несколько специалистов. Поэтому приведем history к приятному виду:

Откроем файл /root/.bashrc и добавим в него нужные строки:
nano /root/.bashrc

Теперь при проверке history, мы видим точное время выполнения той или иной команды:

Cockpit: Веб-интерфейс управления сервером в CentOS 8

Как мы уже упоминали, в CentOS 8 предустановлен веб-интерфейс управления сервером cockpit. Он также управляется через systemctl. Вы можете запустить его и добавить в автозгрузку:

По–умолчанию веб сервер Cockpit слушает на порту 9090. Добавьте этот порт в разрешенные:

Cockpit - веб интерфейс управления сервером centos 8

С помощью веб-интерфейса Cockpit вы можете смотреть загрузку своего сервера, управлять сетями и хранилищами, контейнерами, смотреть логи.

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

Как ввести в домен Active Directory (AD) линукс CentOS 8 / RHEL 8

Как мне ввести в домен Windows Active Directory ОС линукс на базе CentOS 8 / RHEL 8? В этом руководстве мы обсудим, как использовать систему realmd для присоединения сервера или рабочей станции CentOS 8 / RHEL 8 к домену Active Directory. Realmd предоставляет ясный и простой способ обнаружения доменов идентификации и присоединения к ним для достижения прямой интеграции доменов.

В большинстве корпоративных сред домен Active Directory используется в качестве центрального концентратора для хранения информации о пользователях. В этой интеграции realmd настраивает базовые системные службы Linux, такие как SSSD или Winbind, для подключения к домену. Системы Linux подключены к Active Directory для получения информации о пользователях для запросов аутентификации.

В этом руководстве будет показано, как настроить SSSD для получения информации из доменов в одном лесу ресурсов Active Directory. Если вы работаете с несколькими лесами AD, это руководство может вам не подойти.

Шаг 1. Установите необходимые пакеты

Для интеграции CentOS 8 / RHEL 8 AD требуется ряд пакетов. Установите их в своей системе, выполнив следующие команды:

sudo dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation authselect-compat

Подтвердите запрос на установку.

На новом компьютере с RHEL 8 вам необходимо зарегистрировать его для установки пакетов.

$ sudo subscription-manager attach --auto
Installed Product Current Status:
Product Name: Red Hat Enterprise Linux for x86_64
Status: Subscribed

Шаг 2. Обнаружение домена Active Directory в CentOS 8 / RHEL 8

Перед выполнением интеграции AD убедитесь, что компьютер CentOS / RHEL 8 может разрешить и обнаружить домен AD.

Проверьте настройки DNS.

Убедитесь, что обнаружение домена AD прошло успешно.

Шаг 3. Присоединитесь к Linux-машине CentOS 8 / RHEL 8 в домене Active Directory.

Учетная запись администратора AD требуется для интеграции компьютера CentOS 8 / RHEL 8 с доменом Windows Active Directory.

Убедитесь, что у вас есть имя пользователя и пароль администратора. Затем выполните приведенную ниже команду, чтобы присоединить систему CentOS 8 / RHEL 8 Linux к домену Active Directory.

Замените Administrator на свою учетную запись администратора AD и введите пароль, когда его попросят. Проверьте, чтобы соединение было успешным.

Как только машина будет присоединена, выполните приведенные ниже команды.

sudo authselect select sssd
sudo authselect select sssd with-mkhomedir

Ваш файл конфигурации sssd.conf должен выглядеть, как показано ниже

Когда в конфигурационный файл вносятся изменения, требуется перезапуск службы.

sudo systemctl restart sssd

Статус должен быть запущен.

Если интеграция работает, должна быть возможность получить информацию о пользователе AD.

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

Чтобы разрешить пользователю доступ через SSH и консоль, используйте команду:

$ ream permit -g sysadmins
$ realm permit -g 'Security Users'
$ realm permit 'Domain Users' 'admin users'

Это изменит файл sssd.conf

Если вместо этого вы хотите разрешить доступ всем пользователям, запустите:

$ sudo realm permit --all

Чтобы запретить доступ всем пользователям домена, используйте:

$ sudo realm deny --all

Шаг 5. Настройте доступ Sudo

По умолчанию у пользователей домена не будет разрешения на повышение привилегий до root. Пользователям должен быть предоставлен доступ на основе имен пользователей или групп.

Давайте сначала создадим файл разрешений sudo.

$ sudo vi /etc/sudoers.d/domain_admins

Добавить одного пользователя:

Добавить еще одного пользователя:

Добавить группу с пробелами в имени

Шаг 6. Проверьте доступ по SSH.

Получите доступ к серверу удаленно, поскольку пользователю AD разрешено входить в систему.

$ ssh jmutai@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:wmWcLi/lijm4zWbQ/Uf6uLMYzM7g1AnBwxzooqpB5CU.
ECDSA key fingerprint is MD5:10:0c:cb:22:fd:28:34:c6:3e:d7:68:15:02:f9:b4:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

Читайте также: