J'ai construit quelques hôtes virtuels à l'aide de nginx, mais je souhaite maintenant que certains utilisateurs les modifient sans qu'ils ne puissent rien modifier en dehors du répertoire de l'hôte.
J'ai essayé tellement de choses mais rien ne fonctionne !! C'est là où je suis, en ce moment:
/etc/vsftpd.conf
:
listen=YES
local_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
tpd_banner=Welcome to mikes company sFTP service. Play Nice!
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Script shell pour créer un utilisateur:
#!/bin/bash
user=$1
group=$2
directory=$3
if [ "$3" != "" ]; then
echo "You are creating an ftp user -> "$user" inside the group -> "$group" with privelidges for the domain "$directory
else
echo "ERROR!!!"
echo "please enter the command followed by the user and then group and then domain (example.co.uk)"
exit 1
fi
groupadd $group
useradd -G $group $user
Sudo chown -vR :$group /NAS/$directory/
Sudo chmod -vR g+w /NAS/$directory/
Sudo adduser www-data $group
Sudo chown -R www-data:$group /NAS/$directory/
usermod --home /NAS/$directory/ $user
passwd $user
Mais non, cela fonctionne. Lorsque je configure l’utilisateur sur dreamweaver, il peut lire, accéder et modifier la plupart des fichiers sur l’ensemble de l’ordinateur, ce qui est non ce que je veux!
Qu'est-ce que je fais mal?
/etc/group
:
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,max
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:max
floppy:x:25:
tape:x:26:
Sudo:x:27:max
audio:x:29:Pulse
dip:x:30:max
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:max
sasl:x:45:
plugdev:x:46:max
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
netdev:x:102:
crontab:x:103:
syslog:x:104:
Fuse:x:105:
messagebus:x:106:
ssl-cert:x:107:
lpadmin:x:108:max
scanner:x:109:saned
mlocate:x:110:
ssh:x:111:
utempter:x:112:
avahi-autoipd:x:113:
rtkit:x:114:
saned:x:115:
whoopsie:x:116:
avahi:x:117:
nopasswdlogin:x:119:
bluetooth:x:120:
colord:x:121:
Pulse:x:122:
Pulse-access:x:123:
max:x:1000:
sambashare:x:124:max
landscape:x:118:
maxy:x:1001:maxWeb,www-data
maxWeb:x:1002:
maxy2:x:1003:maxWeb2
maxWeb2:x:1004:
fax:x:21:
voice:x:22:
cdrom:x:24:max
floppy:x:25:
tape:x:26:
Sudo:x:27:max
audio:x:29:Pulse
dip:x:30:max
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:max
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
netdev:x:102:
crontab:x:103:
syslog:x:104:
Fuse:x:105:
messagebus:x:106:
ssl-cert:x:107:
lpadmin:x:108:max
scanner:x:109:saned
mlocate:x:110:
ssh:x:111:
mlocate:x:110:
ssh:x:111:
utempter:x:112:
avahi-autoipd:x:113:
rtkit:x:114:
saned:x:115:
whoopsie:x:116:
avahi:x:117:
nopasswdlogin:x:119:
bluetooth:x:120:
colord:x:121:
Pulse:x:122:
Pulse-access:x:123:
max:x:1000:
sambashare:x:124:max
landscape:x:118:
maxy:x:1001:maxWeb,www-data
maxWeb:x:1002:
maxy2:x:1003:maxWeb2
maxWeb2:x:1004:
maxy3:x:1005:maxWeb3
maxWeb3:x:1006:
maxy4:x:1007:maxWeb4
maxWeb4:x:1008:
sftponly:x:1009:maxWeb7
ssh-users:x:1010:max
maxWeb7:x:1011:
maxWebb:x:1012:
sftp:x:1013:
ftpGroup:x:1014:maxwebb2,maxy1
maxwebb2:x:1015:
maxy1:x:1016:
ftp:x:125:
maximiliangroup:x:1017:maxymil
maxymil:x:1018:
maximiliangroup:x:1017:maxymil
maxymil:x:1018:
maximilianmitchell.info:x:1019:maxwebsite,www-data
maxwebsite:x:1020:
maximilianweb:x:1021:www-data
maximilianweb2:x:1022:www-data
maximilianweb4:x:1023:www-data,maxwebsite4
maxwebsite5:x:1024:www-data
Se connecter en tant que nouvel utilisateur:
$ su - maxwebsite5
Password:
$ ls
public_html
$ cd /home
$ cd max
$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied
Lorsque je me connecte à l'aide de dreamweaver et que le répertoire racine est défini sur /
, je peux voir et modifier la plupart des éléments, y compris les autres répertoires d'hôtes virtuels:
Où comme lorsque je mets le répertoire racine à zéro, cela me mène directement au /NAS/$directory/
qui est un peu ce que je veux!
Mais je veux vraiment que l'utilisateur pense que son répertoire /
est /NAS/$directory/
J'ai passé 3 ou 4 jours à essayer de résoudre ce problème. Voici un script shell pour un utilisateur:
#!/bin/bash
user=$1
directory=$2
if [ "$2" != "" ]; then
echo "You are creating an ftp user -> "$user" with privelidges for the domain "$directory
else
echo "ERROR!!!"
echo "please enter the command followed by the user and then domain (example.co.uk)"
exit 1
fi
Sudo useradd -d /NAS/$directory -m $user -s /usr/bin/rssh
passwd $user
echo "added user"
Sudo chgrp -R www-data /NAS/$directory
echo $user >> /etc/ftpusers
echo "prevented ftp access for user"
echo -e "
Match user $user
ChrootDirectory /NAS/$directory
ForceCommand internal-sftp
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
" >> /etc/ssh/sshd_config
echo "edited /etc/ssh/sshd_config"
Sudo service ssh restart
Vous devez également télécharger le package rssh
, éditer le /etc/rssh.conf
et décommenter la ligne allowsftp
.
Si je comprends bien la question, vous devez utiliser local_root
local_root=/NAS/$USER/
et vous aurez aussi besoin de
allow_writeable_chroot=YES
si vous souhaitez que l'utilisateur puisse écrire dans son dossier racine
ou si vous souhaitez avoir plus de contrôle, vous utiliserez probablement des utilisateurs virtuels et des fichiers de configuration d’utilisateur.
si oui, essayez ce qui suit
Essayez d'utiliser
useradd -g $group $user
ou
useradd -N -g $group $user
au lieu de
useradd -G $group $user
Voici pourquoi: from buntu.com: Ubuntu Manpage: useradd - crée un nouvel utilisateur ou met à jour les informations du nouvel utilisateur par défaut :
-g, --gid GROUP Nom ou numéro du groupe de connexion initial de l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit faire référence à un groupe déjà existant.
S'il n'est pas spécifié, le comportement de useradd dépendra de la variable USERGROUPS_ENAB dans /etc/login.defs. Si cette variable est définie sur yes (ou -U/- le groupe d'utilisateurs est spécifié sur la ligne de commande), un groupe sera créé pour l'utilisateur, avec le même nom que son nom de connexion . . Si la variable est définie sur no (ou -N/- aucun groupe d'utilisateurs n'est spécifié sur la ligne de commande), useradd définira le groupe principal du nouvel utilisateur sur la valeur spécifiée par la variable GROUP dans/etc/default./useradd, ou 100 par défaut.
-N, --no-user-group Ne créez pas de groupe portant le même nom que l'utilisateur, mais ajoutez-le au groupe spécifié par l'option -g ou la variable GROUP. dans/etc/default/useradd .
Le comportement par défaut (si les options -g, -N et -U ne sont pas spécifiées) est défini par la variable USERGROUPS_ENAB dans /etc/login.defs.
Je pense que ce qui se passe, c’est que tout utilisateur créé finit par appartenir à deux groupes différents, le groupe par défaut créé en omettant -g
(qui possède peut-être des autorisations de lecture/écriture sur plusieurs répertoires) et celui spécifié par useradd -G $group $user