É uma armadilha comum:
Todas as pastas até o chroot home devem ser de propriedade e só podem ser gravadas por root
user.
As pastas não podem ser graváveis em grupo - mesmo que o grupo seja root
.
Eu tenho uma versão 6.4 do CentOs com a Digital Ocean e gostaria de criar com sucesso usuários de SFTP e prendê-los ao diretório home chroot do próprio usuário, mas temo que eu esteja fazendo uma bagunça disso.
Eu tentei muitas coisas, muitas para listar aqui, já que a maioria provavelmente está incorreta ou não faz muito sentido, mas o que eu sinto deve ser o processo correto e o que eu tentei é: -
Crie um grupo para sftp
: -
groupadd sftp
Crie um usuário e defina seu diretório pessoal: -
useradd -d /var/www/vhosts/domain.com dummyuser
Defina uma senha para o usuário: -
passwd dummyuser
Altere o grupo do usuário para 'sftp': -
usermod -g sftp dummyuser
Defina o shell do usuário como /bin/false
: -
usermod -s /bin/false dummyuser
Editar subsistema em sshd_config
( /etc/ssh/
): -
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Adicione o seguinte ao final do arquivo sshd_config
: -
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Asseguro que todos os diretórios a seguir sejam root:root
: -
/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
Se eu tentar efetuar login no servidor via SFTP com o usuário dummyuser
(no WinSCP), obtenho o seguinte: -
Authentication log (see session log for details):
Using username "dummyuser".
Authentication failed.
Tudo o que quero alcançar é prender um usuário em seu diretório pessoal. Eu também tenho vsftpd configurado e configurado. Os usuários podem logar bem, mas teriam acesso a todo o servidor - eu só não consegui fazer com que a prisão funcione.
Esqueci de mencionar que reiniciei sshd
também: -
service sshd restart
Quando o erro é produzido no WinSCP, sua página de ajuda é aqui .
/var/log/secure
Substitui o nome real do servidor por server_name
.
Apr 28 14:20:56 server_name sshd[9944]: Accepted password for dummyuser from 80.194.255.4 port 44402 ssh2
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session opened for user dummyuser by (uid=0)
Apr 28 14:20:56 server_name sshd[9946]: fatal: bad ownership or modes for chroot directory component "/var/www/vhosts/"
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session closed for user dummyuser
Encontrei e configurei com sucesso o sftp no CentOS 6.5: link
Edite a configuração do sshd:
vim / etc / ssh / sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server (comment out the default with "#")
add:
Subsystem sftp internal-sftp
Match Group sftp-only
ChrootDirectory /var/www/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
Saia e salve.
Então:
mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only (take note the GID (Group ID). Here, in my example it's 500)
Para um novo usuário chamado "testuser" (membro do grupo sftp-only com o GID 500):
useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --shell /sbin/nologin testuser
(eu uso vazio o / etc / skel2 para que nenhum .bashrc seja copiado por padrão pelo CentOS)
mkdir -p /var/www/testuser/home/testuser
chown root:sftp-only /var/www/testuser
chmod 750 /var/www/testuser
chown root:root /var/www/testuser/home
chmod 755 /var/www/testuser/home
chown testuser:sftp-only /var/www/testuser/home/testuser
chmod 770 /var/www/testuser/home/testuser
Portanto, neste exemplo, consegui dar acesso seguro a empresas de consultoria externas que gerenciam sites. Você poderia depois de criar tudo isso:
mkdir /var/www/testuser/home/testuser/www.somesite.com
chown testuser:apache /var/www/testuser/home/testuser/www.somesite.com
chmod xxx (permissions to the website as needed, usually 750 so apache would get read access)
Pode-se ajustar tudo isso conforme necessário.
Espero que isso tenha ajudado!
Guy Boisvert IngTegration inc. link