J'ai une version 6.4 de CentOs avec Digital Ocean et je voudrais créer avec succès des utilisateurs SFTP et les emprisonner dans le répertoire personnel de chroot de l'utilisateur, mais je crains d'en faire un gâchis.
J'ai essayé beaucoup de choses, beaucoup trop pour les énumérer ici, car la plupart sont probablement incorrectes ou n'auront pas beaucoup de sens, mais ce que je pense devrait être le bon processus et ce que j'ai essayé est: -
Créez un groupe pour sftp
: -
groupadd sftp
Créez un utilisateur et définissez son répertoire personnel: -
useradd -d /var/www/vhosts/domain.com dummyuser
Définissez un mot de passe pour l'utilisateur: -
passwd dummyuser
Changez le groupe d'utilisateurs en 'sftp': -
usermod -g sftp dummyuser
Définissez le shell de l'utilisateur sur /bin/false
: -
usermod -s /bin/false dummyuser
Modifier le sous-système dans sshd_config
(/etc/ssh/
): -
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Ajoutez ce qui suit au bas du sshd_config
fichier:-
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Je m'assure que tous les répertoires suivants sont root:root
: -
/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
Si j'essaie ensuite de me connecter au serveur via SFTP avec l'utilisateur dummyuser
(dans WinSCP), j'obtiens ce qui suit: -
Authentication log (see session log for details):
Using username "dummyuser".
Authentication failed.
Tout ce que je veux réaliser, c'est emprisonner un utilisateur dans son répertoire personnel. J'ai également installé et configuré vsftpd. Les utilisateurs pouvaient se connecter correctement mais auraient accès à l'ensemble du serveur - je n'ai tout simplement pas réussi à obtenir de l'emprisonnement au travail.
J'ai oublié de mentionner, j'ai ensuite redémarré sshd
aussi: -
service sshd restart
Lorsque l'erreur est produite dans WinSCP, leur page d'aide à ce sujet est ici .
/var/log/secure
J'ai remplacé le nom réel du serveur par 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
C'est un piège commun:
Tous les dossiers jusqu'au chroot home doivent appartenir et être accessibles en écriture uniquement par l'utilisateur root
.
Les dossiers ne peuvent pas être inscriptibles en groupe - même si le groupe est root
.
J'ai trouvé et configuré avec succès sftp sur CentOS 6.5: http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
Modifier la configuration 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
Quittez et enregistrez.
Alors:
mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only (take note the GID (Group ID). Here, in my example it's 500)
Pour un nouvel utilisateur nommé "testuser" (membre du groupe sftp uniquement avec GID 500):
useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --Shell /sbin/nologin testuser
(J'utilise/etc/skel2 vide donc aucun .bashrc etc n'est copié par défaut par 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
Donc, dans cet exemple, je l'ai fait pour donner un accès sécurisé aux cabinets de conseil externes qui gèrent les sites Web. Vous pouvez après avoir créé tout cela faire:
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)
On pourrait affiner tout cela au besoin.
J'espère que cela vous a aidé!
Guy Boisvert IngTegration inc. http://www.ingtegration.com