Перейти к содержимому

Sd pam linux что это

  • автор:

logind. После logout юзер всё-равно висит в системе.

Система установлена с нуля, нет никаких нестандартных настроек. Только базовый набор и xfce4.

systemd и соответсвенно logind.

Есть в системе юзер user1, я залогинился этим пользователем, через su получил рута, создал пользователя user2, вышел из su, разлогинился из user1.

Логинюсь под вновь созданным user2, получаю рута и пытаюсь удалить user1, но система не даёт, так как имеются какие-то процессы, запущенные от имени этого пользователя. Смотрю по ps и вижу, что есть таких два штуки:

и какая-то мутотень(как вообще понимать, что это за процесс?)

Ну я-то их прибил и пользователя удалил, но осадочек остался. Как и вопросы.

1. Какой логикой обусловлено то, что после того, как пользователь полностью вышел из системы, остались процессы, запущенные от его имени?

2. Где искать документацию по поводу того, как подобные паразитные процессы убивать и где искать документацию по поводу того, как подобное предотвратить?

shell-script ★★★★★
16.03.15 19:50:32 MSK

Как логинился user1? Если в графическую сессию, то как стартует графическая сессия — через dbus или своими путями (как это организовано в Xfce я понятия не имею)? Как стартовали иксы и от какого пользователя?

r3lgar ★★★★★
( 16.03.15 22:29:43 MSK )

systemd —user — это личный инстанс systemd для каждого юзера. Он создаётся logind при первом логине пользователя и убивается при последнем логауте (если только ты не делал для этого пользователя loginctl enable-linger $USER ).

  • ты точно не делал enable-linger? loginctl show-user $USER
  • у пользователя точно не оставалось сессий? loginctl list-sessions

intelfx ★★★★★
( 16.03.15 22:53:22 MSK )
Ответ на: комментарий от r3lgar 16.03.15 22:29:43 MSK

Логинится через lightdm, который запускает иксы и впоследствии xfce. Раньше это делалось через pam и тогдашнюю схему я понимаю. В нововведениях не силён — только пришлось попробовать. Иксы стартуют от рута(т.е. от того, кто запустил lightdm). Это же очевидно.

shell-script ★★★★★
( 16.03.15 23:25:45 MSK ) автор топика
Ответ на: комментарий от intelfx 16.03.15 22:53:22 MSK

Точно. Я только смутно догадываюсь с твоих слов, что эта команда должна означать.

у пользователя точно не оставалось сессий?

В тот момент я не знал, как это проверить(мне бы документацию). Сейчас надо воспроизводить ситуацию заново. Смогу только завтра. Но откуда им было взяться, если я залогинился через lightdm, поработал в системе и вышел штатными средствами(кнопочкой Log Out)?

Касательно документации. Я привык искать её в двух местах — man’ы и /usr/share/doc/. Почему-то в манах на systemd(т.е. как в man systemd, так и в указанных в секции SEE ALSO) нет упоминаний про logind и нет описания схемы работы и взаимодействия всего этого. В /usr/share/doc/ только новости, ченджлоги и какие-то сишные и заголовочные файлики, в которые я заглядывать смысла не вижу. Если я что-то пропустил, прошу ткнуть носом.

shell-script ★★★★★
( 16.03.15 23:33:00 MSK ) автор топика
Ответ на: комментарий от shell-script 16.03.15 23:25:45 MSK

Сейчас тоже через PAM: pam_systemd(8). Здесь ничего нового, systemd (а точнее, logind) встраивается в существующий стек.

intelfx ★★★★★
( 16.03.15 23:53:32 MSK )
Ответ на: комментарий от shell-script 16.03.15 23:33:00 MSK

Но откуда им было взяться, если я залогинился через lightdm, поработал в системе и вышел штатными средствами(кнопочкой Log Out)?

Например, pulseaudio выходит только через 30 секунд после этого (для того, чтобы при повторном логине не перезапускать его), стало быть, после логаута сессия провисит ещё 30 секунд, а если залогиниться в течение 30 секунд тем же пользователем, то будет вообще висеть всё время, пока активна новая сессия.

gentoo_root ★★★★★
( 16.03.15 23:59:03 MSK )
Ответ на: комментарий от shell-script 16.03.15 23:33:00 MSK

Почему-то в манах на systemd нет упоминаний про logind

Так их и быть не должно. Эти два компонента не очень-то и связаны. Собственно, вот: systemd-logind(8).

Но откуда им было взяться, если я залогинился через lightdm, поработал в системе и вышел штатными средствами(кнопочкой Log Out)?

Кто ж знает. Судя по твоим словам — всё делаешь правильно, и сессий оставаться не должно. Но есть такая вероятность, что после завершения xfce (или что у тебя там) в сессии остались какие-то процессы, которые по умолчанию не убиваются, потому что loginctl list-sessions и loginctl session-status НОМЕР-СЕССИИ (или loginctl user-status ИМЯ-ПОЛЬЗОВАТЕЛЯ ) после разлогина.

intelfx ★★★★★
( 17.03.15 00:00:21 MSK )
Последнее исправление: intelfx 17.03.15 00:01:39 MSK (всего исправлений: 1)

Ответ на: комментарий от gentoo_root 16.03.15 23:59:03 MSK

Например, pulseaudio выходит только через 30 секунд после этого (для того, чтобы при повторном логине не перезапускать его),

Хмм? Внезапно. (Впрочем, у меня пульса стартует как сервис в systemd —user, так что я спокойно мог этого и не заметить.)

intelfx ★★★★★
( 17.03.15 00:01:24 MSK )
Ответ на: комментарий от intelfx 17.03.15 00:01:24 MSK
gentoo_root ★★★★★
( 17.03.15 01:58:43 MSK )

PAM. В конфигах логин-софта в /etc/pam.d прописан модуль pam_systemd.so, который подключает логику отслеживания процессов и выставления на устройства. У него была опция kill-session или типа того, там и включалась.

shatsky ★★
( 17.03.15 02:29:42 MSK )
Ответ на: комментарий от shatsky 17.03.15 02:29:42 MSK

Похоже, убрали ее. Теперь в /etc/systemd/logind.conf можно выставить KillUserProcesses=1. Процессы пользователя будут прибиты при завершении всех его сеансов.

shatsky ★★
( 17.03.15 02:33:07 MSK )
Ответ на: комментарий от shell-script 16.03.15 23:25:45 MSK

Как уже сказали ниже — всё нормально. Лично у меня ВР, но у меня не Xfce и не lightdm, потому я не могу сказать, что понимаю суть твоей проблемы полностью. Копай от простого к сложному.

Кстати, такой вопрос: если пользователем был запущен процесс от рута (любым способом, будь то su, sudo etc), процесс демонизировался и пользовательская сессия после этого была корректно или некорректно (например, упал X-сервер, WM или DM) завершена, что будет с этим процессом? Из логики CGROUP оно должно сдохнуть, так как оно является дочерним, но так как процесс запущен с привилегией, может ли быть для него исключение?

r3lgar ★★★★★
( 17.03.15 05:19:36 MSK )

Итак, новые обстоятельства.

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

root@usercomp-n2:~# ps -u -U user2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user2 899 0.0 0.7 35628 3648 ? Ss 00:37 0:00 /lib/systemd/systemd --user user2 900 0.0 0.4 54276 2096 ? S 00:37 0:00 (sd-pam) user2 954 0.0 0.0 19648 244 ? Ss 00:37 0:00 /usr/bin/gpg-agent --sh --daemon --write-env-file /home/user2/.cache/gpg-agent-info 

Хотя я уверен, что gpg-agent’а не видел в прошлый раз. Но не суть. Он есть.

Соответственно loginctl видит сессию user2.

root@usercomp-n2:~# loginctl show-user user2 UID=1001 GID=1001 Name=user2 Timestamp=Tue 2015-03-17 00:37:41 EDT TimestampMonotonic=22531200 RuntimePath=/run/user/1001 Service=user@1001.service Slice=user-1001.slice State=closing IdleHint=no IdleSinceHint=0 IdleSinceHintMonotonic=0 Linger=no 

Правильно ли я понимаю, что State=closing в данном случае означает, что сессия закрывается, но почему-то не закрылась?

Посмотрев конфиги, нашёл KillUserProcesses=no, выставил в yes, убил все процессы пользователя user2, залогинился им заново и снова вышел.

Картина не изменилась, процессы висят.

shell-script ★★★★★
( 17.03.15 08:04:05 MSK ) автор топика
Ответ на: комментарий от shell-script 17.03.15 08:04:05 MSK

Правильно ли я понимаю, что State=closing в данном случае означает, что сессия закрывается

Почти. Это означает, что session leader («главный» процесс, с которого началась сессия) уже завершился, но в сессии ещё остались процессы.

выставил в yes, убил все процессы пользователя user2, залогинился им заново и снова вышел

А кто будет перезапускать logind? systemctl restart systemd-logind (ну или ребут).

intelfx ★★★★★
( 17.03.15 10:28:48 MSK )
Ответ на: комментарий от intelfx 17.03.15 10:28:48 MSK

Я почему-то решил, что подобные параметры как обычно при логине примеряется. Не внимательно читал.

Что такое PAM

Обновлено и опубликовано

Опубликовано: 13.03.2019

набор подключаемых модулей, которые отвечают за аутентификацию в системе. По сути, это API, который операционная система или приложения могут использовать, чтобы отправить запросы на проверку подлинности пользователя. PAM расшифровывается как Pluggable Authentication Modules; перевод на русский — подключаемые модули аутентификации.

PAM разработана компанией Sun Microsystems и была представлена в 1995 году. Раньше в UNIX за авторизацию пользователя в систему отвечала программа login, которая принимала логин и пароль и сравнивала данные с данными в файле /etc/passwd. Теперь же, login не занимается аутентификацией, а просто передает задачу PAM, который с помощью набора своих или дополнительно подключенных алгоритмов проверяет подлинность пользователя и возвращает ответ.

Данный модуль можно встретить во многих операционных системах на основе UNIX, например, Ubuntu, CentOS, Debian, Red Hat, FreeBSD, Gentoo, Mac OS X, Solaris и многих других.

Настройка PAM выполняется в главном конфигурационном файле /etc/pam.conf и подключаемых из каталога /etc/pam.d, название каждого файла в котором точно соответствует названию программы, которая использует модуль pam для аутентификации. В некоторых системах, например, Linux CentOS, файла pam.conf может и не быть — настройка выполняется с помощью файлов в pam.d.

Пример стандартного файла для аутентификации в SSH:

#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare

  • варианты: auth (проверка наличия пользователя в системе), account (контроль распределения ресурсов системы), session (события, которые происходят до того, как произойдет авторизация), password (проверка подлинности).
  • варианты: required (требуется для успешной авторизации и если закончится ошибкой, то в целом pam вернет отказ), requisite (то же самое, что и required с резкой остановкой последующих правил), sufficient (достаточный для проверки подлинности, то есть если завершится успешно, pam вернет успех), optional (дополнительный модуль — результат его работы не влияет на ответ pam; может использоваться для вывода дополнительной информации), include (подключение строк из другого файла), substack (подключение строк из другого файла, но только того же типа, что наша строка).
  • путь может быть полным (от корня /) или относительно каталога /usr/lib/security и/или /usr/lib64/security.
  • для указания дополнительных параметров. Например, некоторым модулям можно передать файлы конфигурации.

Еще немного о PAM на Википедии

Встречается в статьях

Инструкции:

  1. Как настроить почту для корпоративной среды на CentOS 8
  2. Как настроить почту для корпоративной среды на Debian
  3. Как настроить почту для корпоративной среды на Ubuntu Server
  4. Как настроить почту на базе Postfix для корпоративной среды (CentOS 7)
  5. Как установить и использовать сервер хранения секретов Hashicorp Vault
  6. Установка и настройка FTP-сервера vsFTPd на CentOS 7

Посторонним вход воспрещен

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

Пароли и учетные записи были придуманы в эпоху больших мейнфреймов, движения хиппи, войны в Афганистане и больших аналоговых магнитофонов, самым технологичным компонентом из которых были транзисторы. В те времена использование паролей для входа в мейнфрейм выглядело действительно круто. Можно было придумать комбинацию вроде sexhero или iamsuperman и действительно гордиться собой.
Сегодня же пароли выглядят не только архаичной, но и ужасно неудобной вещью, старые понтовые комбинации уже не работают, и вместо них приходится придумывать зубодробительные наборы символов, которые не только нереально запомнить, но и проблематично ввести с первого раза. Мы живем в XXI веке, имеем доступ к огромному количеству гаджетов и технических средств, которые предлагают гораздо более простой и качественный механизм аутентификации, но продолжаем вбивать пароли, матерясь на всю квартиру при каждой неудачной попытке войти в систему. Пора это исправить.
В этой статье я расскажу о том, как раз и навсегда избавиться от паролей и превратить свой комп в по-настоящему технологичное устройство, для входа в которое будет достаточно вставить флешку, взглянуть в веб-камеру или просто положить на стол сотовый телефон.

Высокотехнологичный ключ

Ключ — самый простой и эффективный метод защиты чего бы то ни было. Мы пользуемся ключами ежедневно: для включения двигателя автомобиля, для входа в квартиру, для отпирания ящиков и шкафов. Ключи удобны и просты в изготовлении, благодаря современным программируемым замкам их не страшно потерять. Множество раз человечество пыталось придумать замену ключам, но все попытки провалились (все мы помним, к чему привела идея использовать кодовые замки на подъездных дверях). Почему же мы не используем столь хорошую и проверенную временем технологию для защиты компьютеров?
Современный аналог ключа — USB-флешка. Вне зависимости от того, для каких целей ты обычно используешь флешку, из нее всегда можно сделать полноценный высокотехнологичный ключ, с помощью которого войти в систему будет так же легко, как отпереть дверь в квартиру.
Есть несколько способов сделать это, но наиболее простой и универсальный метод — это использовать PAM-модуль pam_usb, который будет проверять каждую вставленную в комп флешку на предмет ее соответствия указанным требованиям и, в зависимости от результата, разблокировать или блокировать учетную запись пользователя.
Никакой модификации таблицы разделов или информации, хранимой на флешке, при этом не потребуется. Для идентификации «правильной» флешки используется ее серийный номер, модель, производитель, а также набор случайных данных, которые записываются в резервную область флешки и изменяются при каждой удачной аутентификации (если кто-то скопирует твою флешку, но ты успеешь войти в систему раньше злоумышленника, данные будут изменены, и его копия уже не сработает). В случае утери всегда останется возможность войти в систему, используя пароль, и перекодировать pam_usb на новую флешку. Также в качестве ключа можно использовать различные карты памяти (SD, MMC) и другие съемные накопители.
Начать использовать pam_usb довольно просто. Полная настройка системы состоит из пяти шагов.

1. Ставим библиотеку libpam_usb.so и утилиты управления модулем:

$ sudo apt-get install libpam-usb pamusb-tools

2. Берем флешку, которую собираемся использовать в качестве ключа, вставляем ее в USB-порт и выполняем следующую команду:

$ sudo pamusb-conf —add-device имя

Так pam_usb соберет всю необходимую информацию о флешке, добавит в свою базу данных и запишет 2 Кб случайных данных. Для поиска флешки в системе будет использован Udisks (аргумент «имя» здесь используется, чтобы дать флешке произвольное название, а не для указания ее файла-устройства), так что важно, чтобы другие внешние накопители на время работы этой команды были отключены.

3. Теперь даем pam_usb понять, чтобы эта флешка была ассоциирована с нужной нам учетной записью (путь это будет vasya):

$ sudo pamusb-conf —add-user vasya

4. Запускаем проверку правильности собранных данных на случай, если флешка не была корректно идентифицирована. Или мы забыли отсоединить какой-то другой накопитель, и он был использован вместо нужного нам:

$ sudo pamusb-check vasya

5. Добавляем pam_usb в список модулей, необходимых для проведения успешной аутентификации пользователя. В Ubuntu и других дистрибутивах, основанных на Debian, это делается с помощью модификации файла /etc/pam.d/common-auth. В нем необходимо найти строку примерно следующего вида (она может отличаться): auth required pam_unix.so . И прямо перед ней добавить следующую строку: auth sufficient pam_usb.so .
Так мы сообщим PAM, что перед логином любого пользователя нужно отдавать управление модулю pam_usb, который проверит наличие нужной флешки, и лишь в случае неудачи этой операции запрашивать пароль. Поэтому, если ты хочешь впускать пользователя только по флешке, полностью блокируя аккаунт в случае неудачи, слово «sufficient» следует заменить словом «required».
В принципе, всего этого должно быть достаточно для того, чтобы система просто работала (попытайся выйти и войти, чтобы это проверить), однако функциональность pam_usb можно несколько расширить, если использовать демон pamusb-agent.
Задача pamusb-agent — автоматизировать работу по блокированию и разблокированию учетной записи пользователя при извлечении и втыкании флешки в комп. Чтобы агент заработал, необходимо добавить в конфигурационный файл /etc/pamusb.conf следующие строки:

Это рецепт для Gnome. Чтобы использовать pamusb-agent с другими средами, команды «gnome-screensaver-command —lock» и «gnome-screensaver-command —deactivate» необходимо изменить.
Теперь можно запустить pamusb-agent и проверить его работоспособность:

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

$ cd ~/.config/autostart
$ ln -s /usr/bin/pamusb-agent pamusb-agent

Обкатаем пальчики?

Модуль pam_usb удобно использовать в качестве метода защиты ноутбуков, оснащенных кард-ридером. Можно носить небольшую SD-карту в кошельке или внутреннем кармане и втыкать ее в ноутбук, не беспокоясь о том, что она будет мешать (как это происходит в случае с USB-флешкой). Однако этот подход будет выглядеть несколько архаично, если ноутбук уже оснащен сканером для снятия отпечатков пальцев.
Ноутбуки со сканером отпечатков пальцев выпускают многие производители. Как правило, они не намного дороже других сходных по характеристикам моделей, однако их сенсор отпечатков работает только в Windows. Для устранения этого недостатка freedesktop.org запустил проект fprint, в рамках которого разработана открытая реализация библиотеки для распознавания отпечатков и соответствующий PAM-модуль, позволяющий задействовать возможности библиотеки во время логина пользователя и других манипуляций над аккаунтом.
Сегодня libfprint есть в любом дистрибутиве, поэтому установить его можно с помощью любого пакетного менеджера:

$ sudo apt-get install libfprint0 libpam-fprint fprint-demo

Далее сканер можно проверить с помощью специальной демонстрационной программы с графическим интерфейсом:

Если все работает корректно и без сбоев, можно начать настройку аутентификации. Для этого следует запустить программу pam_fprint_enroll, которая позволит сделать эталонный слепок отпечатка пальца, который затем будет использован для идентификации его владельца:

# pam_fprint_enroll –enroll-finger 7

Цифра 7 здесь означает указательный палец правой руки. Система fprint нумерует пальцы слева направо, так что цифрой 1 будет обозначен мизинец левой руки, а 10 — мизинец правой.
Когда слепок будет готов, добавим модуль pam_fprint в стек PAM-модулей всех приложений, для этого открываем файл /etc/pam.d/common-auth, находим все ту же строку «auth required pam_unix.so» и добавляем прямо перед ней строку, отвечающую за загрузку pam_fprint: auth sufficient pam_fprint.so .
При следующем логине все должно заработать.

Добавляем модули pam_usb и pam_fprint в стек PAM

Память на лица

Пальцы — не единственное, что отличает людей друг от друга. У всех нас разные лица, поэтому для идентификации пользователя система может использовать снимок лица, сделанный веб-камерой. Это не особо секьюрно, так как атакующий может показать камере обычную фотографию, отпечатанную на бумаге, но произведет очень сильное впечатление на друзей и знакомых.
В Linux-дистрибутивах нет встроенных средств распознавания лиц, однако их можно добавить с помощью установки комплекта ПО под названием pam-face-authentication, который включает в себя библиотеку, реализующую алгоритм распознавания лиц, PAM-модуль для осуществления аутентификации и приложение для генерирования эталонного снимка.
Все это можно собрать из исходников или же установить из сторонних репозиториев в Ubuntu. Так как проект еще сырой, и пакеты подготовлены не для всех дистрибутивов, мы рассмотрим оба варианта установки. Итак, для установки из исходников нам понадобятся пакеты с компилятором, линковщиком и заголовочными файлами для всех зависимостей. В Ubuntu (да и в других дистрибах) их можно установить, выполнив одну команду:

$ sudo apt-get install build-essential cmake qt4-qmake libx11-dev libcv-dev libcvaux-dev libhighgui4 libhighgui-dev libqt4-dev libpam0g-dev

Далее скачиваем исходники со страницы проекта и распаковываем:

$ cd
$ wget goo.gl/dpD1s
$ tar -xzf pam-face-authentication-0.3.tar.gz

Для сборки используется cmake, поэтому здесь все просто:

$ cd pam-face-authentication-0.3
$ cmake && make
$ sudo make install

Для установки уже прекомпилированного пакета в Ubuntu можно использовать репозиторий antonio.chiurazzi:

$ sudo add-apt-repository ppa:antonio.chiurazzi/ppa
$ sudo apt-get update
$ sudo apt-get install pam-face-authentication

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

Вертим лицом перед камерой, постоянно нажимая кнопку «Capture». Важно сделать хотя бы десяток фотографий, чтобы система научилась распознавать твое лицо под любым углом. Также будет неплохо сделать фотографии при разной освещенности. Не забываем протестировать работу системы.
Теперь добавим модуль pam_face_authentication.so в стек загружаемых PAM-модулей. Для этого открываем файл /etc/pam.d/gdm или /etc/pam.d/kdm (если ты пользуешься KDE) и добавляем в его начало следующую строку: auth sufficient pam_face_authentication.so enableX /
Файл /etc/pam.d/common-auth изменять не надо, так как он используется не только графическими менеджерами входа в систему, но и стандартными консольными /bin/login и /bin/su, а pam_face требует доступа к иксам.
Также необходимо создать профиль для нового PAM-модуля. Открываем (создаем) файл /usr/share/pam-configs/face_authentication следующего содержания:

Name: Manually installed face_authentication profile
Default: yes
Priority: 900
Auth-Type: Primary
Auth:
[success=end default=ignore] pam_face_authentication.so enableX

И активируем его:

$ sudo pam-auth-update —package face_authentication

Ключ из телефона

Сотовый телефон — символ 21-го века. Мы давно привыкли к тому, что его можно использовать не только для звонков, но и для выхода в интернет, игр, прослушивания музыки, просмотра видео и даже оплаты счетов. Но можно ли использовать его как ключ для входа в компьютерную систему?
Конечно, да. Как и USB-флешка, телефон имеет множество признаков, которые делают его уникальным. Это все те же идентификаторы производителя и модели, серийный номер, MAC-адреса, IMEI, в конце концов. Любой из них можно использовать для однозначной идентификации устройства и его владельца, но мы остановимся только на одном из них — MAC-адресе Bluetooth-интерфейса.
Любой, даже очень древний и простой телефон имеет поддержку протокола Bluetooth и, как следствие, уникальный MAC-адрес, который передает в сеть в ответ на любой запрос поиска устройств другим Bluetooth-адаптером. Многие современные ноутбуки имеют на борту такой адаптер, а его внешний USB’шный вариант стоит копейки, так что для нас синий зуб будет идеальным вариантом для настройки беспарольной и беспроводной аутентификации. Зашел в комнату — доступ открыт, вышел — система заблокирована.
Берем телефон, включаем Bluetooth, делаем так, чтобы он был «видим» другим устройствам. Садимся за комп и запускаем утилиту hcitool (входит в пакет bluez-utils) в режиме поиска устройств:

Получаем имя своего устройства и его MAC-адрес, копируем последний в буфер обмена. Устанавливаем пакет libpam_blue (или pam_blue, где как):

$ sudo apt-get install libpam_blue

Создаем файл конфигурации /etc/security/bluesscan.conf и пишем в него следующее:

# Общие настройки
general # Продолжительность сканирования в секундах (от 3 до 15)
timeout = 15;
>

# Настройки пользователей и их устройств
mylogin = name = Имя устройства;
bluemac = MAC-адрес устройства;
>

Сохраняем файл, открываем уже знакомый нам конфиг /etc/pam.d/common-auth и добавляем строку auth sufficient pam_blue.so перед строкой, содержащей «pam_unix.so».
Теперь для входа в систему будет достаточно положить телефон рядом с ноутом и ввести имя. Далее управление будет передано модулю pam_blue, который просканирует сеть, найдет MAC-адрес телефона и впустит пользователя. В противном случае придется ввести пароль.

Выводы

Настроить беспарольную аутентификацию с помощью альтернативных методов в Linux довольно просто. Для этого не нужно быть матерым гиком, уметь писать код или иметь глубокие познания в области безопасности, все делается за несколько минут и работает поразительно эффективно. Ты можешь сказать, что большинство из этих методов потенциально небезопасны и легко обходятся, но перед тем как это сделать, задумайся о том, насколько безопасны обычные пароли.
Безопасность машины, к которой могут получить доступ сторонние люди — чистой воды миф. Обойти стандартную защиту паролем проще простого. Есть огромное количество способов сделать это, и все они известны даже детям. Пароль — это лишь небольшой указательный знак, несущий информацию о том, что у компа есть владелец, и он не хочет видеть непрошенных гостей. Применив методы, описанные в статье, мы не сделаем систему более уязвимой, но сможем сделать свою жизнь проще и удобнее.

Аналог файла /etc/pam.d/common-auth в Gentoo и Mandriva носит имя /etc/pam.d/system-auth, во FreeBSD вместо него используется /etc/pam.d/system. В ArchLinux придется править PAM-конфиги отдельно для каждого приложения.
Еще один способ обезопасить машину от вторжения — удаленно создать файл /etc/nologin с помощью любого мобильного SSH-клиента. Для разблокировки придется войти как root и удалить этот файл.

image

Журнал Хакер, Сентябрь (09) 152
Евгений Зобнин (execbit.ru)
.

  • 1 999 р. за 12 номеров бумажного варианта
  • 1249р. за годовую подписку на iOS/iPad (релиз Android’а скоро!)
  • «Хакер» на Android

Sysadminium

Здесь будет рассмотрена утилита ps, с помощью которой мы можем изучать работающие процессы в системе Linux.

Оглавление скрыть

Утилита ps

Утилита ps показывает срез информации на данный момент времени. То есть некоторые свойства процесса могут изменяться со временем. Например, используемая оперативная память может вырасти или уменьшится. А команда ps покажет занимаемую память процессом в данный момент.

Вы можете почитать официальный мануал по команде ps здесь, или выполните команду man ps .

Просмотр общего списка процессов

Если вызвать ps без аргументов то увидим процессы своего пользователя привязанные к текущему терминалу (TTY):

alex@deb-11:~$ ps PID TTY TIME CMD 3621 pts/0 00:00:00 bash 20010 pts/0 00:00:00 ps

Чтобы посмотреть все процессы в системе используют опции ax, я добавил head чтобы вывести первые 10 процессов, так как их много:

alex@deb-11:~$ ps ax | head PID TTY STAT TIME COMMAND 1 ? Ss 0:04 /lib/systemd/systemd --system --deserialize 33 2 ? S 0:00 [kthreadd] 3 ? I< 0:00 [rcu_gp] 4 ? I< 0:00 [rcu_par_gp] 6 ? I< 0:00 [kworker/0:0H-events_highpri] 8 ? I< 0:00 [kworker/0:1H-events_highpri] 9 ? I< 0:00 [mm_percpu_wq] 10 ? S 0:00 [rcu_tasks_rude_] 11 ? S 0:00 [rcu_tasks_trace]

Давайте разберемся с этими опциями:

  • a — показать все процессы у которых есть управляющий терминал;
  • x — показать все процессы у которых нет управляющего терминала.

Также чтобы вывести все процессы можно воспользоваться опцией -e, при этом вы не увидите состояния процессов:

alex@deb-11:~$ ps -e | head PID TTY TIME CMD 1 ? 00:00:04 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 rcu_gp 4 ? 00:00:00 rcu_par_gp 6 ? 00:00:00 kworker/0:0H-events_highpri 8 ? 00:00:00 kworker/0:1H-events_highpri 9 ? 00:00:00 mm_percpu_wq 10 ? 00:00:00 rcu_tasks_rude_ 11 ? 00:00:00 rcu_tasks_trace

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

alex@deb-11:~$ ps -e u | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33 root 2 0.0 0.0 0 0 ? S сен09 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< сен09 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< сен09 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< сен09 0:00 [kworker/0:0H-events_highpri] root 8 0.0 0.0 0 0 ? I< сен09 0:00 [kworker/0:1H-events_highpri] root 9 0.0 0.0 0 0 ? I< сен09 0:00 [mm_percpu_wq] root 10 0.0 0.0 0 0 ? S сен09 0:00 [rcu_tasks_rude_] root 11 0.0 0.0 0 0 ? S сен09 0:00 [rcu_tasks_trace]

Так как я показываю первые 10 процессов, а они отсортированы по pid, то сюда попали только процессы ядра, которые не имеют управляющего терминала.

Просмотр информации о конкретных процессах

Мы можем смотреть информацию о конкретном процессе, используя опцию -p и номер процесса:

alex@deb-11:~$ ps -p 1 PID TTY TIME CMD 1 ? 00:00:04 systemd alex@deb-11:~$ ps u -p 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33

Можно вывести информацию сразу по нескольким процессам перечислив их через запятую:

alex@deb-11:~$ ps u -p 1,2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33 root 2 0.0 0.0 0 0 ? S сен09 0:00 [kthreadd]

Ещё можно получить информацию по процессам определенного пользователя. Для этого используется опция -u и имя пользователя или его номер:

alex@deb-11:~$ ps u -u www-data USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start alex@deb-11:~$ id www-data uid=33(www-data) gid=33(www-data) группы=33(www-data) alex@deb-11:~$ ps u -u 33 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Также можно вывести информацию определенной группы пользователей. Для этого используем опцию -g:

alex@deb-11:~$ ps u -g www-data USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Чтобы вывести информацию по процессам определенной программы воспользуемся опцией -C и именем программы:

$ ps u -C apache2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 3753 0.0 0.7 11228 7984 ? Ss сен12 0:15 /usr/sbin/apache2 -k start www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Как видно apache2 работает не только от пользователя www-data, один из процессов запущен от root. Это мастер-процесс, который запускает все остальные процессы apache2. Только root процессы могут прослушивать порты с номерами ниже 1024. Веб-сервер обычно работает на порту 80 или 443. Это означает, что он должен запускаться с правами root.

Получение определённой информации

Вы уже познакомились с опцией u, которая показывает больше информации. Но можно самому указать какую информацию вы хотите увидеть используя опцию -o. А с опцией L получим список полей которые можем выводить:

alex@deb-11:~$ ps L | tail user USER userns USERNS util C utsns UTSNS uunit UUNIT vsize VSZ vsz VSZ wchan WCHAN wname WCHAN zone ZONE

Я использовал tail, чтобы вывести всего 10 строк, так как список полей очень велик. Всего существует 175 полей с информацией о процессе, которые вы можете получить.

Например, выведем команду и командную строку:

alex@deb-11:~$ ps -o comm,cmd COMMAND CMD bash -bash ps ps -o comm,cmd

Выведем информацию по памяти:

alex@deb-11:~$ ps -o comm,%mem,rss,vsz COMMAND %MEM RSS VSZ bash 0.7 7192 10328 ps 0.1 1144 9684

Или информацию по процессору:

alex@deb-11:~$ ps -o comm,%cpu,cputime,cpuid COMMAND %CPU TIME CPUID bash 0.0 00:00:00 1 ps 0.0 00:00:00 0

Получим информацию относящуюся к пользователям и идентификаторам:

alex@deb-11:~$ ps -o comm,ppid,pid,user,uid,group,gid COMMAND PPID PID USER UID GROUP GID bash 3620 3621 alex 1000 alex 1000 ps 3621 20046 alex 1000 alex 1000

Вывод информации в виде дерева процессов

Утилита ps может вывести информацию в виде дерева процессов. Для этого нужно использовать опцию f. Но информация в виде дерева выводится только если в выводе присутствуют поля comm или cmd:

alex@deb-11:~$ ps f -o pid,user,comm,cmd PID USER COMMAND CMD 3621 alex bash -bash 20047 alex \_ ps \_ ps f -o pid,user,comm,cmd
alex@deb-11:~$ ps f PID TTY STAT TIME COMMAND 3621 pts/0 Ss 0:00 -bash 20048 pts/0 R+ 0:00 \_ ps f

Комбинирование опций команды ps

Можно комбинировать все эти опции, например вывести в виде дерева процессы определенного пользователя:

alex@deb-11:~$ ps -u alex f -o pid,user,comm PID USER COMMAND 3620 alex sshd 3621 alex \_ bash 20049 alex \_ ps 3609 alex systemd 3610 alex \_ (sd-pam)

Или вывести в виде дерева информацию по программе:

alex@deb-11:~$ ps -C apache2 f -o pid,user,comm PID USER COMMAND 3753 root apache2 19634 www-data \_ apache2 19635 www-data \_ apache2

Выше наглядно видно что процесс apache2 запущенный от пользователя root запускает рабочие процессы от пользователя www-data.

Утилита ps и состояния процессов

Утилита ps может выводить состояния процессов, рассмотрим эти состояния:

  • D — беспробудный сон, ожидая ввод/вывод какого-нибудь устройства;
  • I — бездействующий поток ядра;
  • R — готов выполнятся или уже выполняется процессором;
  • S — сон, ожидает каких-нибудь ресурсов;
  • T — остановлен сигналом;
  • t — остановлен дебагом;
  • X — мертвый, никогда не должно быть видно;
  • Z — зомби, мертвый но не погребенный, то есть не успел освободить pid;
  • — высокий приоритет;
  • N — низкий приоритет;
  • L — страницы процесса заблокированы в памяти;
  • s — лидер сессии;
  • l — многопоточный;
  • + — выполняется на переднем плане, то есть это не фоновый процесс.

Например, пробежимся по некоторым процессам:

alex@deb-11:~$ ps -e -o user,pid,stat,comm USER PID STAT COMMAND root 1 Ss systemd - является лидером сессии root 2 S kthreadd root 5 S< kworker/0:0H - работает с высоким приоритетом *** root 18 S kcompactd0 root 19 SN ksmd - работает с низким приоритетом root 22 S< crypto *** root 159 Ss systemd-journal - является лидером своей сессии root 168 S kauditd root 184 Ss systemd-udevd - является лидером своей сессии root 210 S< edac-poller root 279 Ssl rsyslogd - является лидером сессии и многопоточный *** alex 696 Ss systemd - лидер сессии (это я подключился по ssh) alex 698 S (sd-pam) alex 708 R sshd - процесс выполняется (я работаю по ssh) alex 713 Ss bash *** root 2608 R+ ps - на переднем плане (я запустил ps)

Итог

Мы познакомились с командой ps которой удобно исследователь процессы.

Изучили следующие опции ps:

  • a — все процессы с управляющим терминалом;
  • x — все процессы без управляющего терминала;
  • -e — все процессы;
  • u — больше информации;
  • -p — информация по конкретному процессу;
  • -u — процессы пользователя;
  • -g — процессы группы;
  • -C — процессы приложения;
  • L — доступные поля для формирования настраиваемого вывода;
  • -o — выбираем что выводить в настраиваемом выводе;
  • f — вывод в виде дерева;

А ещё я показал как обозначаются различные состояний процессов в выводе ps.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *