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 com sudo
são registrados em /var/log/secure
. Quando um usuário alterna 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, em seguida, su
são registrados como iniciados pelo usuário, alexis
mas executados com root. No entanto, todos os comandos a seguir não serão registrados porque são executados como root em um shell de 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 alternar para um shell de root . Se alguém quiser executar um shell de root, ele deve saber a senha do root.
Não é possível - por favor, leia até o final. Se o usuário tiver acesso completo ao sudo, ele sempre poderá usar
sudo -i -u root
,sudo /usr/bin/bash
,sudo /usr/bin/{ANY_OTHER_SHELL}
ou 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 que você fez, etc. Você pode obscurecer um pouco alterando o shell raiz padrão para/sbin/nologin
.Mas qualquer usuário avançado pode usar a invocação bash "nua" com sudo:
Portanto, obscurecer o acesso com
/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
que imprimirá mensagens comoPlease use sudo
e sairá. Mas, mais uma vez, os usuários avançados poderão usar coisas como--norc
e--noprofile
/ou apontar sua própria configuração para o bash. Para resumir - 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 comhttpd
instalado você também pode usarsudo -u apache /usr/bin/bash
. Talvez haja alguma solução baseada em PAM, mas com o google-fu, não consegui encontrá-los. 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 corrigi-lo no modo de recuperação.Mas há uma solução na qual você pode estar mais interessado - log de terminal.
Você quer conhecer o histórico do terminal, não limitar o acesso inteiramente. Enquanto isso, você deve saber que os usuários com acesso total de administrador podem remover seus logs - então, por precaução, você deve usar o rsyslog ou outra solução de log para colocar os logs no servidor diferente.
Como você está usando uma distribuição baseada em RHEL - você pode ler o seguinte. https://www.redhat.com/sysadmin/terminal-logging
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 deixará de permitir que os usuários desses grupos usem osudo
.Você deve adicionar uma linha para você antes de escrever as alterações. Caso contrário, certifique-se de que você tenha uma senha de root funcional (para
su
semsudo
) ou algum outro meio de usarsudo
para obter privilégios de root!