Como encontro quem está logado como root?

7

Recentemente, eu perguntei " Como faço para listar usuários logados? " O comando who serve bem para este fim. Mas como eu encontro quem está logado como root? O nome de usuário "root" será?

    
por Anony 28.11.2017 / 05:48

4 respostas

6

Eu assumo que a conta raiz não está habilitada (como é por padrão), então somente sudo -i é aplicável para um usuário se tornar root . Minha sugestão é o seguinte script que usa os comandos who -u e pgrep -at <tty parsed from who -u> para descobrir qual user na qual tty executou o comando 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

Explicação:

  • who -u mostra os usuários conectados com os PIDs de suas sessões. Provavelmente LANG=C não é obrigatório - ele é colocado para garantir formato de data / hora idêntico em máquinas com diferentes configurações de locale .

  • O loop while irá do dos comandos enquanto houver fluxo no stdin .

  • O comando read -a lerá o fluxo de entrada linha por linha e atribuirá essas linhas como uma matriz à "variável" $line . Nós poderíamos produzir toda a linha por um comando como: echo "${line[@]}" . Portanto, ${line[1]} significa a segunda variável da matriz $line (a primeira é 0 ). No caso atual, ${line[1]} é o TTY da saída de who -u .

  • Aqui está um script simples que gerará uma "tabela" com as relações entre os elementos da matriz e seus valores:

    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]}
    
  • A saída do comando pgrep -at "${line[1]}" | grep 'sudo -i' será assinada como valor $() para a variável $IS_ROOT .

  • O comando pgrep -at "TTY" produzirá os PIDs de todos os processos em determinados TTY - opção -t --terminal , e a opção -a --list-name listará os nomes de PIDs e processos.

  • A expressão [[ ! -z "${IS_ROOT}" ]] && pode ser lida desta forma: se [ a variável "${IS_ROOT}" não for ! vazio -z , então && ou senão || .

  • O comando printf é usado para formatar a saída ( referência ):

    printf '%s some text %s' "$var1" "$var2"
    
  • Finalmente, sed '/grep sudo -i/d' excluirá a linha não assistida (que contém nosso comando grep 'sudo -i' ) da saída de while e sort -k13 -k6 classificará a saída pelas colunas 13 e 6.

Chame o script find-root , torne-o executável ( chmod +x find-root ) e execute-o.

Aqui está uma saída simples:

$ ./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

Aqui está uma demonstração (em uma sessão mutt ) de como o script funciona ( em sua versão anterior ):

Coloque o script em /usr/local/bin para disponibilizá-lo como comando shell. Para fazer isso, copie e execute as seguintes linhas como um único comando:

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

Explicação:

  • O comando cat << EOF produzirá as próximas linhas, a menos que a string EOF seja encontrada. Observe as barras invertidas $ que irão escapar do caractere especial $ e serão produzidas literalmente dentro de cat.

  • Esta saída será canalizada | para o stdin do comando tee (executado por sudo ) que gravará o arquivo /usr/local/bin/find-root .

  • Se o comando anterior for bem-sucedido && , o comando suddo chmod +x será executado.

Veja também:

por pa4080 28.11.2017 / 13:04
4

No Ubuntu, o login na conta root está desativado, no entanto, sudo usuários ainda podem fazer login como root via sudo -i . No entanto, nem o comando who e w no Ubuntu vai mostrar que você está logado como 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)

Aqui estou logado em pts/14 via sudo -i , mas meu nome de usuário original ainda está lá. O que pode ser feito, no entanto, é filtrar a lista de processos para encontrar o shell em execução naquele terminal. Claro que esse processo será executado como root.

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

Dessa forma, por referência cruzada, você pode descobrir quem está logado como root no terminal. Lembre-se de que você também deve incluir o comando tty into awk caso haja usuários root logados em tty .

Outra, seria filtrar /var/log/auth.log como sugerido em outras respostas:

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

No entanto, este é um arquivo de log. Exibe apenas quem está logado ou não logou, não quem está atualmente no nível de superusuário.

    
por Sergiy Kolodyazhnyy 28.11.2017 / 08:39
0

Digite isto

  

sudo less /var/log/auth.log

de lá você pode procurar todos os logins, incluindo aqueles que acessam o root

    
por Yien 28.11.2017 / 07:14
0

Normalmente, no Ubuntu, a conta SuperUser ou Root é denominada root, mas é bloqueada pelo sistema e você não pode fazer login nela. Para responder a sua pergunta, sim, o nome de usuário seria root, embora você não possa usá-lo sem desbloqueá-lo.

Para desbloqueá-lo, digite o seguinte em um terminal:

sudo -i

Em seguida, defina uma senha para root:

sudo passwd root

Mais informações sobre isso podem ser encontradas aqui:

link

    
por Ray Antebioni 28.11.2017 / 06:58

Tags