Como você habilita o acesso SFTP de chroot a um arquivo no RHEL 6.5?

1

Estou tentando configurar o acesso SFTP com chroot a um servidor RHEL 6.5. Eu passei pelas etapas padrão de editar o arquivo sshd_config para corresponder a qualquer usuário no grupo e fazer um chroot assim:

Match group prisoners
    ChrootDirectory /home/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

bem como para definir

Subsystem sftp internal-sftp

O usuário 'teste' tem um diretório como segue:

[root@ip-10-0-1-158 ~]# ls -l /home/test
total 4
drwxrwxr-x. 3 root prisoners 4096 Jul 20 17:55 SFTP

(Eu também defini recursivamente permissões de propriedade e acesso neste diretório)

e está no grupo adequado:

[root@ip-10-0-1-158 ~]# sudo -u test id
uid=501(test) gid=498(prisoners) groups=498(prisoners) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Quando tento editar ou criar arquivos no diretório / home / test / SFTP como o usuário de teste através da minha sessão ssh, tudo funciona conforme o esperado. Se eu fizer o login via WinSCP, eu me autentico corretamente e posso ver o conteúdo do diretório / home / test (mas não modificá-los). No entanto, ele não permite visualizar, editar ou criar arquivos no diretório / home / test / SFTP.

Mensagem de erro do WinSCP:

Error listing directory '/SFTP'.
Permission denied.
Error code: 3
Error message from server: Permission denied

Qualquer ajuda seria muito apreciada.

Nota: Eu configurei com êxito um acesso similar ao chrooted sftp no RHEL 7 e estou lutando para entender por que as permissões do usuário parecem não estar funcionando via SFTP.

    
por Andoo_pls 21.07.2017 / 01:45

2 respostas

0

Note: I have successfully set up a similar sftp chrooted access on RHEL 7 and am struggling to understand why the user permissions seem to not be working via SFTP.

Provavelmente, os rótulos SELinux deram errado. Verifique se estão corretos e tente corrigi-los usando

# restorecon -RF /
    
por 21.07.2017 / 15:45
0

A maneira que eu configurei (para ensinar uma classe de programação) em um sistema Debian é:

Primeiro, crie o usuário. Aqui está o script que eu uso, ele adiciona o usuário, cria o diretório home, coloca-os em um grupo de tipos de prisioneiros, copia em alguns arquivos padrão, configura permissões e propriedades, cria bancos de dados sql, etc. Excedente para você, você pode usar apenas o primeiras linhas.

#!/bin/bash

# $1 is username to create
# call as   root@darkstar:~/ # ./script.sh username

# add the user and put them in the jailusers group, set their home 
# directory so it is at http://www.example.com/username 
# and set their shell to /bin/false so they can't ssh in
useradd -g jailusers -d /var/jailweb/www-example.com/$1 -s /bin/false $1
mkdir -p /var/jailweb/www-example.com/$1

# i copy some template files in for them - this is a programming class
cp /root/jailtemplate-filez/*php /var/jailweb/www-example.com/$1

# fix the ownership of them - the /var/jailweb/www-example.com has been
# chmodded as g+s so the webserver will be able to read all the files
# note that this is NOT the ideal way to deal with this, but was needed
# for my purposes
chown  $1.www-data /var/jailweb/www-example.com/$1
chown  $1.www-data /var/jailweb/www-example.com/$1/index.php
chmod -R 750 /var/jailweb/www-example.com/$1

# put their name on their front page
sed -i s/STUDENT/$1/g /var/jailweb/www-example.com/$1/index.php

# generate a "random" password for sftp login
salt="oh god there has to be a better way!"
lpass='echo $1 $salt | md5sum | cut -c 5-15'

# generate a "different" "random" password
# for them to use for mysql access
mpass='echo $1 $salt | md5sum | cut -c 13-22'
# and set it for the userlogin programmatically
echo $1:$lpass | chpasswd

# create a sql scritp file to create their mysql accounts and
# create a database for them, grant rights, etc
cat webusers-mysql_template | sed s/USERNAME/$1/g | sed s/PASS/$mpass/g >> webusersusers.sql

# put their mysql info into a php file in their web directory
cat dbinfo.php-template | sed s/USERNAME/$1/g | sed s/PASSWORD/$mpass/g > /var/jailweb/www-example.com/$1/dbinfo.php
# make sure the webserver can read it... this all SHOULD be setup for suexec
# and having each user in their own primary group... then the sticky bit, etc
# wouldn't be needed, but I'm lazy
chown $1.www-data /var/jailweb/www-example.com/$1/dbinfo.php
chmod 440 /var/jailweb/www-example.com/$1/*.php

# if there needs to be a directory the webserver can
# write to, uncomment these
#mkdir -p /var/jailweb/www-example.com/$1/writeable
#chown $1.www-data /var/jailweb/www-example.com/$1/writeable
#chmod 770 /var/jailweb/www-example.com/$1/writeable

Em seguida, em /etc/ssh/sshd_config certifique-se de remover o comentário do provedor sftp padrão e adicionar um subsistema interno:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Finalmente, também em /etc/ssh/sshd_config adicione sua correspondência de grupo. Eu defino um padrão umask um pouco diferente no meu -

Match Group jailusers
        ChrootDirectory /var/jailweb
        ForceCommand internal-sftp -u 0027

Observe que estou apontando o / do chroot para o diretório que contém seu diretório inicial.

Reinicie o daemon ssh e você deve estar pronto. Seus usuários devem poder adicionar / editar / apagar coisas em seu diretório / username. Se você quiser adicionar um diretório compartilhado, precisará criá-lo e alterar a propriedade dele

    
por 21.07.2017 / 04:10