Eu edito minha pergunta para dar o objetivo e não uma suposição da solução.
- Distribuições baseadas em RHEL
- O usuário root nunca é usado e sua senha é mantida em segredo
Todos os comandos executados sudo
estão registrados em /var/log/secure
. Quando um usuário muda para root usando sudo su/sudo -i
, todos os comandos executados na sessão não são registrados.
Meu objetivo é ficar de olho no que os administradores estão fazendo.
Exemplo
Se um usuário fizer:
alexis$ sudo visudo # this is logged
alexis$ sudo su # this is logged
root# visudo # this isn't logged since it's run under root
O comando visudo
e então su
é registrado como iniciado pelo usuário, alexis
mas executado com root. No entanto, todos os comandos a seguir não serão registrados porque são executados como root em um shell root.
1º de novembro 13:28:29 3020m sudo[6906]: Alexis: TTY=pts/0 ; PCD=/home/alexis ; USUÁRIO=raiz;COMANDO=/bin/su
Em resumo,Não quero que um usuário (admin in wheel) possa mudar para um shell root. Se alguém quiser rodar um shell root, ele/ela precisa saber a senha do root.
Responder1
Não é possível - leia até o final. Se o usuário tiver acesso total ao sudo, ele sempre poderá usar sudo -i -u root
, sudo /usr/bin/bash
ou sudo /usr/bin/{ANY_OTHER_SHELL}
escrever seu próprio script/programa que usará alguns comandos para obter acesso total ao shell. É trivial. Eles também podem reverter quaisquer alterações de configuração feitas, etc. Você pode obscurecer um pouco alterando o shell raiz padrão para /sbin/nologin
.
[vagrant@eurolinux8-vbuilder ~]$ sudo chsh root -s /sbin/nologin
Changing shell for root.
chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
Shell changed.
[vagrant@eurolinux8-vbuilder ~]$ sudo -i
This account is currently not available.
Mas qualquer usuário avançado pode usar a invocação do bash "nua" com o sudo:
[vagrant@eurolinux8-vbuilder ~]$ sudo /usr/bin/bash
[root@eurolinux8-vbuilder vagrant]#
Portanto, ocultar o acesso /usr/sbin/nologin
não é muito potente.
Você também pode adicionar algum script ao bash ou qualquer outra configuração de shell para verificar se o usuário root
imprimirá mensagens como Please use sudo
e sairá. Mas, mais uma vez, usuários avançados poderão usar coisas como --norc
e --noprofile
/ou apontar suas próprias configurações para o bash. Resumindo - de acordo com meu melhor conhecimento, não é possível. Eu até verifico se há alguns casos excepcionais [por exemplo, com PAM] ao usar um usuário que normalmente é apenas daemon (como httpd). Mas com httpd
instalado você também pode usar o sudo -u apache /usr/bin/bash
. Talvez exista alguma solução baseada em PAM, mas com o google-fu não consegui encontrá-la. Também é difícil porque você está interessado em desabilitar o acesso interativo. Em outro caso (desativando totalmente o acesso ao root), você bloqueará o sistema e terá que consertá-lo no modo de recuperação.
Mas há uma solução na qual você pode estar mais interessado - registro de terminal.
Você deseja conhecer o histórico do terminal, não limitar totalmente o acesso. Enquanto isso, você deve saber que usuários com acesso total de administrador podem remover seus logs - portanto, por precaução, você deve usar o rsyslog ou outra solução de log para colocar logs em um servidor diferente.
Como você está usando uma distribuição baseada em RHEL - você pode ler o seguinte. https://www.redhat.com/sysadmin/terminal-logging
Responder2
Reverta as alterações para PAM. Você não precisa deles.
Em vez disso, use visudo
para editar o arquivo /etc/sudoers
e comentar as linhas que começam com %wheel
e/ou %sudo
. Isso impedirá que usuários que estejam nesses grupos usem sudo
.
Você deve adicionar uma linha para si mesmo antes de escrever as alterações. Caso contrário, certifique-se de ter uma senha de root funcional (para su
sem sudo
) ou algum outro meio de uso sudo
para obter privilégios de root!