Linux PAM

Linux-PAM – это бога­тая кол­лек­ция общих моду­лей, кото­рые обес­пе­чи­ва­ют интер­ак­тив­ную аутен­ти­фи­ка­цию поль­зо­ва­те­ля для про­грамм (или служб) в систе­ме Linux.

Linux-PAM – это аббре­ви­а­ту­ра Pluggable Authentication Modules, кото­рая была раз­ра­бо­та­на на осно­ве дизай­на Unix-PAM.

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

Несмот­ря на лежа­щую в осно­ве схе­му аутен­ти­фи­ка­ции, это поз­во­ля­ет раз­ра­бот­чи­кам созда­вать при­ло­же­ния, тре­бу­ю­щие аутентификации.

Linux-PAM (так­же извест­ный как “PAM”) часто под­дер­жи­ва­ет­ся по умол­ча­нию в совре­мен­ных вари­ан­тах Linux.

Самое важ­ное для систем­но­го адми­ни­стра­то­ра – понять, как кон­фи­гу­ра­ци­он­ные фай­лы PAM обес­пе­чи­ва­ют связь меж­ду служ­ба­ми и PAM, кото­рые выпол­ня­ют фак­ти­че­ские дей­ствия по аутентификации.

Вам не нуж­но пости­гать внут­рен­нюю рабо­ту PAM.

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

Непра­виль­ные настрой­ки могут пол­но­стью или частич­но запре­тить доступ к вашей машине.

Интерфейсы Linux-PAM

Четы­ре раз­лич­ные груп­пы управ­ле­ния реша­ют зада­чи аутен­ти­фи­ка­ции PAM по отдельности.

Когда обыч­ный поль­зо­ва­тель запра­ши­ва­ет огра­ни­чен­ный сер­вис, эти груп­пы обра­ба­ты­ва­ют раз­лич­ные части запроса.

  • Account: Этот модуль исполь­зу­ет­ся для опре­де­ле­ния того, явля­ет­ся ли предо­став­лен­ная учет­ная запись дей­стви­тель­ной в теку­щих обсто­я­тель­ствах. В этой кате­го­рии про­ве­ря­ет­ся несколь­ко фак­то­ров, вклю­чая срок дей­ствия учет­ной запи­си, вре­мя суток или нали­чие у поль­зо­ва­те­ля авто­ри­за­ции на соот­вет­ству­ю­щую услугу.
  • Authentication: В этом моду­ле лич­ность поль­зо­ва­те­ля под­твер­жда­ет­ся после про­вер­ки досто­вер­но­сти всей основ­ной инфор­ма­ции. Лич­ность поль­зо­ва­те­ля про­ве­ря­ет­ся путем предо­став­ле­ния логи­на или любой дру­гой части дан­ных, кото­рые долж­ны быть извест­ны толь­ко ему.
  • Password: модуль аутен­ти­фи­ка­ции дол­жен рабо­тать в сотруд­ни­че­стве с этим моду­лем, кото­рый помо­га­ет поль­зо­ва­те­лю в обнов­ле­нии паро­лей. Оба резо­на обес­пе­чи­ва­ют воз­мож­ность при­ме­не­ния надеж­ных паролей.
  • Session: Этот модуль опи­сы­ва­ет дей­ствия, кото­рые долж­ны быть пред­при­ня­ты в нача­ле и в кон­це сеан­сов, и он явля­ет­ся не менее важ­ным из моду­лей, состав­ля­ю­щих поря­док, с помо­щью кото­ро­го общая стра­те­гия PAM выпол­ня­ет постав­лен­ную зада­чу. Сес­сия начи­на­ет­ся, когда чело­век успеш­но про­шел аутентификацию.

Как проверить программу Linux-PAM

При­ло­же­ние или про­грам­ма долж­ны быть “PAM aware”, или спе­ци­аль­но собра­ны и ском­пи­ли­ро­ва­ны для исполь­зо­ва­ния PAM.

Исполь­зуй­те коман­ду “ldd”, что­бы узнать, была ли про­грам­ма собра­на с исполь­зо­ва­ни­ем биб­лио­те­ки PAM, что­бы опре­де­лить, явля­ет­ся ли она “PAM-aware” или нет.

Когда выпол­ня­ет­ся коман­да “ldd /bin/su”, файл “libpam.so” выде­ля­ет­ся во вто­рой стро­ке, под­дер­жи­ва­ю­щей запрос.

Про­вер­ка пока­за­на на скрин­шо­те ниже:

Ката­лог /etc/pam.d/ содер­жит кон­фи­гу­ра­цию для LINUX-PAM.

Перей­ди­те в ката­лог PAM, вве­дя сле­ду­ю­щую коман­ду в тер­ми­на­ле вашей опе­ра­ци­он­ной систе­мы Linux:

Преды­ду­щий скрин пока­зы­ва­ет, что мож­но изу­чить содер­жи­мое, вве­дя коман­ду “ls” в ката­ло­ге PAM.

Как настроить программу Linux-PAM на Ubuntu

Каж­дый вызов моду­ля PAM при­во­дит либо к успе­ху, либо к неудаче.

Резуль­тат обра­ба­ты­ва­ет­ся PAM с помо­щью управ­ля­ю­щих флагов.

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

Име­ет­ся четы­ре пред­ва­ри­тель­но настро­ен­ных управ­ля­ю­щих флага:

  • required: Что­бы аутен­ти­фи­ка­ция про­шла успеш­но, ответ паке­та дол­жен быть успеш­ным. Поль­зо­ва­тель не будет пре­ду­пре­жден о неудач­ной попыт­ке на этом эта­пе, пока все тесты паке­та, исполь­зу­ю­щие этот интер­фейс, не завер­шат свою работу.
  • requisite: Соглас­но аргу­мен­там, если это сло­ма­ет­ся, то сло­ма­ет­ся и все осталь­ное. PAM так­же будет завер­шен, и будет достав­ле­но уве­дом­ле­ние о неудаче.
  • sufficient: Если этот модуль рабо­та­ет успеш­но и все преды­ду­щие необ­хо­ди­мые моду­ли так­же успеш­ны, даль­ней­шие необ­хо­ди­мые моду­ли не вызываются.
  • optional: Ука­зы­ва­ет, что модуль не явля­ет­ся суще­ствен­ным для того, что­бы запрос поль­зо­ва­те­ля на обслу­жи­ва­ние был успеш­ным или неуспеш­ным. Его зна­че­ние учи­ты­ва­ет­ся толь­ко при отсут­ствии убе­ди­тель­ных успе­хов или оши­бок более ран­них или более позд­них модулей.
  • include: При сов­па­де­нии пара­мет­ра соот­вет­ствия каж­дая стро­ка фай­ла кон­фи­гу­ра­ции извле­ка­ет­ся с помо­щью это­го управ­ля­ю­ще­го флага.

Про­сто вве­ди­те сле­ду­ю­щую коман­ду внут­ри ката­ло­га PAM:

vim sshd

Вы може­те уви­деть тер­ми­ны, кото­рые мы опи­са­ли ранее в сле­ду­ю­щем PAM-файле:

При напи­са­нии основ­ной кон­фи­гу­ра­ции сле­ду­ет руко­вод­ство­вать­ся сле­ду­ю­щи­ми общи­ми рекомендациями:

  • Service: реаль­ное имя программы
  • Type: интерфейс/контекст/тип модуля
  • Control-Flag: если модуль не выпол­нит свою зада­чу аутен­ти­фи­ка­ции, флаг управ­ле­ния опре­де­ля­ет, как будет вести себя PAM-API
  • Module: Абсо­лют­ное или отно­си­тель­ное имя пути к фай­лу PAM
  • Module-argument: Пара­мет­ры моду­ля – это спи­сок мар­ке­ров, кото­рые могут быть исполь­зо­ва­ны для вли­я­ния на функ­ци­о­наль­ность модуля

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

Несколь­ко моду­лей огра­ни­чи­ва­ют доступ и предо­став­ля­ют при­ви­ле­гии, но мы можем исполь­зо­вать неве­ро­ят­но адап­ти­ру­е­мый и мно­го­функ­ци­о­наль­ный модуль /lib/security/pam listfile.so.

Перей­ди­те в ката­лог /etc/pam.d/, открой­те файл целе­вой служ­бы и вне­си­те необ­хо­ди­мые изме­не­ния сле­ду­ю­щим образом:

sudo vim /etc/ssh/deniedusers

Ранее тип моду­ля был auth (или context).

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

Сред­ства для раз­ре­ше­ния или запре­та сер­ви­сов на осно­ве любо­го фай­ла предо­став­ля­ет модуль PAM listfile.so. onerr=succeed явля­ет­ся аргу­мен­том моду­ля. item=user – аргу­мент моду­ля, опи­сы­ва­ю­щий содер­жи­мое фай­ла, кото­рый необ­хо­ди­мо проверить.

Опция моду­ля sense=deny ука­зы­ва­ет на дей­ствие, кото­рое будет пред­при­ня­то, если эле­мент нахо­дит­ся в файле.

В про­тив­ном слу­чае запра­ши­ва­ет­ся про­ти­во­по­лож­ное действие.

Файл с одним эле­мен­том в стро­ке зада­ет­ся опци­ей моду­ля file=/etc/ssh/deniedusers.

После вне­се­ния необ­хо­ди­мых раз­ре­ше­ний сохра­ни­те изме­не­ния и закрой­те файл:

  sudo chmod 600 /etc/ssh/denieduser
После вве­де­ния преды­ду­ще­го пра­ви­ла PAM полу­чит ука­за­ние про­ве­рить файл /etc/ssh/deniedusers и запре­тить всем пере­чис­лен­ным поль­зо­ва­те­лям исполь­зо­вать служ­бы SSH и вхо­да в систему.

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

Он обла­да­ет боль­ши­ми воз­мож­но­стя­ми, но он так­же доволь­но сло­жен для пони­ма­ния и эксплуатации.

Для при­ло­же­ний и служб, рабо­та­ю­щих под Linux, PAM пред­ла­га­ет под­держ­ку дина­ми­че­ской аутентификации.

Про­из­во­ди­тель­ность моду­ля мож­но оце­нить с помо­щью любо­го из управ­ля­ю­щих фла­гов, пере­чис­лен­ных в этом руководстве

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