Как выйти из системы пользователя Linux
Обновлено: 21.11.2024
Если вы вошли в удаленную систему Linux через SSH, вам просто нужно использовать команду выхода, чтобы выйти из SSH.
Все в порядке. Но что, если вы хотите отключить другого пользователя от SSH-соединения?
В этом кратком совете я покажу вам, как можно удалить любого пользователя из системы.
Выход пользователя из сеанса SSH
Сначала проверьте список пользователей, выполнивших вход на ваш сервер Linux. Есть разные способы сделать это. Я буду использовать команду who с опцией -u. Этот параметр отображает идентификатор процесса сеанса оболочки входа пользователей.
Вот пример вывода:
Теперь представьте, что я хочу исключить использование пракаша из сеанса SSH. Идентификатор процесса его сеанса оболочки — 32004. Если вы завершите сеанс оболочки входа в систему, пользователь будет отключен.
Для этого вы можете использовать команду kill для отправки сигнала SIGHUP. Этот сигнал используется для сообщения о том, что терминал пользователя отключен. Это также эффективно отключает все процессы в сеансе от управляющего терминала.
Конечно, для выполнения такого действия нужно быть пользователем root или sudo.
Есть несколько вещей, которые вы должны знать и делать.
Отправить сообщение перед завершением сеанса
Рекомендуется сообщить конечному пользователю перед завершением его/ее сеанса. Вы можете использовать команду записи, чтобы быстро отправить сообщение пользователю следующим образом:
Принудительно завершить сеанс SSH, если SIGNHUP не работает
Если сигнал SIGHUP не работает, отправьте сигнал SIGKILL.
Вы также можете выйти из выбранного сеанса пользователя, если у него более одного сеанса SSH
Если один и тот же пользователь вошел в систему с нескольких систем или терминалов, это повлияет только на сеанс, который вы завершаете. Пользователь не будет исключен из всех сеансов.
Это тот случай, когда ваш сеанс SSH зависает по какой-либо причине, например из-за отключения сети. Вы можете закрыть терминал и открыть другой сеанс SSH с нового терминала, но теперь вы видите, что дважды вошли в систему.
В таком случае вы можете закрыть сеанс, который больше не должен быть активным.
Вы можете определить, какого пользователя запустить, по времени входа в систему, которое отображается в выводе команды who. Не волнуйтесь, в худшем случае вы вылетите из текущего сеанса. Но затем вы можете снова войти в систему.
Я надеюсь, что этот краткий совет помог вам выйти из сеанса SSH пользователя в Linux. Ваши вопросы и предложения приветствуются.
В какой-то момент карьеры системного администратора Linux ему потребуется удалить пользователя из системы. Обычно это происходит потому, что пользователь оставил открытую сессию, и вы хотите перезагрузить систему или выполнить какое-либо другое обслуживание. В этом кратком совете мы обсудим действия по принудительному удалению пользователя из системы.
Найти список вошедших в систему пользователей
Вы можете использовать команду who, чтобы найти список пользователей, которые в данный момент вошли в систему. При использовании параметра -u (--users) также будет отображаться PID (идентификатор процесса) сеанса пользовательской оболочки.
Давайте выкинем пользователя "Стейси", чтобы завершить техническое обслуживание.
Предупредить пользователя о предстоящем отключении
Всегда рекомендуется предупреждать пользователей перед перезагрузкой или отключением. Если пользователь делает что-то злонамеренное или каким-то образом злоупотребляет системой, то обязательно удалите его без предупреждения.
Когда мы запустили команду who, она показала нам, к какой точке (псевдотерминалу) подключен пользователь. Мы можем отобразить сообщение на их терминале, используя команду echo и перенаправив его в команду записи.
Вы можете сделать сообщение любым. Базовым этикетом является предоставление пользователю некоторого времени, чтобы сохранить свою работу и выйти из системы.
Завершить процесс оболочки пользователя
Когда вы будете готовы удалить пользователя, отправьте SIGHUP в процесс оболочки пользователя. Сигнал SIGHUP — это тот же сигнал, который процесс получил бы, когда управляющий терминал закрыт.
Число в конце приведенной выше команды — это идентификатор процесса пользовательской оболочки. Мы нашли идентификатор процесса с помощью приведенной выше команды who.
Иногда процесс зависает. В этом случае мы можем отправить SIGKILL (kill -9) на PID. Это именно то, на что это похоже. Это немедленно прервет ЛЮБОЙ процесс, так что будьте осторожны.
Мой предпочтительный способ выгнать пользователя — это использовать pkill для отправки SIGHUP всем процессам пользователей. Команда pkill представляет собой оболочку для kill и позволяет сигнализировать процессу по имени, а не по PID (идентификатору процесса).
Отключить вход пользователей
При желании вы можете временно отключить вход пользователей перед началом обслуживания.
Если вы хотите узнать, как отключить вход пользователей в систему, прочтите статью «Отключение входа пользователей в системы Linux».
Заключение
Теперь вы должны знать, как отключить пользователя от вашей системы Linux. Мы также обсудили правила хорошего этикета системного администратора. Если у вас есть какие-либо комментарии, мы будем рады их услышать.
Как удалить пользователя из командной строки
Команда Linux tee — разделить вывод на экран и в файл
Оставить ответ Отменить ответ
Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.
5 комментариев
Небольшая история. Почти три последних года обучения в старшей школе я провел в лаборатории филогенеза, занимаясь последовательностями ДНК. У меня был свой проект, и в то время в лаборатории был только один студент. Он только что поступил в магистратуру и изучал Linux.
По правде говоря, я был немного более опытен, чем он, с Linux, хотя в то время я не был таким опытным пользователем. В любом случае, дело в том, что в лаборатории было около 6 старых настольных компьютеров, и они только что купили новый сервер для лаборатории и пытались его настроить. Студенту магистратуры понравился GOOEY, и он расшифровывался как Windows, поэтому он установил его на серверный компьютер. Через некоторое время они решили навсегда заменить сервер на Linux, и это, на мой взгляд, единственное разумное, что они могли сделать с сервером.
Я помню, что пытался выполнить некоторые выравнивания ДНК, которые потребляли много оперативной памяти, и поэтому я пытался установить множество программ выравнивания на сервере, чтобы посмотреть, будет ли какая-либо из них запускать мои данные с ограниченными 12 ГБ ОЗУ + 10 ГБ SWAP сервера. Конечно, мне пришлось установить все эти программы под root, так как установить некоторые приложения только под своим пользователем практически невозможно, особенно если вы используете официальные репозитории Debian.
Поэтому я думаю, что мастеру это не понравилось, и через несколько дней он изменил пароль для сервера (в то время была установлена только одна учетная запись, так как в лаборатории было всего несколько студентов и преподавателей, которые могли использовать сервер). , во всяком случае. ).
Недовольный этим, он решил отформатировать все 6 старых ПК в лаборатории. Я использовал такие замечательные схемы разбиения, когда устанавливал Linux для двойной загрузки на некоторых из этих старых ПК. Магистр стер все старые ПК и установил Linux в ОДИН огромный раздел, даже не отделив root от дома. И он установил пароли для всех ПК, чтобы я не мог их использовать! Я попросил своего учителя дать мне доступ к этим компьютерам, и он сказал, чтобы я спросил у магистранта, который, в свою очередь, сказал, что я должен спросить у учителя. Кроме того, студент сказал, что поставил пароли, чтобы защитить эти компьютеры. От кого. Так как в лаборатории работали только мы вдвоем (на самом деле, я был более полный рабочий день, чем он), плюс преподаватели, я сказал, что пароли к тем старым ПК в школе не нужны. все или даже Сервер! Если что-то сломалось, он мог просто спросить меня, не я ли это сломал.
Итак, меня внезапно выгнали со всех этих компьютеров и сервера в филогенетической лаборатории!
Я никогда не чувствовал себя так, как Ричард Столлман, когда он работал в Массачусетском технологическом институте и решил противостоять установке паролей для компьютеров Массачусетского технологического института! Так как моя диссертация была почти завершена, я перестал ходить в лабораторию..
Сегодня я думаю, что мне нужно было загрузиться с живого флеш-накопителя и сбросить эти пароли, чтобы освободить вычислительные ресурсы!
Чтобы обеспечить безопасность и организацию системы с большим количеством пользователей, на компьютерах Unix используется система учетных записей пользователей. Функции учета пользователей Unix обеспечивают основу для анализа и контроля системных ресурсов, не позволяя любому пользователю занимать больше, чем его или ее долю, и предотвращая доступ несанкционированных людей к системе. Каждый пользователь системы Unix должен получить разрешение с помощью некоторого механизма управления доступом.
Вход
Для входа в систему Unix требуются две части информации: имя пользователя и пароль. Когда вы садитесь за сеанс Unix, вам предоставляется приглашение для входа в систему, которое выглядит следующим образом: login: Введите свое имя пользователя в приглашении для входа и нажмите клавишу возврата. Затем система запросит у вас пароль. Когда вы вводите пароль, на экране не отображается то, что вы вводите.
Ваше имя пользователя
Ваше имя пользователя назначается лицом, создавшим вашу учетную запись. В ISU стандартным именем пользователя являются первые четыре буквы вашей фамилии, соединенные с первыми четырьмя буквами вашего имени.
Ваше имя пользователя должно быть уникальным в системе, в которой существует ваша учетная запись, поскольку это средство, с помощью которого вы идентифицируетесь в системе.
Ваш пароль
- Не используйте никакую часть своего имени, имени супруга/супруги, имени вашего ребенка, клички вашего питомца или чьего-либо имени. Также не используйте обратное написание имени.
- Не используйте легко угадываемый номер, например номер телефона, номер социального страхования, адрес, номерной знак и т. д.
- Не используйте слова, которые можно найти в словарях английского или иностранных языков.
- Не используйте одну и ту же букву или простую последовательность клавиш на клавиатуре, например qwerty.
- Используйте сочетание прописных и строчных букв, цифр и управляющих символов.
- Используйте не менее шести символов.
Если у вас есть учетные записи на нескольких компьютерах, используйте разные пароли на каждом компьютере. Не выбирайте пароль, который настолько сложно запомнить, что его придется записать.
Выход
Когда вы будете готовы выйти, введите команду exit Прежде чем выйти из терминала, убедитесь, что вы видите запрос на вход, указывающий на то, что вы успешно вышли из системы. Если вы оставили какие-либо неразрешенные процессы, система Unix потребует, чтобы вы разрешили их, прежде чем позволит вам выйти из системы. Некоторые оболочки распознают другие команды для выхода из системы, такие как «выйти» или даже «пока».
Всегда рекомендуется очищать экран перед выходом из системы, чтобы следующий пользователь не получил информацию о вас, вашей работе или вашей учетной записи. Вы можете ввести команду clear непосредственно перед выходом из системы или нажимать клавишу возврата, пока вся информация не исчезнет с экрана.   
Я гуглил это немного назад и заметил несколько способов, но я предполагаю, что Google не знает всего. Итак, как же вы отключаете пользователей от вашей Linux-системы? также как вы собираетесь видеть, что они вошли в систему в первую очередь? и связанные. работает ли ваш метод, если пользователь вошел в X11 DE (не требование, мне просто любопытно)?
Изменен вопрос, чтобы отразить предположения с учетом принятого ответа. В контексте нарушения безопасности единственный способ выкинуть злоумышленника из вашей системы — быть намного умнее этого пользователя. Умный пользователь не позволит появиться в utmp или быть обнаруженным чем-то тривиальным, как who(1) или w(1) . Единственный надежный способ избавиться от любых потенциальных руткитов, которые могут быть установлены, — это полностью стереть и переустановить систему.
10 ответов 10
Возможно, есть более простой способ, но я делаю так:
Узнайте, кто вошел в систему на вашем компьютере — используйте who или w :
Поиск идентификатора процесса оболочки, к которой подключен их TTY:
Посмеяться над предстоящим отключением (этот шаг необязателен, но приветствуется)
Убить соответствующий процесс:
Я только что обнаружил, что вы можете комбинировать шаги 1 и 2, указав who флаг -u; PID - это число справа:
Обычно я бы посоветовал не поощрять людей злоупотреблять kill -9 и вместо этого начинать с более мягких сигналов, но я полагаю, что в данном контексте это не имеет большого значения. Я просто оставляю комментарий на случай, если люди пропустят шутку.
Также есть режим убийства, который в основном автоматизирует весь процесс (даже высмеивает вашу жертву, если вы включаете режим тупицы)
Как уже указал Майкл, вы можете использовать who, чтобы узнать, кто вошел в систему. Однако, если у них есть несколько процессов, есть более удобный способ, чем убивать каждый процесс по отдельности: вы можете использовать killall -u имя пользователя, чтобы убить все процессы, этого пользователя.
+1. Использование killall также будет несколько более уместным в графических средах, поскольку для уничтожения требуется не только оболочка.
ВНИМАНИЕ! Если вы используете это для пользователя root, вы убьете все процессы root, и вам потребуется физически перезапустить сервер.
@Kunok В какой ситуации вы бы хотели удалить пользователя root с машины? Как если бы этот аккаунт был взломан или что-то в этом роде?
Я ценю юмор принятого ответа, но профессионально я не могу его защищать.
Самый изящный способ, который я знаю, — это отправить оболочке -HUP для имитации зависания пользователя. Вы можете отправить это на бездействующий sshd пользователя, чтобы имитировать потерю соединения, что запускает очистку всей среды оболочки (включая дочерние оболочки), или отправить это в определенные вложенные оболочки (скажем, те, которые установлены внутри отключенного терминального мультиплексора, который мешают вам размонтировать файловую систему), если вы хотите быть очень точным.
Однако использование записи для отправки сообщений окончательно простаивающим pty до их загрузки — забавное хобби.
Хотя ощущение псевдовсемогущества, сопровождающее убийство -9, выглядит забавно, это предложение, вероятно, лучше. Мой голос "за".
Чтобы сделать этот ответ явным, я сделал следующее: echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP (сон дает пользователю возможность сохраниться и выйти из системы, но вы, вероятно, используете это только для пользователя, который все равно забыл выйти из системы)
Выйти из системы пользователя "имя пользователя":
Я думаю, что это убьет все процессы этого пользователя, а не только его оболочку, но если вы этого хотите, то это определенно проще
Другая полезная команда pkill здесь pkill -u имя пользователя && pkill -9 -u имя пользователя . У killall есть недостаток, заключающийся в том, что в Solaris IIRC это означает совершенно другое, а у pkill есть несколько более продвинутые параметры.
В Solaris 'killall' используется сценариями выключения для уничтожения (почти) всех процессов на сервере. "Он делает то, что написано на банке".
Ребята, почему вам так нравится SIGKILL? Запущенные программы и приложения даже не смогут сохранить данные и немного очистить их. SIGTERM (используется при завершении работы) или SIGHUP также подойдут и более изящны. (Вы все еще можете отправить SIGKILL после истечения льготного периода.)
Во-первых, это указывает на более серьезную проблему. Если в вашей системе есть пользователи, которым вы не доверяете, вам, вероятно, следует выровнять ее и переустановить образ.
Имея это в виду, вы можете сделать некоторые или все из следующих действий:
Не знаю, соглашусь ли я с фразой «уровень это переобраз», это Unix, а не Windows. У меня действительно нет этой проблемы. Я просто спросил.
Кроме того, если вам нужно выгнать пользователя, это не обязательно означает, что он не заслуживает доверия. Возможно, они просто забыли выйти из системы.
xenoterracide: Может быть, я просто защищаю системы, которые обслуживаю, но если бы у меня был пользователь, которого, по моему мнению, нужно было принудительно удалить из системы, находящейся под моим контролем, должно было произойти что-то серьезное.
в вашей системе есть пользователи, которым вы не доверяете . Или это может быть просто то, что вы убиваете одного как сообщение для других. В конце концов, разве кредо сисадмина не «Лучше бояться, чем любить»? Если не считать шуток, Макиавелли следует написать книгу об О'Рейли.
Я огляделся и не смог найти ни одного скрипта для автоматизации этой задачи.
Итак, основываясь на предложенных здесь решениях, я смешал все в интерактивном сценарии Bash, в котором перечислены пользователи и сеансы из who -u, чтобы пользователь мог выбрать, что делать.
Тогда вы можете:
- убить все сеансы пользователя killall -u -HUP
- убить конкретную сессию
Вся необходимая информация поступает от who -u, а затем анализируется с помощью mapfile и awk .
Добавлю возможность отправить сообщение с помощью записи позже (разветвление процесса с задержкой).
Возможно, я также добавлю возможность завершать конкретную сессию с помощью команды kill -9. Но у меня не было проблем с просто kill, и, как указывали другие, по возможности следует избегать kill -9.
Вы можете проверить код на github, если хотите попробовать его или узнать больше о том, как я делаю это автоматически:
Так как же выгнать [доброжелательных] пользователей с вашего компьютера с Linux?
В конечном итоге все сводится к выявлению и завершению тех процессов, которые принадлежат, связаны или порождены идентификатором пользователя. Какие бы команды вы ни использовали для достижения конечной цели, это не обязательно имеет значение, пока вы ее достигаете.
В основном два ответа.
Вариант A: вызвать выход из системы указанного пользователя, для которого когда-либо и сколько у него входов в систему. Таким образом, это будет означать идентификацию тех процессов, которые принадлежат пользователю, отслеживаются по uid и классифицируются как часть некоторого процесса входа в систему для данного дистрибутива Linux, который вы используете. Поймите, что есть родительские процессы, такие как SSH или VNC, до «логина» и дочерние процессы, такие как GDM, после «логина». Обычно удаление родительского процесса убивает дочерний процесс, но не всегда. Таким образом, вы захотите убить эти другие процессы, которые, очевидно, больше не нужны после выхода из системы. При выполнении всего этого фоновые задания будут выполняться. потому что это доброкачественный пользователь, и, возможно, вы просто хотите выйти из него. Насколько я знаю, /usr/bin/w и /usr/bin/who сообщат, кто прошел через процесс входа в систему.
Вариант B: полностью завершить все процессы, принадлежащие определенному uid, что просто означает уничтожение всех и всех процессов, принадлежащих указанному пользователю, это также приведет к их выходу из системы, если они вошли в систему. Это удовлетворит kick их из системы. Это должно быть только простое ps -ef | grep, а затем завершить все эти процессы любым приемлемым способом.
fwiw в SLES 11 сообщает
мужской навык . Эти инструменты, вероятно, устарели и непереносимы. Синтаксис команды плохо определен. Попробуйте вместо этого использовать команды killall, pkill и pgrep.
Читайте также: