Isso pode ser feito habilitando o módulo mod_users no Apache.
Você precisará configurar o UserDir na configuração do seu apache. Eu sugiro que você faça isso em um arquivo de configuração separado e inclua-o. Enrole a inclusão em
<IfModule mod_users.c>
Include conf/extra/userdir.conf
</IfModule>
Eu posso lhe dar todo o tutorial, mas isso deve ajudá-lo a configurar o Apache: link
Dica: se você está executando o SELinux (e deveria), você teria que dar acesso de leitura ao Apache às residências dos usuários. Você pode fazer isso definindo:
sudo setsebool -P httpd_enable_homedirs=On
Ele também precisa de permissões de arquivo para o diretório dirs do usuário public_html e permissões r-x nos diretórios pai até o root.
Obviamente, você precisa configurar o chroot para os usuários, por exemplo, no vsftpd. Instalar:
apt-get vsftpd
Para configurar o chrooting, abra /etc/vsftpd/vsftpd.conf com o vi ou nano. Encontre e descomente ou adicione: chroot_local_user = yes
Você pode obter o mesmo comportamento para o sftp que eu recomendo sobre FTP, abra / etc / ssh / sshd_config e adicione um bloco Match e esta linha:
Subsystem sftp internal-sftp
Match Group web_users
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Match
Isso fará chroot de qualquer usuário no grupo web_users . Além disso, você precisaria negar acesso ao shell configurando-o para / sbin / nologin:
useradd -G "web_users" -s /sbin/nologin new_user
Se este for um servidor de produção público, sugiro também que você aplique um pouco de hardening no sistema operacional, OpenSSH, Apache, PHP, vsftpd e aplique alguns iptables estritos e TCP wrappers. Eu recomendo que você deixe o SELinux no lugar também.