Encaminha o usuário do SFTP para o subdiretório chroot após a autenticação

6

Eu configurei um servidor SFTP usando o OpenSSH, tudo funciona bem e os usuários que eu criei podem se conectar.

Após a autenticação, os usuários se encontram diretamente dentro do /chroot , um diretório no qual eles não podem gravar. Então eu coloquei um /subdirectory em /chroot eles têm acesso de escrita para (inspirado por este blog post ) que funciona bem também.

No entanto, devido à natureza do projeto em que estou trabalhando, os usuários devem se encontrar diretamente em uma pasta em que possam gravar após a autenticação. Encaminhá-los para o /chroot/subdirectory pode ser a melhor solução, mas não encontrei nenhum recurso explicando como conseguir isso.

Isso pode ser feito? Como?

    
por zerodot 10.07.2015 / 15:13

2 respostas

3

[EDIT] Sim, acredito que seja possível, mas também acredito que não com o openssh:

Aqui está como eu chroot sftp usando openssh:

Eu coloco os usuários do sftp em um grupo especial sftponly que é identificado no arquivo sshd_config . Eu me certifico de que os usuários do sftp não possuam shell (para que eles não possam efetuar login com ssh) e usem a variável de ambiente .%h para forçá-los a um subdiretório sftp chroot com o nome do diretório home usando a diretiva ChrootDirectory . Outras variáveis de ambiente interpretadas por sshd_config estão documentadas no página man do sshd_conf assim:

The pathname may contain the following tokens that are expanded at runtime once the connecting user has been authenticated: %% is replaced by a literal '%', %h is replaced by the home directory of the user being authenticated, and %u is replaced by the username of that user.

Aqui está uma cópia das minhas anotações para conseguir isso no OpenBSD, se você usar um sistema diferente, a variável de ambiente .%h pode diferir:

# 1. Create the sftp jail directories
# These directory permissions work with this /etc/ssh/sshd_config:
# drwxr-xr-x  4 root    wheel  512 May 14 16:20 /home/sftproot
# drwxr-xr-x  3 root  wheel  512 May 14 16:21 /home/sftproot/home
# drwxr-xr-x  3 root  wheel  512 May 14 16:37 /home/sftproot/home/User01
# drwxr-xr-x  3 User01  sftponly  512 May 14 16:39 /home/sftproot/home/User01/upload
# drwxr-xr-x  3 root  wheel  512 May 14 16:37 /home/sftproot/home/User02
# drwxr-xr-x  3 User02  sftponly  512 May 14 16:39 /home/sftproot/home/User02/upload

# 2. Make sure /etc/ssh/sshd_config jails /home/sftproot/.%h

# 3. Create a group whose members will only be allowed sftp access
# groupadd sftponly

# 4. Create User01 + User02 whom will only get sftp access
# useradd -s /sbin/nologin -m -G sftponly User01
# useradd -s /sbin/nologin -m -G sftponly User02

# 5. In /etc/ssh/sshd_config enable use of chroot(internal-sftp) then force chroot dirs per user:
# override default of no subsystems
# Subsystem     sftp    /usr/libexec/sftp-server
# Subsystem       sftp    internal-sftp
# Rules for sftponly members
# Match group sftponly
#         ChrootDirectory /home/sftproot/.%h
#         X11Forwarding no
#         AllowTcpForwarding no
#        ForceCommand internal-sftp

# [Comment] Make sure /etc/ssh/sshd_config jails /home/sftproot/.%h
# Which will translate .%h to /home/$username

# [Comment] The sftp users will not be able to log in outside of sftp (as they have no shell).
# As they sftp in they will land in the /home/sftproot/home/Userxx directory which
# will be named "./" and where they have no write access.
# However the directory ./upload is read/writable.

[EDIT parte 2] No entanto, o sshd_conf man page também especifica que:

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.

Assim, o caminho do diretório chroot, incluindo a parte especificada pela expansão da variável, é esperado e testado pelo sshd para ser possuído e gravável exclusivamente pelo root. Portanto, um usuário de um serviço chrooted do openssh sftp precisa de subdiretórios graváveis para poder gravar no diretório inicial.

Acredito que isso não seja um requisito para todos os servidores ssh. Também usamos Tectia , onde observo que os usuários podem gravar em seus respectivos diretórios raiz. No entanto, nós o executamos apenas onde o Windows é um requisito, portanto, lamentavelmente não posso testar prontamente a configuração * nix correspondente. A página de suporte do chrooting do Tectia sftp não Especifique explicitamente que a página inicial do usuário precisa ser de propriedade do root em um ambiente Unix. Eu diria, portanto, que com o Tectia isso não é um requisito, mas que a propriedade de um rootdir de usuário root pode ser a do usuário real.

    
por 10.07.2015 / 17:08
0

ChrootDirectory / upload /% u

Dados internos do sftp -d do ForceCommand

Isto irá colocar o sftp no diretório / upload / UserXX / data. O diretório de dados pertence e é lido / gravável pelo UserXX

    
por 14.06.2018 / 16:37