Eu tenho um servidor headless que está conectado remotamente por vários usuários. Nenhum dos outros usuários está no arquivo sudoers, então eles não podem obter root via sudo
. No entanto, como as permissões su
estão -rwsr-xr-x
ativadas, não há nada que os impeça de tentar forçar a senha do root.
Pode-se argumentar que, se um usuário souber a senha do root, ele pode comprometer o sistema de qualquer maneira, mas não acho que seja esse o caso. O OpenSSH está configurado com PermitRootLogin no
e PasswordAuthentication no
, e nenhum dos outros usuários tem acesso físico ao servidor. Até onde eu sei, a permissão de execução do mundo /usr/bin/su
é o único caminho para os usuários que tentam obter root no meu servidor.
O que é mais intrigante para mim é que nem parece útil. Ele me permite executar su
diretamente em vez de precisar fazer sudo su
, mas isso dificilmente é um inconveniente.
Estou negligenciando alguma coisa? A permissão de execução do mundo está su
apenas lá por razões históricas? Existem desvantagens em remover essa permissão que ainda não encontrei?
Um ponto que está faltando na resposta de ilkkachu é que elevar para root é apenas um uso específico para
su
. O propósito geral do su é abrir um novo shell na conta de login de outro usuário. Esse outro usuário poderia serroot
(e talvez seja mais frequentemente), massu
pode ser usado para assumir qualquer identidade que o sistema local possa autenticar.Por exemplo, se eu estiver logado como usuário
jim
e quiser investigar um problema quemike
foi relatado, mas que não consigo reproduzir, posso tentar fazer login comomike
e executar o comando que está causando problemas.Usar a
-l
opção desu
faz com que simule um login completo (porman
página).O acima requer o conhecimento da
mike
senha do , no entanto. Se eu tiversudo
acesso, posso logar comomike
mesmo sem a senha dele.Em resumo, a razão pela qual as permissões no
su
executável são como você mostra, é porquesu
é uma ferramenta de uso geral que está disponível para todos os usuários no sistema.Historicamente (em unices não GNU), não era, ou pelo menos verificava manualmente se você estava em um grupo chamado "roda" com permissão para
su
. A versão GNU dosu
não reproduziu esta funcionalidade por causa da ideologia do RMS sobre controle de acesso na época:Você pode encontrar muito mais sobre o assunto pesquisando no Google "wheel group rms" ou similar.
Sim. Assumindo seu sistema Linux usual, o
pam_unix.so
módulo atrasa uma tentativa de autenticação com falha em ~ dois segundos, mas não acho que haja algo para impedir tentativas simultâneas.As tentativas com falha são registradas, é claro:
A força bruta de uma senha deve aparecer com destaque nos logs, se você tiver algum tipo de sistema para monitorá-los. E se você tiver usuários locais não confiáveis, talvez devesse. Usuários locais não confiáveis também podem tentar usar qualquer exploração de escalonamento de privilégio somente local, e eles são muito mais comuns do que o escalonamento de privilégio remoto.
Claro que é útil, permite que você se eleve para
root
, se você souber a senha.sudo su
é um tanto redundante. Não há necessidade de usar dois programas destinados a permitir que você execute programas como outro usuário, um é suficiente. Basta usarsudo -i
ousudo -s
(ousudo /bin/bash
etc.) se você quiser executar o shell.Veja acima. Bem, nem todos os sistemas têm
sudo
como alternativa, não tenho certeza se você considera isso histórico.Na verdade, não, até onde eu sei. Acho que alguns sistemas foram
su
configurados para que apenas membros de um determinado grupo ("wheel
") possam executá-lo. Você pode fazer o mesmosudo
se quiser (chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo
).Ou você pode simplesmente remover um ou ambos os programas se não precisar deles. Embora no Debian,
su
vem com ologin
pacote, então provavelmente não é uma boa ideia remover o pacote como um todo. (E emparelharlogin
esu
juntos assim parece um pouco histórico.)Você já tem algumas boas respostas, mas há uma parte do seu post que eles não abordam.
Essa é uma suposição perigosa. Se você definiu uma boa senha para o root, então na maioria dos casos é muito mais provável que uma escalação de privilégios bem-sucedida seja devido à exploração de um bug no kernel ou um binário setuid (você também pode remover o setuid pouco daqueles, mas
passwd
é setuid, e se você quiser alta segurança, você também deve oferecer isso aos seus usuários, e negar a eles a opção de alterar sua senha não é compatível com isso).su precisa ser executável em todo o mundo para que todos possam executá-lo. Em muitos sistemas, pode ser usado para mudar para outro usuário, fornecendo sua senha.
Se você está preocupado com alguém que força bruta a senha do root, você pode simplesmente desativá-la. (tornar o hash inválido para que nenhuma senha possa corresponder)
Eu não sei sobre o consenso, mas eu consideraria poder fazer login como root diretamente um problema de segurança por si só.
As outras respostas estão corretas dizendo que "su" permite que você faça login em outras contas além do root.
Uma nota sobre "sudo su" embora. Isso realmente permite que você faça login na conta root sem saber a senha root. Você precisa saber a senha da conta com a qual executa o sudo, bem como essa conta estar no arquivo sudoers.