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/test1
e então poderá escrever.
No entanto, é um pouco chato e, idealmente, quero que o usuário entre no /var/base/test1/test1
diretó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 /test1
como solução alternativa.
Resposta longa
openssh
requer que ChrootDirectory
todos 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 ChrootDirectory
não possa ser manipulado maliciosamente e, por exemplo, substituído por um link simbólico para outro lugar completamente diferente. Se o ChrootDirectory
ou qualquer um de seus diretórios pai não pertencer ao root ou for gravável em grupo ou mundialmente, sshd
recusa 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 chroot
aplicação, o diretório será alterado para /var/base/test1/test1
. Dessa forma o usuário não precisa mudar para test1
mas inicia sua sftp
sessão já nesse diretório.
$ sftp -P 2222 test1@localhost
test1@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /test1