LINUX.ORG.RU

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

 ,


0

3

Debian testing.

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

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

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

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

/lib/systemd/systemd --user

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

(sd-pam)

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

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

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

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

r3lgar ★★★★★
()

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

Отсюда следующее:

  • ты точно не делал enable-linger? loginctl show-user $USER
  • у пользователя точно не оставалось сессий? loginctl list-sessions
intelfx ★★★★★
()
Ответ на: комментарий от r3lgar

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

shell-script ★★★★★
() автор топика
Ответ на: комментарий от intelfx

ты точно не делал enable-linger?

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

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

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

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

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

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

intelfx ★★★★★
()
Ответ на: комментарий от shell-script

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

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

gentoo_root ★★★★★
()
Ответ на: комментарий от shell-script

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

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

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

Кто ж знает. Судя по твоим словам — всё делаешь правильно, и сессий оставаться не должно. Но есть такая вероятность, что после завершения xfce (или что у тебя там) в сессии остались какие-то процессы, которые по умолчанию не убиваются, потому что KillUserProcesses=no.

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от gentoo_root

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

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

intelfx ★★★★★
()

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

shatsky ★★
()
Ответ на: комментарий от shatsky

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

shatsky ★★
()
Ответ на: комментарий от shell-script

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

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

r3lgar ★★★★★
()

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

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

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 ★★★★★
() автор топика
Ответ на: комментарий от shell-script

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

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

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

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

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

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

Спасибо, помогло.

shell-script ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.