Diretório raiz do usuário SFTP

Diretório raiz do usuário SFTP

Eu montei o seguinte script que funciona bem. Ele criará um usuário sftp e quando o usuário fizer login ele estará no /var/base/test1, do qual não pode escrever neste diretório, ele precisará entrar /var/base/test1/test1e então poderá escrever.

No entanto, é um pouco chato e, idealmente, quero que o usuário entre no /var/base/test1/test1diretório quando fizer login via FTP. Existe uma maneira de facilitar isso? Se eu alterar o ChrootDirectory (em sshd_config) para /var/base/test1/test1, o usuário FTP não poderá mais efetuar login.

mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd

sshd_config:

Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Responder1

Resposta curta

Isso não é possível, mas defina /test1como solução alternativa.

Resposta longa

opensshrequer que ChrootDirectorytodos os componentes do caminho que levam a ele sejam de propriedade do root e não possam ser gravados por mais ninguém. Esta é uma medida de segurança para garantir que ChrootDirectorynão possa ser manipulado maliciosamente e, por exemplo, substituído por um link simbólico para outro lugar completamente diferente. Se o ChrootDirectoryou qualquer um de seus diretórios pai não pertencer ao root ou for gravável em grupo ou mundialmente, sshdrecusa o login. Se isso acontecer, você verá algo assim em /var/log/auth.log:

Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1

A mensagem de erro deve apontar a direção certa.

Isto também é explicitamente afirmado noPágina de manual sshd_config:

Diretório Chroot
Especifica o nome do caminho de um diretório para chroot(2) após a autenticação. Na inicialização da sessão, o sshd(8) verifica se todos os componentes do nome do caminho são diretórios de propriedade da raiz que não podem ser gravados por nenhum outro usuário ou grupo. Após o chroot, sshd(8) muda o diretório de trabalho para o diretório inicial do usuário.[...]

Por segurança, é muito importante que a hierarquia de diretórios seja impedida de ser modificada por outros processos no sistema (especialmente aqueles fora da prisão). A configuração incorreta pode levar a ambientes inseguros que o sshd(8) não consegue detectar.

Gambiarra

Você pode, no entanto, definir o diretório inicial do usuário como /test1( sudo usermod test1 -d /test1), dessa forma, após a chrootaplicação, o diretório será alterado para /var/base/test1/test1. Dessa forma o usuário não precisa mudar para test1mas inicia sua sftpsessão já nesse diretório.

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1

informação relacionada