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