sshfs: chroot todos os usuários não-root para um diretório específico

8

Em um servidor, preciso de acesso ssh irrestrito para raiz e restrito a todos os outros usuários.

Gostaria de restringir todos os usuários não raiz a:

  • sem login ssh
  • só permite montar /mnt/data/usandosshfs

Eu vejo sshd_configpermite usar Match User, ou seja:

Match User john
  ChrootDirectory /mnt/data/
  ForceCommand internal-sftp
  AllowTCPForwarding no
  X11Forwarding no

mas como posso corresponder a todos os usuários, exceto root?

Martin Vegter
fonte
Eu postei uma resposta, mas não está totalmente claro para mim se a parte "fontes credíveis e / ou oficiais" se refere à viabilidade / segurança geral da sua solução ou à pergunta específica "como corresponder apenas à raiz".
fra-san
@ Fra-san - Não sei ao certo o que você quer dizer. Você implica que, embora esta solução funcione tecnicamente, ela não é segura?
Martin Vegter 15/11/19
Não, eu queria saber se você estava procurando algum endosso de uma configuração específica pelos autores originais ou outras pessoas autorizadas. Na verdade, o que você está fazendo é recomendado em muitas fontes com conhecimento (o Arch Wiki é um exemplo).
fra-san

Respostas:

12

A diretiva Match nos ssharquivos de configuração suporta negação. Mas parece que negar condições sshd_configé um pouco complicado: você precisa escrever

Match User="!root,*"

ter diretivas subsequentes aplicadas a todos os usuários, exceto root.

Aqui está a documentação relevante: de man sshd_config:

Match Apresenta um bloco condicional.
...
Os padrões de correspondência podem consistir em entradas únicas ou listas separadas por vírgula e podem usar os operadores curinga e negação descritos na seção PATTERNS de ssh_config (5).

E de man ssh_config:

PADRÕES
Um padrão consiste em zero ou mais caracteres que não sejam espaços em branco, '*' (um curinga que corresponde a zero ou mais caracteres) ou '?' (um curinga que corresponde exatamente a um caractere).
...
Observe que uma correspondência negada nunca produzirá um resultado positivo por si só.
Por exemplo, a tentativa de combinar "host3" com a seguinte lista de padrões falhará:

from="!host1,!host2"

A solução aqui é incluir um termo que produza uma correspondência positiva, como um curinga:

from="!host1,!host2,*"

Dica encontrada neste artigo no Red Hat Customer Portal.

fra-san
fonte