They both seem to me to create a login session for target-user.
На самом деле это не так.
su
не создает сеанс входа в систему. Он «переключает пользователя» для запуска программы под эгидой другой учетной записи пользователя, добавляя привилегии (привилегии этой учетной записи )к совокупности привилегий, доступных пользователю существующего сеанса входа в систему, который она обкатана.Фактически, программа
login
также не создает сеанс входа в систему . Он ожидает, что сеанс входа в систему с запущенным процессомlogin
, помеченным как процесс лидера сеанса , и подключенным управляющим терминалом, уже настроен тем, кто его вызвал.login target-user
, предполагая, что встроенная -вlogin
команда оболочки C, которая фактически являетсяexec
, co -выбирает существующий уже -установленный -сеанс входа в систему для другая учетная запись пользователя. Это, конечно, влечет за собой риски, которые к этому моменту хорошо известны.Это, конечно, с учетом концепции ядра о сеансе входа в систему , который включает в себя лидера сеанса , управляющий терминал и группы процессов. . Люди из systemd изобрели свою собственную полностью прикладную -концепцию сеанса входа в систему, управляемую
systemd-logind
в сочетании с подключаемыми модулями PAM -. Правила здесь немного отличаются, отчасти потому, что люди systemd испортили их, объединив остановку службы при завершении работы с зависанием сеанса (и все еще должны это исправить ). Ноsu
также не создает сеанс входа в систему такого типа.Дополнительная литература
- Джонатан де Бойн Поллард (2014 ).Не злоупотребляйте su за отказ от привилегий пользователя. Часто задаваемые ответы.
- https://unix.stackexchange.com/a/405780/5132
- Как процессу (sd -pam )удается закрыть непривилегированный сеанс `pam __()`?
- В чем разница между pam _unix и pam _systemd?
- Какая служба systemd запускает текстовую консоль на устройстве фреймбуфера?
- Джонатан де Бойн Поллард (2016 -06 -01 ).Re :systemd завершает фоновые процессы после выхода пользователя из системы. Ошибка Debian #825394.
chroot в смонтированную новую систему:
mkdir /media/tmp/
mount /dev/vg0/vm01.tmp-disk-snapshot /media/tmp/
mount -t proc none /media/tmp/proc
mount --bind /dev /media/tmp/dev
mount -t sysfs sysfs /media/tmp/sys
chroot /media/tmp/ /bin/bash
Делайте свою работу и выходите
systemctl disable postfix
exit
Предположим, что вы смонтировали корень файловой системы в /mnt/serverdisk
,
cd /mnt/serverdisk
rm -v etc/systemd/system/multi-user.target.wants/postfix.service
Этого должно быть достаточно.
Вот демо на CentOS 8, показывающее, что удаление символической ссылки ничего не ломает:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
[root@localhost ~]#
[root@localhost ~]# systemctl get-default
multi-user.target
[root@localhost ~]#
[root@localhost ~]# runlevel
N 3
[root@localhost ~]# systemctl is-enabled postfix
enabled
[root@localhost ~]# rm -v /etc/systemd/system/multi-user.target.wants/postfix.service
rm: remove symbolic link '/etc/systemd/system/multi-user.target.wants/postfix.service'? y
removed '/etc/systemd/system/multi-user.target.wants/postfix.service'
[root@localhost ~]#
[root@localhost ~]# systemctl is-enabled postfix
disabled
[root@localhost ~]#
[root@localhost ~]# systemctl enable postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
[root@localhost ~]#
[root@localhost ~]# systemctl is-enabled postfix
enabled
[root@localhost ~]#