Чи можна дізнатися, які інші користувачі перейшли на цього користувача?


4

У нас є система, в якій ми використовуємо різні системні облікові записи для управління різними середовищами. Мій стандартний потік виглядає наступним чином:

$ ssh server.example.com
robin@server$ sudo su - env1-controller
env1-controller@server$ deploy

Тим не менш, може бути кілька людей, які роблять те ж саме, переходячи на env1-controller користувача. І є потенціал для нас наступати на ноги один одного, намагаючись одночасно змінити середовище.

Чи можна перевірити, чи зараз хтось інший використовує env1-controller користувач?


2
Якщо кожен користується sudo Ви можете розглянути можливість використання чогось по лініях ps -ax | grep sudo , щоб дізнатися, хто зараз використовує sudo або env1-controller і шляхом запуску who Ви можете отримати уявлення про те, хто насправді працює.
Seth

завдяки @Seth, ps -ax | grep "sudo su - env1-controller" працює відмінно, щоб отримати PID. Не могли б ви описати, як я можу це зробити who щоб перевірити користувача, який його використовує?
Robin Winslow

Відповіді:


2

Якщо кожен використовує sudo, ви можете розглянути можливість використання чогось уздовж ліній ps -ax | grep sudo , щоб дізнатися, хто зараз використовує sudo або env1-controller і шляхом запуску who Ви можете отримати уявлення про те, хто насправді працює.

Як приклад на моїй машині з моєї машини виводиться вихід ps -ax | grep sudo хотів би цього:

24324 pts/0    S      0:00 sudo su <user>

Перший запис - PID, другий - TTY, третій час і остання команда. Якщо ви використовуєте who Ви отримуєте список користувачів, які в даний час увійшли в систему, і які вони використовують. Це може виглядати так:

<user>     pts/0        Nov 23 10:24 (<IP>)
<user>     pts/2        Nov 23 10:25 (<IP>)

Так через цю комбінацію ви знаєте, що sudo підключається до будь-якого користувача pts/0. Це було б ручним способом перевірки.

Я думаю, що можна об'єднати цю інформацію, але мої навички Баш не достатньо для того, щоб просто розмістити відповідь про те, як це зробити.

Остаточне рішення, яке використовував оригінальний автор питання:

Насправді, я використав grep, щоб витягти точні числа TTY, ps -aux | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+', а потім використовуйте ls -l /dev/pts/${id} щоб визначити, хто володіє TTY.

Це:

  • Використовуйте ps -aux щоб отримати список всіх запущених процесів, включаючи деяку додаткову інформацію.
  • grep всі рядки, які не містять grep щоб виключити grep з виходу.
  • grep рядок для всіх процесів, що містять sudo.
  • grep текст pts/<number> з цих ліній.
  • grep тільки номер.
  • Використовуйте ls перевірити, хто є власником цього TTY.

Використовуючи цю інформацію, ви можете спробувати зробити це (якщо ви хочете використовувати кого):

who | grep $(ps -ax | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+')

Але це буде працювати тільки до тих пір, поки є єдиний результат, тому що вихід з $() буде мати кілька рядків. Як ви бачите, я пропускаю u від ps як додана інформація не потрібна для роботи базового сценарію.


1
Насправді, я використав grep, щоб витягти точні числа TTY, ps -aux | grep -v grep | grep "sudo su - хто я " | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+', а потім використовуйте ls -l /dev/pts/${id} щоб визначити, хто володіє TTY.
Robin Winslow

Дякуємо за додавання. Я включив пояснення вашого рішення у відповідь, якщо ви не заперечуєте.
Seth

1
Ах так, хороші речі. Причина, по якій я перевіряю вміст /dev/pts/ замість того, щоб дивитися на вихід who є те, що іноді приєднаний TTY насправді не є прямим сеансом входу - іноді це a tmux або screen сесії. У цьому випадку ви не знайдете TTY на виході who, але файл все одно залишиться /dev/pts що належать користувачеві, який володіє сеансом.
Robin Winslow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.