Как Вы ударяете мягкого пользователя от своей системы?

Решения, данные до сих пор главным образом, работают в более простом случае: имя хоста непосредственно решает к единственному адресу IPv4. Это могло бы быть единственным случаем, где необходимо разрешить, что имена хостов, но в противном случае ниже обсуждение некоторых случаев, которые Вы, возможно, должны были бы обработать.

Chris Down и Heinzi кратко обсудили случай, где имя хоста решает больше чем к одному IP-адресу. В этом случае (и другие ниже), основные сценарии под предположением, что имя хоста непосредственно решает к единственному IP-адресу, могут повредиться. Ниже, пример с именем хоста, решающим к больше, чем единственный IP-адрес:

$ host www.l.google.com
www.l.google.com has address 209.85.148.147
www.l.google.com has address 209.85.148.103
www.l.google.com has address 209.85.148.99
www.l.google.com has address 209.85.148.106
www.l.google.com has address 209.85.148.105
www.l.google.com has address 209.85.148.104

Но что www.l.google.com? Это - то, где случай псевдонима должен быть представлен. Давайте проверим пример ниже:

$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.105
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104

Так www.google.com непосредственно не решает к IP-адресам, но к псевдониму, который самому решает к нескольким IP-адресам. Для получения дополнительной информации о псевдонимах проверьте здесь. Конечно, случай, где псевдоним имеет единственный IP-адрес, возможен, как показано ниже:

$ host g.www.ms.akadns.net
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.190

Но псевдонимы могут быть объединены в цепочку? Ответ - да:

$ host www.microsoft.com
www.microsoft.com is an alias for toggle.www.ms.akadns.net.
toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net.
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.254

$ host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
www.l.google.com has address 74.125.39.105

Я не нашел примера, где имя хоста решает к псевдониму, который не решает к IP-адресу, но я думаю, что случай мог бы произойти.

Больше, чем несколько IP-адресов и псевдонимов, там некоторые другие особые случаи... что относительно IPv6? Вы могли попробовать:

$ host ipv6.google.com
ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2a00:1450:8007::68

Где имя хоста ipv6.google.com имя хоста только для IPv6. Что относительно имен хостов двойного стека:

$ host www.facebook.com
www.facebook.com has address 66.220.153.15
www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c::

Снова о IPv6, если Вашим хостом является IPv4 только, можно все еще разрешить адреса IPv6 (протестированный на IPv4 только WinXP и с ipv6.google.com, Вы могли попробовать его на Linux). В этом случае разрешение успешно выполняется, но ping перестал работать с неизвестным сообщением об ошибке хоста. Это могло бы быть случаем, где Ваши сценарии перестали работать.

Я надеюсь, что те комментарии были полезны.

67
27.07.2012, 20:28
10 ответов

Существует, вероятно, более легкий путь, но я делаю это:

  1. Посмотрите, кто вошел в Вашу машину - использование who или w:

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. Ищите идентификатор процесса оболочки, с которой подключен их TTY:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
  3. Смех при их предстоящем разъединении (этот шаг является дополнительным, но поощренный),

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
  4. Уничтожьте соответствующий процесс:

    > kill -9 30737
    

Я просто обнаружил, что можно объединить шаги 1 и 2 путем предоставления who -u флаг; PID является числом прочь направо:

> who -u
mmrozek  tty1         Aug 17 10:03 09:01        9250
mmrozek  pts/18       Aug 17 10:09 01:46       19467 (:pts/2:S.0)
143
27.01.2020, 19:31
  • 1
    +1 для "Смеха при их предстоящем разъединении (этот шаг является дополнительным, но поощренный)", –  Josh 09.12.2010, 17:57
  • 2
    kill -9, ха? Вы действительно находитесь в режиме BOFH на этом. –  Jander 18.02.2011, 09:43
  • 3
    @Jander Вы ударяете пользователя от системы; насколько хороший необходимо быть? –  Michael Mrozek♦ 18.02.2011, 09:58
  • 4
    Обычно, я сказал бы, не поощряют людей злоупотреблять kill -9, и запустите с более нежных сигналов вместо этого, но я предполагаю в этом контексте, он не имеет значения так. Я просто оставляю комментарий в случае, если люди пропускают шутку. –  jw013 27.07.2012, 20:41
  • 5
    Существует, также убивают, который в основном автоматизирует целый процесс (даже высмеивающий Вашу жертву, если Вы включаете butthead режим) –  Ulrich Dangel 31.07.2012, 21:21

Как Micheal, на который уже указывают, можно использовать who узнать, кто вошел в систему. Однако, если у них есть несколько процессов, существует более удобный способ, чем уничтожение каждого процесса индивидуально: можно использовать killall -u username уничтожить все процессы тем пользователем.

32
27.01.2020, 19:31
  • 1
    +1. Используя killall также будет немного более соответствующим в графических средах, так как существуют больше, чем просто оболочка для уничтожения. –  John WH Smith 15.10.2014, 22:25
  • 2
    ПРЕДУПРЕЖДЕНИЕ: при использовании этого для пользователя root, Вы уничтожите все корневые процессы, и необходимо будет физически перезапустить сервер. –  Kunok 17.08.2016, 12:36
  • 3
    @Kunok под тем, какой situtation Вы хотели бы, ударяет пользователя root от машины? Как то, если та учетная запись была угнана или что-то? –  Alexej Magura 25.10.2016, 19:42

Выход из системы пользователь 'имя пользователя':

skill -KILL -u username

Посмотрите man skill

13
27.01.2020, 19:31
  • 1
    я думаю, что это уничтожит все процессы тем пользователем, не только их оболочку, но и если это - то, что Вы хотите затем это, определенно более прост –  Michael Mrozek♦ 18.08.2010, 21:35

Другая полезная команда pkill здесь pkill -u username && pkill -9 -u username. killall имейте недостаток, что на Солярисе IIRC это означает что-то совершенно другое - также pkill имейте немного больше расширенных настроек.

11
27.01.2020, 19:31
  • 1
    На Солярисе 'killall' используется сценариями завершения работы для уничтожения (почти) всех процессов на сервере. "Это делает то, что это говорит относительно олова". –  dr-jan 18.08.2010, 16:19
  • 2
    , почему Вы представляете себе SIGKILL так? Запущение программ и приложения не будет даже иметь шанса сохранить данные и вымыться немного. SIGTERM (как используется на завершении работы) или SIGHUP сделает также и является более корректным путем. (Можно все еще отправить SIGKILL после истечения льготного периода.) –  countermode 30.09.2016, 14:34

В первую очередь, это указывает на большую проблему. Если у Вас есть пользователи, которым Вы не доверяете в своей системе, необходимо, вероятно, выровнять ее и переизображение.

Имея это в виду, можно сделать некоторых или все следующее:

# set up the environment
$ BADUSER=foo # where foo is the username in question
$ USERLINE=$(grep '^${BADUSER}:' /etc/passwd)
$ BADUID=$(echo ${USERLINE} | awk -F: '{print $3}')
$ BADGID=$(echo ${USERLINE} | awk -F: '{print $4}')
$ BADHOMEDIR=$(echo ${USERLINE} | awk -F: '{print $6}')
$ BDIR="~/backup/home-backup/"
$ TSTAMP=$(date +%F)
$ TAR_FILENAME="${BADUSER}-${TSTAMP}.tar.bz2"
$ OWNED_FILENAME="${BADUSER}-files-${TSTAMP}.txt"

# disable the user's future login
$ sudo chsh -s /bin/false "${BADUSER}"

# kill all of the user's processes
$ BADPROCS=$(ps auwx | grep '^${BADUSER} ' | awk '{print $2}')
$ sudo kill -9 ${BADPROCS}

# back up/clear the user's home directory
$ mkdir -p ${BDIR}
$ sudo tar -cfj ${BDIR}/${TAR_FILENAME} ${BADHOMEDIR}
$ sudo rm -rf ${BADHOMEDIR}/.* ${BADHOMEDIR}/*

# find all files owned by user
$ sudo find / -user ${BADUSER} > ~/backup/${OWNED_FILENAME}

# remove user
$ sudo userdel ${BADUSER}
3
27.01.2020, 19:31
  • 1
    я не знаю, что согласовал бы с "уровнем это переизображение" это, является Unix не окна... У меня действительно нет этой проблемы... Я просто спрашивал. положительная сторона –  xenoterracide 20.08.2010, 00:17
  • 2
    Плюс, просто потому что необходимо сбросить пользователя с ноги, не обязательно означает, что они ненадежны. Возможно, они просто забыли выходить из системы. –  David Z 21.08.2010, 03:10
  • 3
    xenoterracide: Возможно, я являюсь просто защитным из систем, которые я обслуживаю, но если у меня был пользователь, который я чувствовал себя необходимым, чтобы быть насильственно удаленным из системы под моим управлением, что-то серьезное, должно быть, произошло. –  cjac 21.08.2010, 04:43
  • 4
    1 для чтения вещей в вопрос, которые логически не следуют и перетаскивание Q/A вне темы. –  Wesley 06.08.2011, 21:14
  • 5
    you have users that you don't trust on your system ... Или могло просто случиться так уничтожением того как сообщения другим. В конце концов, кредо системного администратора не, "Лучше бояться, чем быть любимым"? Все шутки в стороне, Machiavelli должен записать книгу O'Reilly. –  Parthian Shot 09.07.2014, 18:27

Некромантия!

Я ценю юмор принятого ответа, но профессионально я не могу защитить его.

Самый корректный метод, о котором я знаю, должен отправить - ПОНУКАЮТ к оболочке для моделирования пользовательского зависания. Можно отправить это в неактивный sshd пользователя для моделирования их потерянного соединения, который инициировал очистку всей среды оболочки (включая дочерние оболочки), или отправьте, это к определенным вложенным оболочкам (скажите, устанавливающие в разъединенном оконечном мультиплексоре, которые мешают Вам размонтировать файловую систему), если Вы хотите быть действительно точными.

Используя write для отправки сообщений для терминального бездействия, имущества перед начальной загрузкой их, являются забавным хобби все же.

23
27.01.2020, 19:31
  • 1
    В то время как псевдовсемогущее чувство, которое сопровождает уничтожение-9, является забавой, это предложение, вероятно, лучше.-Голосование от меня. –  Andrew Falanga 13.08.2014, 20:54
  • 2
    Сделать этот ответ явным, что я сделал, было: echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP(сон дает пользователю шанс сохранить и выйти из системы, но Вы, вероятно, только используете это на пользователе, который забыл выходить из системы так или иначе) –  wkschwartz 15.10.2014, 21:10

По-моему, не действительно полезно использовать killall -u username потому что, если это - тот же пользователь как Вы, Вы сбросите себя с ноги. Так kill процесс будет лучшим решением.

-1
27.01.2020, 19:31
  • 1
    также, если существуют процессы, выполненные тем пользователем, возможно, SSHD, Вы никогда не будете входить в Сервер, вызывать завершение работы SSH. –  Mailo 16.09.2013, 11:45
  • 2
    С какой стати был бы демон SSH (или какой-либо демон) работающий использовать учетные данные пользователя, из которого нужно насильственно выйти система по какой-либо реалистической причине вообще? Кроме того, что этот ответ добавляет, что это не охвачено ответом Michael Mrozek или ответом B Andrew (и возможно другие)? –  a CVn 16.09.2013, 12:49

Я осмотрелся и не нашел ни одного сценария для автоматизации этой задачи.

Итак, на основе предложенных здесь решений я смешал все в интерактивном сценарии Bash , который перечисляет пользователей и сеансы из who -u , чтобы пользователь мог выбрать, что делать.

Затем вы можете:

  • убить все сеансы для пользователя killall -u -HUP
  • убить конкретный сеанс kill

Вся необходимая информация поступает от who -u и затем анализируется с помощью mapfile и awk .

Я добавлю возможность отправки сообщения с помощью write позже (разветвление процесса с задержкой).

Я, вероятно, добавлю возможность убить конкретный сеанс с помощью kill -9 . Но у меня не было проблем с просто kill , и, как указывали другие, следует по возможности избегать kill -9 .

Вы можете проверить код на github, если хотите попробовать, или узнать больше о том, как я делаю это автоматически:

0
27.01.2020, 19:31

Эта команда отлично сработала для графического интерфейса, из которого мой «значимый» отказывается выходить...

leaves@me:/# skill -HUP -u username
  • Я не знаю, что случилось.
  • Должно быть обновление.
  • "Гугл" снова не работал.
  • Это был вирус на InterWebs.

Некоторые отвлекающие маневры на случай, если они вам понадобятся.

-2
27.01.2020, 19:31

So how do you kick [benign] users off your Linux box?

В конечном итоге все сводится к идентификации и завершению тех процессов, которые принадлежат, связаны или порождены пользовательским -идентификатором. Какие бы команды вы ни использовали для достижения конечной цели, это не обязательно имеет значение, пока вы ее достигаете.

В основном два ответа...

Вариант А:вызывает выход из системы указанного пользователя, для которого когда-либо и сколько у него входов в систему. Таким образом, это будет означать идентификацию тех процессов, которые принадлежат пользователю, отслеживаются по uid и классифицируются как часть некоторого процесса входа в систему для данного дистрибутива Linux, который вы используете. Поймите, что есть родительские процессы, такие как SSH или VNC, до «логина» и дочерние процессы, такие как GDM, после «логина». Обычно удаление родительского процесса убивает дочерний процесс, но не всегда. Таким образом, вы захотите убить эти другие процессы, которые, очевидно, больше не нужны после выхода из системы. При выполнении всего этого это будет поддерживать выполнение фоновых заданий... потому что это доброкачественный пользователь, и, возможно, вы просто хотите выйти из него. Насколько я знаю, /usr/bin/wи /usr/bin/whoбудут сообщать, кто прошел через процесс входа в систему.

вариант B:полностью завершить все процессы, принадлежащие определенному uid, что просто означает уничтожение всех и всех процессов, принадлежащих указанному пользователю, это также приведет к их выходу из системы, если они вошли в систему. Это удовлетворит выкинуть их из системы . Это должно быть просто ps -ef | grep <uid>, а затем завершение всех этих процессов любым приемлемым способом.

fwiw в SLES 11 он сообщает

man skill ... These tools are probably obsolete and unportable. The command syntax is poorly defined. Consider using the killall, pkill, and pgrep commands instead.

kill -9ДА!

0
27.01.2020, 19:31

Теги

Похожие вопросы