Я администрирую сетевое окружение, и у меня вчера возникла интересная ситуация. Когда хост требует выключения обычным пользователем, он отказывается сделать это, если другие пользователи вошли в систему локально. Это, однако, не тот случай, когда другие пользователи вошли в систему через SSH. Если один пользователь вошел в систему локально, а один пользователь вошел в систему через SSH, а локально вошедший в систему пользователь попытается завершить работу, то это произойдет даже без предупреждения, а соединение SSH другого пользователя будет внезапно прервано. У меня вопрос, есть ли способ предотвратить это, как это делает политика для локальных пользователей? Я уже заглянул на страницу справочника sshd_config
и не смог найти ничего похожего.
РЕДАКТИРОВАТЬ (Дополнительная информация.):
В сети есть 4 ОС: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 и Ubuntu 11.04. В конкретном случае, о котором я говорю, был пользователь SSH на хосте Mandriva 2009 и локальный пользователь на хосте Mandriva 2011.
Хосты Mandriva 2009 используют среду GNOME 2.28, хосты 2010.2 используют GNOME 2.32, хосты 2011 используют KDE Plasma, а хосты Ubuntu 11.04 используют Unity.
Обновить
Как я отметил в этом вопросе , я изучил polkit
действия в /usr/share/polkit-1/actions/
и нашел (в файле org.freedesktop.consolekit.policy
) вызванное действие, org.freedesktop.consolekit.system.stop-multiple-users
которое выбрасывает сообщение
System policy prevents stopping the system when other users are logged in
Я думаю (из-за org.freedesktop.*
соглашения об именах), что это какой-то сигнал, посылаемый DM через D-BUS. Я думаю, что если я смогу узнать, какой сигнал запускает это polkit
действие, я смогу изменить его поведение. Любые идеи?
Обновление 2
Сегодня я попробовал небольшой эксперимент, и он дал мне очень странные результаты. Я попытался войти через SSH в одну коробку и удостоверился, что никакие другие пользователи не вошли ни на одном VT. Если я выбираю в Shutdown
меню «Действия» GDM, я получаю долгожданное сообщение о политике, информирующее меня о том, что это невозможно сделать без аутентификации, поскольку вошли другие пользователи. Однако , если я использую GDM для локального входа и выбора чтобы закрыть окно из меню GNOME, сеанс SSH, как и прежде, прерывается. Как это возможно? Отличается ли поведение, когда я инициирую shutdown
запрос из GDM, и когда я инициирую его изнутри gnome-session
? Это говорит кому-нибудь что-нибудь, что может помочь мне решить проблему?
Ответы:
Я написал бы небольшую программу, которая проверяла бы любые активные соединения SSH через
netstat
и / илиps
. Брось это вместоshutdown
команды.Если больше никто не пользуется машиной, звоните,
shutdown
когда пользователь пытается. Если кто-то использует машину, просто предупредите пользователя, который далshutdown
команду.Netstat выдаст вам вывод, подобный этому, и его довольно легко найти
.ssh
в выводе.ps
даст вам вывод, как это, но это немного сложнее, потому что вы должны убедиться, что не беспокоиться о исходящих соединениях.Netstat
вероятно, правильный путь.источник
session
цепочку PAM SSH программой, которая обращается к файлу при входе пользователя через SSH и удаляет его при выходе из системы, а затем предлагает предложенной вами программе просто проверить наличие эти файлы. Если это работает, я принимаю ваш ответ.who
вместо. Он показывает, какие пользователи подключены и с какого хоста.who
, не очень много выводится, но большинство других оболочек это дает. (Глупая встроенная система ...) В любом случае, если вы хотите использоватьnetstat
, довольно просто получить нужный вам столбецawk
. Что-тоnetstat -a | awk '{print $4}'
Вы действительно нашли правильную информацию. По крайней мере, он работал под Ubuntu до 13.04.
Следующая запись политики при установке с auth_admin_keep, как показано ниже, предпочла бы отключение:
Но почему-то, начиная с 13.10, эта политика полностью игнорируется. До сих пор никто не мог сказать мне, что бы заменить его (если что-нибудь.)
Обратите внимание, что у вас также есть такая запись для перезапуска (org.freedesktop.consolekit.system.restart-множественные пользователи), которая также должна быть установлена в
auth_admin_keep
.Смотрите этот вопрос / ответ тоже на AskUbuntu: /ubuntu/1190/how-can-i-make-shutdown-not-require-admin-password
источник
Подсчитайте SSH-соединения, а если больше, чем у вас, то выключите:
Что-то вроде этого?
Я, вероятно, вставил бы некоторые переменные чтения, чтобы они подсказали мне, например: «Вы все равно хотите завершить работу?» и «Вы хотите выключить?».
Тогда вы можете использовать его в качестве псевдонима или аналогичного.
источник