AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 700826
Accepted
ZioByte
ZioByte
Asked: 2022-04-30 02:35:30 +0800 CST2022-04-30 02:35:30 +0800 CST 2022-04-30 02:35:30 +0800 CST

Bloqueie completamente a conta de usuário no servidor, incluindo ssh

  • 772

Eu preciso bloquear algumas contas de usuários, sem mexer com o HOME, se possível.

A maneira normal seria, usermod -L usermas parece deixar o login ssh aberto com autenticação de chave pública (usada rotineiramente neste servidor).

Eu sei que poderia apenas mv /home/user/.ssh /home/user/_sshou algo semelhante, mas essa é a maneira correta de fazer isso?

o que estou perdendo?

ssh accounts
  • 6 6 respostas
  • 2237 Views

6 respostas

  • Voted
  1. Best Answer
    roaima
    2022-04-30T03:42:28+08:002022-04-30T03:42:28+08:00

    A documentação, man usermod, fornece a solução recomendada:

    -L, --lockBloqueie a senha de um usuário. Isso coloca um !na frente da senha criptografada, desabilitando efetivamente a senha. Você não pode usar esta opção com -pou -U.

    Nota: se você deseja bloquear a conta (não apenas o acesso com senha), você também deve definir EXPIRE_DATEo 1.

    E depois

    -e, --expiredate EXPIRE_DATEA data em que a conta de usuário será desativada. A data é especificada no formato YYYY-MM-DD.

    Um argumento vazio EXPIRE_DATEdesabilitará a expiração da conta.

    Então, transformando isso em um exemplo real

    usermod -L -e 1 someuser     # Lock
    usermod -L -e '' someuser    # Unlock
    

    Se você tiver uma data de expiração padrão configurada, /etc/default/useraddpoderá incluir seu valor - se houver - como parte do processo de desbloqueio:

    usermod -U -e "$( . /etc/default/useradd; echo "$EXPIRE")" someuser
    

    Os trabalhos agendados crontambém são desabilitados para um usuário com uma conta expirada, mas não apenas para uma conta bloqueada. As mensagens de erro journalctl -u cronmostram o nome da conta do usuário expirado (neste caso test2):

    Apr 30 11:47:01 pi CRON[26872]: pam_unix(cron:account): account test2 has expired (account expired)
    Apr 30 11:47:01 pi cron[472]: Authentication failure
    Apr 30 11:47:01 pi CRON[26872]: Authentication failure
    

    Os trabalhos agendados com atpermanecem não tentados. (Não está claro para mim se eles serão executados quando passarem da data de vencimento; empiricamente, parece que não.)

    Outros processos já em execução na conta bloqueada e expirada permanecem inalterados e continuam em execução.

    • 13
  2. Michael Angel P.
    2022-04-30T02:51:02+08:002022-04-30T02:51:02+08:00

    Depois de emitir "usermod -L user" você pode negar o acesso ssh adicionando esta linha ao final do arquivo /etc/ssh/sshd_config :

    DenyUsers user
    

    Ou você pode criar um grupo para essa finalidade para poder negar o login ssh adicionando usuários ao grupo:

    groupadd deny-ssh
    usermod -a -G deny-ssh user
    

    E adicione o grupo ao final do arquivo /etc/ssh/sshd_config :

    DenyGroups deny-ssh
    

    Após cada alteração no arquivo /etc/ssh/sshd_config , certifique-se de recarregar o daemon sshd para aplicar as alterações:

    systemctl reload sshd
    

    O comando reload carregará as novas configurações e manterá todas as sessões ssh existentes abertas.


    Como alternativa, você pode alterar o shell do usuário para que, mesmo que ele faça login, ele não receba um shell:

    usermod --shell /usr/sbin/nologin user
    

    Eu poderia recomendar a criação de um script bash simples que fará todos os itens acima com apenas um comando.

    deny-logon.sh:

    #!/bin/bash
    
    #Lock user account
    usermod -L $1
    
    #Deny SSH connections
    usermod -a -G deny-ssh $1
    
    #Remove user Shell
    usermod --shell /usr/sbin/nologin $1
    
    #Reload sshd
    systemctl reload sshd
    

    Agora você simplesmente tem que executar o script assim:

    ./deny-logon.sh user
    

    E fará automaticamente todas as alterações acima para o "usuário".

    EDIT: A solução @roaima é a mais correta, expirar uma conta desabilita todos os acessos a ela e deve ser feito se você quiser impedir que um usuário faça login.

    • 10
  3. gerhard d.
    2022-04-30T02:47:12+08:002022-04-30T02:47:12+08:00

    Você deve ser capaz de desabilitar ssh-logins para usuários adicionando seus nomes de usuário ou grupos em

    /etc/ssh/sshd_config
    

    sob a configuração DenyUserse/ou DenyGroup.

    Veja man 5 sshd_config.

    Não se esqueça HUPdo sshd.

    • 7
  4. Austin Hemmelgarn
    2022-05-01T05:02:46+08:002022-05-01T05:02:46+08:00

    Para impedir adequadamente o acesso de um usuário em um servidor SSH, a solução correta é modificar a configuração do SSHD para que o acesso seja explicitamente negado usando as configurações DenyUserse/ou DenyGroups. Normalmente, sugiro usar DenyGroupse criar um grupo dedicado para essa finalidade, ao qual você adiciona qualquer pessoa que não deveria ter acesso SSH.

    Para bloquear totalmente a conta, você também precisa bloquear a senha, configurá-la como expirada (ambos usando usermod) e alterar o shell de login para /sbin/nologinque outros mecanismos de login não os deixem entrar. Você pode precisar fazer ainda mais do que isso em alguns casos também (por exemplo, se o servidor executar o Samba e o usuário tiver acesso a compartilhamentos de arquivos por meio do SMB, você provavelmente precisará bloquear sua conta do Samba também usando smbpasswd).


    Por que apenas bloquear a conta usermodnão é suficiente?

    Isso se resume ao fato de que uma conta é 'bloqueada' no sentido tradicional do UNIX, fazendo com que não importa qual senha o usuário tente usar, ela nunca corresponderá ao que está no banco de dados de senhas. Isso significa, muito importante, que bloquear a conta afeta usermod apenas os serviços que estão autenticando no banco de dados de senhas do sistema (em um sistema Linux moderno, isso significaria os serviços configurados para usar o pam_unixmódulo PAM para autenticação ).

    No entanto, o SSHD só autentica no banco de dados de senhas do sistema se a senha ou o mecanismo de autenticação de resposta de desafio estiver sendo usado. A autenticação de chave pública, bem como quaisquer outros mecanismos de autenticação (como GSSAPI ou s/key) envolvem apenas o banco de dados de senhas do sistema para verificar se a conta existe, portanto, geralmente funcionarão bem com uma conta bloqueada.

    Por que definir o shell de login como /sbin/nologinnão é suficiente?

    Isso tem a ver com o fato de que existem várias maneiras de acessar um sistema como uma conta de usuário específica que não tem nada a ver com um shell de login.

    O mais relevante aqui é que SFTP, SCP e SSH com um comando explicitamente especificado não invocam um shell de login. Isso significa que mesmo com o shell de login definido como /sbin/nologin, você geralmente pode obter um shell de trabalho em um sistema como usuário executando ssh -t user@host /bin/sh( -té necessário solicitar explicitamente a alocação de pseudoterminal, que por sua vez é necessária para obter algumas coisas, como sudoou vimpara funcionam corretamente a partir do shell resultante), e quase sempre você ainda pode usar SFTP e SCP para mover arquivos.

    Outro exemplo disso seria usar sudo -u user /bin/shpara obter um shell de trabalho como um determinado usuário de uma sessão existente no sistema como um usuário diferente. Isso funcionará mesmo se o shell de login do usuário de destino estiver definido como /sbin/nologin, embora se a conta também estiver bloqueada usando usermod, você terá que executá-la como usuário root (pelo menos, em qualquer sudoconfiguração padrão).

    • 2
  5. mckenzm
    2022-04-30T21:30:43+08:002022-04-30T21:30:43+08:00

    Bloquear a conta é a maneira correta. Você também pode querer remover o arquivo authorized_keys para derrotar o SSH.

    Lembre-se de que existem outras maneiras além do SSH de logon.

    Fazer qualquer coisa com rotinas "*rc" é desajeitado, mas comumente usado para contas "só sftp" se for uma conta de utilitário, digamos sftp ou SCP.

    Mas !password é melhor do que mudar sua senha se a restauração for necessária.

    Como sempre, mantenha backups e com segurança.

    • 1
  6. R.. GitHub STOP HELPING ICE
    2022-05-01T09:22:44+08:002022-05-01T09:22:44+08:00

    Se você não quiser confiar em suposições sobre como um software diferente tratará o estado bloqueado ou expirado no shadowarquivo, um grande martelo para bloquear completamente a conta de usuário é remover sua linha do passwdarquivo (mantendo um backup em outro lugar). Com essa alteração, não há mais mapeamento do nome de usuário para o uid ou diretório inicial, portanto, nada (sshd ou outro) pode procurar o nome de usuário, encontrar o diretório inicial e o authorized_keysarquivo (ou similar) e agir sobre ele.

    • 1

relate perguntas

  • Por que o utilitário ssh é considerado um pty?

  • Auto-SSH funciona manualmente, mas não em segundo plano

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • rsync porta 22 e 873 uso

  • Aborto repentino do SCP: tubo quebrado, código de autenticação de mensagem incorreto

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve