su для пользователя, который больше не существует?

1

У меня интересная ситуация, когда учетная запись пользователя была временно удалена (документы не были вовремя обновлены). Однако, благодаря магии «экрана», его процессы все еще работают.

Я хотел бы иметь возможность подключиться к этим старым сеансам экрана и сохранить некоторые данные. Это возможно? У меня есть полномочия sudo, но я не уверен, как применять их в этом случае.

Обычно я бы сделал:

  1. chmod 777 `tty`
  2. sudo su <user>
  3. screen -x

но пользователь больше не существует в этом случае. Наивное подключение старого идентификатора пользователя не сработало (не то, чтобы я действительно этого ожидал).

Это RedHat Enteprise Linux 5: (2.6.18-53.1.14.el5)

Майкл Х.
источник
2
Я рекомендую $()вместо спины.
Деннис Уильямсон
Деннис: для публикации на ServerFault или вообще? А если серьезно, почему?
Майкл Х.

Ответы:

4

Вы не можете просто временно создать учетную запись пользователя снова, используя тот же UID?

Кейран Холлоуэй
источник
Отличная идея! Если он просто добавляет новые строки в / etc / passwd и / etc / shadow, он должен на мгновение вернуть пользователя и иметь возможность использовать их.
Брэндон Родс
Да, вы должны иметь возможность временно воссоздать пользователя; это не должно включать редактирование каких-либо файлов, вы можете сделать это с помощью useradd.
MarkR
Я немного опасаюсь идти в политику, поскольку я не являюсь системным администратором, и я не удалял этого пользователя, но я могу попробовать это. Спасибо!
Майкл Х.
После того, как политика не разрешилась, я прокрался и попробовал это. Работало отлично, спасибо за отзыв!
Майкл Х.
2

Хорошо, именно поэтому пользователи должны быть отключены, а не удалены. Существуют встроенные опции для passwd для такого рода вещей (и настройки существуют в каждом программном обеспечении централизованного управления пользователями, о котором я знаю).

Но ты здесь не для того, чтобы орать.

Файлы пользователя все еще существуют или были удалены с учетной записью? Экран использует файлы блокировки для восстановления соединения, и если они исчезли, я, честно говоря, не уверен, как восстановить сеансы.

Попробуйте предложение Кейрана о воссоздании UID, если это возможно. Иногда это неосуществимо, особенно в централизованной аутентификации, где идентификаторы хэшируются из другой пользовательской информации, но если вы можете, это было бы здорово.

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

Предполагая, что ваши сеансы экрана выдают вам pts / # терминал, как у меня, может (МОЖЕТ) быть шанс. pt обозначает псевдотерминал, и это своего рода клиент / сервер. Есть pt slave, который является терминалом, который вы вводите, и есть ptmaster, который получает ввод. Существует много рабов (/ dev / pts / *) для одного мастера pt (/ dev / ptmx). Со страницы руководства на ptmx:

   Before  opening  the  pseudo-terminal slave, you must pass the master’s
   file descriptor to grantpt(3) and unlockpt(3).

   Once both the pseudo-terminal master and slave are open, the slave pro‐
   vides  processes  with an interface that is identical to that of a real
   terminal.

Может (возможно!) Быть возможно предположить идентичность терминалов, которые вы хотите предположить (о, черт, может, просто сказать, перехват на этом этапе), используя пользовательскую написанную программу, которая удобно пропускает определенные меры безопасности, такие как предварительно существование файловых дескрипторов, которые вы хотите.

Возможно, на данный момент гораздо меньше работы, чтобы просто признать поражение и потерять данные.

Мэтт Симмонс
источник
Я не системный администратор в этой системе, я просто кто-то с силой sudo. Не то же самое. =) Я попробую различные предложения здесь и перезвоню всем вам. Спасибо!
Майкл Х.
+1 за отключение вместо удаления.
womble
0

Вы пытались, как пользователь root, подключиться, указав имя сокета рабочего экрана для экрана? (Я не пробовал это лично.)

Дэвид
источник
Я не пробовал, извините. Спасибо за предложение, хотя.
Майкл Х.