diretório raiz do usuário SFTP

1

Eu montei o seguinte script que funciona bem. Ele criará um usuário sftp e, quando o usuário fizer login, ele estará em /var/base/test1 , do qual não pode escrever nesse diretório, precisará inserir /var/base/test1/test1 e, em seguida, poderá gravar.

No entanto, é um pouco chato e, idealmente, eu quero que o usuário entre no diretório /var/base/test1/test1 quando fizer o 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 do 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
    
por Peter 10.06.2018 / 02:23

1 resposta

1

Resposta curta

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

Resposta longa

openssh exige que os componentes ChrootDirectory e todos os caminhos que levam a ele sejam de propriedade da raiz e não possam ser gravados por outras pessoas. Esta é uma medida de segurança para garantir que ChrootDirectory não possa ser manipulado de forma mal-intencionada 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 pertencerem à raiz ou forem grupo ou mundo gravável, sshd recusará 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 você na direção certa.

Isso também é explicitamente declarado na página do manual sshd_config :

ChrootDirectory
Specifies the pathname of a directory to chroot(2) to after authentication. At session startup sshd(8) checks that all components of the pathname are root-owned directories which are not writable by any other user or group. After the chroot, sshd(8) changes the working directory to the user's home directory. [...]

For safety, it is very important that the directory hierarchy be prevented from modification by other processes on the system (especially those outside the jail). Misconfiguration can lead to unsafe environments which sshd(8) cannot detect.

Solução alternativa

Você pode, no entanto, definir o diretório inicial do usuário como /test1 ( sudo usermod test1 -d /test1 ), assim, depois que o chroot for aplicado, 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 session nesse diretório.

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1
    
por Lienhart Woitok 10.06.2018 / 09:59