Как узнать, кто зарегистрирован как root?

Недавно я спросил: «Как мне регистрировать зарегистрированных пользователей?» Команда who служит для этой цели. Но как я могу найти, кто зарегистрирован как root? Будет ли имя пользователя «root»?

7
задан 29 November 2017 в 19:07

12 ответов

Я полагаю, что учетная запись root не включена (как по умолчанию), поэтому для пользователя может быть назначен только sudo -i. Мое предложение - это следующий скрипт, который использует команды who -u и pgrep -at <tty parsed from who -u>, чтобы найти, какой user, на котором tty выполнил команду sudo -i.

#!/bin/bash
LANG=C who -u | while read -a line; do  # Output the whole line: echo "${line[@]}"
        IS_ROOT="$(pgrep -at "${line[1]}" | grep 'sudo -i')"
        [[ ! -z "${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "${line[0]}" "${line[5]}" "${line[4]}" "${line[1]}" "$IS_ROOT"
done | sed '/grep sudo -i/d' | sort -k13 -k6

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale. Цикл while будет do командами, пока на stdin будет поток. Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u. Вот простой скрипт, который выведет «таблицу» с отношениями между элементами массива и их значениями:
line=( $(LANG=C who -u | head -1) ); for i in {0..6}; do printf '%-11s' "${line[$i]}"; done; echo; for i in {0..6}; do printf '${line[%s]} ' "$i"; done; echo

guest      tty7       2018-01-03 09:52      old        1847       (:0)
${line[0]} ${line[1]} ${line[2]} ${line[3]} ${line[4]} ${line[5]} ${line[6]}
Результат команды pgrep -at "${line[1]}" | grep 'sudo -i' будет подписан как значение $() для переменной $IS_ROOT. Команда pgrep -at "TTY" выведет PID всех процессов на определенную TTY-опцию -t --terminal, а опция -a --list-name перечислит имена PID и процессы. Выражение [[ ! -z "${IS_ROOT}" ]] && можно прочитать следующим образом: если [ переменная "${IS_ROOT}" не ! пуста -z, то && или ||. Команда printf используется для форматирования вывода (ссылки):
printf '%s some text %s` "$var1" "$var2"
Наконец, sed '/grep sudo -i/d' удалит автоматическую строку (содержащую нашу команду grep 'sudo -i') из вывода while и sort -k13 -k6, сортирует выводить по столбцам 13 и 6.

Вызвать скрипт find-root, сделать его исполняемым (chmod +x find-root) и выполнить его.

Вот простой вывод:

$ ./find-root
spas    ( PID 14035  at 12:54 on TTY pts/20 ) is ROOT: 23518 sudo -i
spas    ( PID 14035  at 12:36 on TTY pts/4  ) is ROOT: 23589 sudo -i
guest   ( PID 23575  at 15:00 on TTY pts/4  ) is ROOT: 23589 sudo -i
guest   ( PID 24321  at 15:30 on TTY tty1   ) is ROOT: 24386 sudo -i

Вот демонстрация (в сеансе mutt) работы скрипта ( root ):

Поместите скрипт в /usr/local/bin, чтобы сделать его доступным как команда оболочки. Для этого скопируйте и выполните следующие строки в виде одной команды:

cat << EOF | sudo tee /usr/local/bin/find-root && sudo chmod +x /usr/local/bin/find-root
#!/bin/bash
LANG=C who -u | while read -a line; do 
        IS_ROOT="\$(pgrep -at "\${line[1]}" | grep 'sudo -i')"
        [[ ! -z "\${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "\${line[0]}" "\${line[5]}" "\${line[4]}" "\${line[1]}" "\$IS_ROOT"
done | sed '/grep sudo -i/d' | sort -k13 -k6
EOF

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будут do команды, пока есть поток

Этот вывод будет передан по каналу | в stdin команды tee (исполняется sudo), который будет записывать файл /usr/local/bin/find-root.

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будет do команды, в то время как на stdin есть поток.

Команда read -a будет читать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» "$line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

6
ответ дан 22 May 2018 в 15:50
  • 1
    Поскольку вы используете bash, вы можете использовать read -a для назначения массиву и избегать использования awk для синтаксического анализа или просто назначить тонны переменных с помощью read. Просто предложение. Хороший сценарий – Sergiy Kolodyazhnyy 28 November 2017 в 22:15
  • 2
    Спасибо за совет @ Сергий Колодяжный! Я переписал ответ. – pa4080 29 November 2017 в 14:26
  • 3
    @ pa3080 Awesome :) Выглядит неплохо – Sergiy Kolodyazhnyy 29 November 2017 в 14:33

Я полагаю, что учетная запись root не включена (как по умолчанию), поэтому для пользователя может быть назначен только sudo -i. Мое предложение - это следующий скрипт, который использует команды who -u и pgrep -at <tty parsed from who -u>, чтобы найти, какой user, на котором tty выполнил команду sudo -i.

#!/bin/bash LANG=C who -u | while read -a line; do # Output the whole line: echo "${line[@]}" IS_ROOT="$(pgrep -at "${line[1]}" | grep 'sudo -i')" [[ ! -z "${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "${line[0]}" "${line[5]}" "${line[4]}" "${line[1]}" "$IS_ROOT" done | sed '/grep sudo -i/d' | sort -k13 -k6

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale. Цикл while будет do командами, пока на stdin будет поток. Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u. Вот простой скрипт, который выведет «таблицу» с отношениями между элементами массива и их значениями: line=( $(LANG=C who -u | head -1) ); for i in {0..6}; do printf '%-11s' "${line[$i]}"; done; echo; for i in {0..6}; do printf '${line[%s]} ' "$i"; done; echo guest tty7 2018-01-03 09:52 old 1847 (:0) ${line[0]} ${line[1]} ${line[2]} ${line[3]} ${line[4]} ${line[5]} ${line[6]} Результат команды pgrep -at "${line[1]}" | grep 'sudo -i' будет подписан как значение $() для переменной $IS_ROOT. Команда pgrep -at "TTY" выведет PID всех процессов на определенную TTY-опцию -t --terminal, а опция -a --list-name перечислит имена PID и процессы. Выражение [[ ! -z "${IS_ROOT}" ]] && можно прочитать следующим образом: если [ переменная "${IS_ROOT}" не ! пуста -z, то && или ||. Команда printf используется для форматирования вывода (ссылки): printf '%s some text %s` "$var1" "$var2" Наконец, sed '/grep sudo -i/d' удалит автоматическую строку (содержащую нашу команду grep 'sudo -i') из вывода while и sort -k13 -k6, сортирует выводить по столбцам 13 и 6.

Вызвать скрипт find-root, сделать его исполняемым (chmod +x find-root) и выполнить его.

Вот простой вывод:

$ ./find-root spas ( PID 14035 at 12:54 on TTY pts/20 ) is ROOT: 23518 sudo -i spas ( PID 14035 at 12:36 on TTY pts/4 ) is ROOT: 23589 sudo -i guest ( PID 23575 at 15:00 on TTY pts/4 ) is ROOT: 23589 sudo -i guest ( PID 24321 at 15:30 on TTY tty1 ) is ROOT: 24386 sudo -i

Вот демонстрация (в сеансе mutt) работы скрипта ( root ):

Поместите скрипт в /usr/local/bin, чтобы сделать его доступным как команда оболочки. Для этого скопируйте и выполните следующие строки в виде одной команды:

cat << EOF | sudo tee /usr/local/bin/find-root && sudo chmod +x /usr/local/bin/find-root #!/bin/bash LANG=C who -u | while read -a line; do IS_ROOT="\$(pgrep -at "\${line[1]}" | grep 'sudo -i')" [[ ! -z "\${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "\${line[0]}" "\${line[5]}" "\${line[4]}" "\${line[1]}" "\$IS_ROOT" done | sed '/grep sudo -i/d' | sort -k13 -k6 EOF

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будут do команды, пока есть поток

Этот вывод будет передан по каналу | в stdin команды tee (исполняется sudo), который будет записывать файл /usr/local/bin/find-root.

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будет do команды, в то время как на stdin есть поток.

Команда read -a будет читать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» "$line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

6
ответ дан 18 July 2018 в 02:26

Я полагаю, что учетная запись root не включена (как по умолчанию), поэтому для пользователя может быть назначен только sudo -i. Мое предложение - это следующий скрипт, который использует команды who -u и pgrep -at <tty parsed from who -u>, чтобы найти, какой user, на котором tty выполнил команду sudo -i.

#!/bin/bash LANG=C who -u | while read -a line; do # Output the whole line: echo "${line[@]}" IS_ROOT="$(pgrep -at "${line[1]}" | grep 'sudo -i')" [[ ! -z "${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "${line[0]}" "${line[5]}" "${line[4]}" "${line[1]}" "$IS_ROOT" done | sed '/grep sudo -i/d' | sort -k13 -k6

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale. Цикл while будет do командами, пока на stdin будет поток. Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u. Вот простой скрипт, который выведет «таблицу» с отношениями между элементами массива и их значениями: line=( $(LANG=C who -u | head -1) ); for i in {0..6}; do printf '%-11s' "${line[$i]}"; done; echo; for i in {0..6}; do printf '${line[%s]} ' "$i"; done; echo guest tty7 2018-01-03 09:52 old 1847 (:0) ${line[0]} ${line[1]} ${line[2]} ${line[3]} ${line[4]} ${line[5]} ${line[6]} Результат команды pgrep -at "${line[1]}" | grep 'sudo -i' будет подписан как значение $() для переменной $IS_ROOT. Команда pgrep -at "TTY" выведет PID всех процессов на определенную TTY-опцию -t --terminal, а опция -a --list-name перечислит имена PID и процессы. Выражение [[ ! -z "${IS_ROOT}" ]] && можно прочитать следующим образом: если [ переменная "${IS_ROOT}" не ! пуста -z, то && или ||. Команда printf используется для форматирования вывода (ссылки): printf '%s some text %s` "$var1" "$var2" Наконец, sed '/grep sudo -i/d' удалит автоматическую строку (содержащую нашу команду grep 'sudo -i') из вывода while и sort -k13 -k6, сортирует выводить по столбцам 13 и 6.

Вызвать скрипт find-root, сделать его исполняемым (chmod +x find-root) и выполнить его.

Вот простой вывод:

$ ./find-root spas ( PID 14035 at 12:54 on TTY pts/20 ) is ROOT: 23518 sudo -i spas ( PID 14035 at 12:36 on TTY pts/4 ) is ROOT: 23589 sudo -i guest ( PID 23575 at 15:00 on TTY pts/4 ) is ROOT: 23589 sudo -i guest ( PID 24321 at 15:30 on TTY tty1 ) is ROOT: 24386 sudo -i

Вот демонстрация (в сеансе mutt) работы скрипта ( root ):

Поместите скрипт в /usr/local/bin, чтобы сделать его доступным как команда оболочки. Для этого скопируйте и выполните следующие строки в виде одной команды:

cat << EOF | sudo tee /usr/local/bin/find-root && sudo chmod +x /usr/local/bin/find-root #!/bin/bash LANG=C who -u | while read -a line; do IS_ROOT="\$(pgrep -at "\${line[1]}" | grep 'sudo -i')" [[ ! -z "\${IS_ROOT}" ]] && printf '%-7s ( PID %-6s at %s on TTY %-7s) is ROOT: %s %s\n' "\${line[0]}" "\${line[5]}" "\${line[4]}" "\${line[1]}" "\$IS_ROOT" done | sed '/grep sudo -i/d' | sort -k13 -k6 EOF

Объяснение:

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

who -u показывает, что пользователи вошли в систему с PID своих сеансов , Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будут do команды, пока есть поток

Этот вывод будет передан по каналу | в stdin команды tee (исполняется sudo), который будет записывать файл /usr/local/bin/find-root.

who -u показывает, что пользователи вошли в систему с PID своих сеансов. Вероятно, LANG=C не является обязательным - он помещается, чтобы гарантировать идентичный формат времени и даты на машинах с разными настройками locale.

В цикле while будет do команды, в то время как на stdin есть поток.

Команда read -a будет читать входной поток по строкам и назначит эти строки в виде массива «переменной» $line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

Команда read -a будет считывать входной поток по строкам и назначит эти строки в виде массива «переменной» "$line. Мы могли бы выводить всю строку командой: echo "${line[@]}". Таким образом, ${line[1]} означает вторую переменную массива $line (первая - 0). В текущем случае ${line[1]} является TTY с выхода who -u.

6
ответ дан 24 July 2018 в 17:34

В Ubuntu вход в учетную запись root отключен, однако sudo пользователи могут войти в систему с правами root через sudo -i. Однако команда who и w на Ubuntu покажет вам, что вы вошли в систему под управлением root:

$ sudo -i
[sudo] password for xieerqi: 
$ who
xieerqi  tty7         2017-11-27 23:39 (:0)
xieerqi  pts/14       2017-11-27 23:39 (:0)
xieerqi  pts/0        2017-11-28 00:25 (:0)

Здесь я вошел в систему pts/14 через sudo -i, однако мое исходное имя пользователя все еще там. Однако можно сделать так, чтобы отфильтровать список процессов, чтобы найти оболочку, запущенную на этом терминале. Конечно, этот процесс будет запущен как root.

$ ps -u root | awk '$2 ~ /pts/'                                                                
 4170 pts/14   00:00:00 sudo
 4172 pts/14   00:00:00 bash

Таким образом, путем перекрестной ссылки вы можете выяснить, кто зарегистрирован как root в терминале. Помните, что вы также должны включить tty в команду awk, если в tty есть зарегистрированные пользователи root.

Еще один вариант - фильтровать /var/log/auth.log, как это было предложено уже в других ответах:

awk '/USER=root/' /var/log/auth.log

Однако это файл журнала. Он отображает только тех, кто зарегистрировался или не смог войти в систему, а не того, кто сейчас находится на уровне суперпользователя.

4
ответ дан 22 May 2018 в 15:50
  • 1
    Странно, если вы используете screen, будучи sudo su и создаете в нем пару окон, все они будут входить в who и w как root вместо имени пользователя - & gt; i.stack.imgur.com/iz2zs.png – Videonauth 29 November 2017 в 06:07
  • 2
    @videonauth, который, вероятно, также зависит от того, зарегистрирован или нет терминал, зарегистрированный в базе данных входа utmp, на этом экране. У меня были проблемы с wall в gnome-terminal, потому что gnome-terminal не регистрируется в utmp. Даже вопрос об этом опубликован. – Sergiy Kolodyazhnyy 29 November 2017 в 06:12

Введите этот

sudo less /var/log/auth.log

, там вы сможете просматривать все логины, включая тех, кто обращается к root

0
ответ дан 22 May 2018 в 15:50
  • 1
    thanks.But его показ: Извините, пользователь " username " не разрешено выполнять '/ usr / bin / less /var/log/auth.log' как root в " servername & quot ;. – Anony 28 November 2017 в 11:28
  • 2
    убедитесь, что у вас есть имя пользователя, есть права root или принадлежите к группе sudo, после чего вы сможете просмотреть его – Yien 28 November 2017 в 11:35
  • 3
    fine.Just на любопытство, что, если я обычный пользователь? – Anony 28 November 2017 в 13:34
  • 4
    без каких-либо привилегий sudo вы не можете, так как большинство файлов журналов принадлежат группе, которая требует привилегий суперпользователя, если, конечно, вы ее не изменили. Однако, основываясь на ваших вопросах здесь, он ограничен только и спрашивает другого. Выберите ответ, в котором вы нашли тот, который вам подходит, и задайте другой вопрос. – Yien 28 November 2017 в 14:00

Обычно в Ubuntu учетная запись SuperUser или Root называется root, но заблокирована системой, и вы не можете войти в нее. Чтобы ответить на ваш вопрос, да, имя пользователя будет root, но вы не сможете его использовать без его разблокировки.

Чтобы разблокировать его, введите в терминал следующее:

sudo -i

Then Задайте пароль для root:

sudo passwd root

Дополнительную информацию об этом можно найти здесь:

https://help.ubuntu.com/community/RootSudo

0
ответ дан 22 May 2018 в 15:50
  • 1
    Итак, кто сможет получить к нему доступ? – Anony 28 November 2017 в 11:29
  • 2
    @Anony, используя sudo в терминале или набрав sudo su для запуска терминала – Ray Antebioni 30 November 2017 в 05:56
  • 3
    @Anony, или используя sudo -i, а затем sudo passwd root, чтобы установить пользовательский пароль для root. – Ray Antebioni 30 November 2017 в 06:10

Обычно в Ubuntu учетная запись SuperUser или Root называется root, но заблокирована системой, и вы не можете войти в нее. Чтобы ответить на ваш вопрос, да, имя пользователя будет root, но вы не сможете его использовать без его разблокировки.

Чтобы разблокировать его, введите в терминал следующее:

sudo -i

Then Задайте пароль для root:

sudo passwd root

Дополнительную информацию об этом можно найти здесь:

https://help.ubuntu.com/community/RootSudo

0
ответ дан 18 July 2018 в 02:26

В Ubuntu вход в учетную запись root отключен, однако sudo пользователи могут войти в систему с правами root через sudo -i. Однако команда who и w на Ubuntu покажет вам, что вы вошли в систему под управлением root:

$ sudo -i [sudo] password for xieerqi: $ who xieerqi tty7 2017-11-27 23:39 (:0) xieerqi pts/14 2017-11-27 23:39 (:0) xieerqi pts/0 2017-11-28 00:25 (:0)

Здесь я вошел в систему pts/14 через sudo -i, однако мое исходное имя пользователя все еще там. Однако можно сделать так, чтобы отфильтровать список процессов, чтобы найти оболочку, запущенную на этом терминале. Конечно, этот процесс будет запущен как root.

$ ps -u root | awk '$2 ~ /pts/' 4170 pts/14 00:00:00 sudo 4172 pts/14 00:00:00 bash

Таким образом, путем перекрестной ссылки вы можете выяснить, кто зарегистрирован как root в терминале. Помните, что вы также должны включить tty в команду awk, если в tty есть зарегистрированные пользователи root.

Еще один вариант - фильтровать /var/log/auth.log, как это было предложено уже в других ответах:

awk '/USER=root/' /var/log/auth.log

Однако это файл журнала. Он отображает только тех, кто зарегистрировался или не смог войти в систему, а не того, кто сейчас находится на уровне суперпользователя.

4
ответ дан 18 July 2018 в 02:26

Введите этот

sudo less /var/log/auth.log

, там вы сможете просматривать все логины, включая тех, кто обращается к root

0
ответ дан 18 July 2018 в 02:26

Обычно в Ubuntu учетная запись SuperUser или Root называется root, но заблокирована системой, и вы не можете войти в нее. Чтобы ответить на ваш вопрос, да, имя пользователя будет root, но вы не сможете его использовать без его разблокировки.

Чтобы разблокировать его, введите в терминал следующее:

sudo -i

Then Задайте пароль для root:

sudo passwd root

Дополнительную информацию об этом можно найти здесь:

https://help.ubuntu.com/community/RootSudo

0
ответ дан 24 July 2018 в 17:34
  • 1
    Итак, кто сможет получить к нему доступ? – Anony 28 November 2017 в 11:29
  • 2
    @Anony, используя sudo в терминале или набрав sudo su для запуска терминала – Ray Antebioni 30 November 2017 в 05:56
  • 3
    @Anony, или используя sudo -i, а затем sudo passwd root, чтобы установить пользовательский пароль для root. – Ray Antebioni 30 November 2017 в 06:10

В Ubuntu вход в учетную запись root отключен, однако sudo пользователи могут войти в систему с правами root через sudo -i. Однако команда who и w на Ubuntu покажет вам, что вы вошли в систему под управлением root:

$ sudo -i [sudo] password for xieerqi: $ who xieerqi tty7 2017-11-27 23:39 (:0) xieerqi pts/14 2017-11-27 23:39 (:0) xieerqi pts/0 2017-11-28 00:25 (:0)

Здесь я вошел в систему pts/14 через sudo -i, однако мое исходное имя пользователя все еще там. Однако можно сделать так, чтобы отфильтровать список процессов, чтобы найти оболочку, запущенную на этом терминале. Конечно, этот процесс будет запущен как root.

$ ps -u root | awk '$2 ~ /pts/' 4170 pts/14 00:00:00 sudo 4172 pts/14 00:00:00 bash

Таким образом, путем перекрестной ссылки вы можете выяснить, кто зарегистрирован как root в терминале. Помните, что вы также должны включить tty в команду awk, если в tty есть зарегистрированные пользователи root.

Еще один вариант - фильтровать /var/log/auth.log, как это было предложено уже в других ответах:

awk '/USER=root/' /var/log/auth.log

Однако это файл журнала. Он отображает только тех, кто зарегистрировался или не смог войти в систему, а не того, кто сейчас находится на уровне суперпользователя.

4
ответ дан 24 July 2018 в 17:34
  • 1
    Странно, если вы используете screen, будучи sudo su и создаете в нем пару окон, все они будут входить в who и w как root вместо имени пользователя - & gt; [D0] i.stack.imgur.com/iz2zs.png – Videonauth 29 November 2017 в 06:07
  • 2
    @videonauth, который, вероятно, также зависит от того, зарегистрирован или нет терминал, зарегистрированный в базе данных входа utmp, на этом экране. У меня были проблемы с wall в gnome-terminal, потому что gnome-terminal не регистрируется в utmp. Даже вопрос об этом опубликован. – Sergiy Kolodyazhnyy 29 November 2017 в 06:12

Введите этот

sudo less /var/log/auth.log

, там вы сможете просматривать все логины, включая тех, кто обращается к root

0
ответ дан 24 July 2018 в 17:34
  • 1
    thanks.But его показ: Извините, пользователь & quot; username & quot; не разрешено выполнять '/ usr / bin / less /var/log/auth.log' как root в & quot; servername & quot ;. – Anony 28 November 2017 в 11:28
  • 2
    убедитесь, что у вас есть имя пользователя, есть права root или принадлежите к группе sudo, после чего вы сможете просмотреть его – Yien 28 November 2017 в 11:35
  • 3
    fine.Just на любопытство, что, если я обычный пользователь? – Anony 28 November 2017 в 13:34
  • 4
    без каких-либо привилегий sudo вы не можете, так как большинство файлов журналов принадлежат группе, которая требует привилегий суперпользователя, если, конечно, вы ее не изменили. Однако, основываясь на ваших вопросах здесь, он ограничен только и спрашивает другого. Выберите ответ, в котором вы нашли тот, который вам подходит, и задайте другой вопрос. – Yien 28 November 2017 в 14:00

Другие вопросы по тегам:

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