Eu realmente preciso de ajuda, estou tentando prender um usuário usando ubuntu
.
Coisa a ser observada:
james
é o usuáriosshusers
é o grupo/home/james/upload/
é o diretório onde desejo bloquear o usuário
sshd_config:
AllowGroups sshusers
Match Group sshusers
ChrootDirectory /home/%u/upload/
ForceCommand internal-sftp
EUseguiu uma respostano askubuntu, aqui estão meus comandos
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
Problema:
Eu recebo esse erro
Error: Network error: Software caused connection abort
Error: Could not connect to server
Investiguei nos logs e encontrei isto:
fatal: propriedade ou modos incorretos para o componente do diretório chroot "/home/james/upload/"
Mas se eu executar os seguintes comandos
sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload
Funciona perfeitamente, o usuário pode se conectar, a pasta está bloqueadaMAS não é possível descartar arquivosno diretório
Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command: put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error: /test: open for write: permission denied
Error: File transfer failed
Por favor, conselho, eu pesquisei tanto no Google que todos os links estão roxos agora (visitado :P
)
Estou usando o cliente filezilla para testar o SFTP
.
Responder1
A ChrootDirectory
diretiva espera que o diretório chroot seja de propriedade de root
e não possa ser gravado por mais ninguém. Então vocênão podeprender um usuário em um diretório e conceder permissão ao usuário para gravar nesse diretório. Você pode:
Chroot para casa, carregue paraupload/
O primeiro conjunto de comandos que você tentou está correto para isso:
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
No entanto, a opção sshd_config
seria:
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
( %h
é substituído pelo diretório inicial do usuário que está sendo autenticado, equivalente a /home/%u
na maioria dos casos.) Além disso, para limitar a visibilidade das pastas /home/james
e restringir a permissão de gravação, use as opções recursivas para chown
e chmod
no primeiro comando para /home/james
e remover read
permissões. O conjunto modificado ficaria assim:
sudo chown root /home/james -R
sudo chmod go-rwx /home/james -R # Disallow traversing any directory in home
sudo chmod go+x /home/james # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload
Agora o usuário só deve poder acessar /home/james/upload
, ou /upload
.
Chroot para fazer upload, fazer upload paraupload/some_directory
Praticamente o mesmo que acima, substituindo /home/james/
por /home/james/upload
e /home/james/upload
por /home/james/upload/some_directory
. Nenhum ganho específico.
Altere o diretório inicial de james
para/upload
O comportamento usual do ChrootDirectory é: "Após o chroot, o sshd(8) muda o diretório de trabalho para o diretório inicial do usuário." Então, mudamos james
o diretório inicial de:
usermod -d /upload user
Em seguida, defina ChrootDirectory
como /home/%u
. Use as mesmas restrições da primeira opção.
Responder2
O mecanismo chroot sftp integrado no OpenSSH requer que o diretório chroot seja de propriedade do root (e não possa ser gravado pelos usuários). Isso pode ser um problema se o diretório for um compartilhamento SMB/CIFS, por exemplo, onde você teria que fazer a montagem vinculada.
Uma das soluções mais flexíveis seria usar MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)
apt install mysecureshell
Funciona sem qualquer modificação nas configurações padrão do OpenSSH. Tudo o que você precisa fazer é transformar seu shell de login de usuário SFTP em mysecureshell, e ele cuidará do chroot ACL/virtual para você. Veja a documentação para detalhes,
Por exemplo, depois de instalar o MySecureShell, você pode adicionar um usuário SFTP (restrito ao seu diretório inicial) conforme abaixo,
sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01
Do exposto acima, o usuário 'sftpuser01' será virtualmente chrootado para '/home/sftpuser01' na sessão SFTP.
Ele também fornece muitas opções flexíveis para controlar ACL, grupo, etc., configurando '/etc/ssh/sftp-config'. Consultehttp://mysecureshell.readthedocs.io/en/latest/configuration.htmlpara detalhes.