web-dev-qa-db-fra.com

Comment verrouiller l'utilisateur dans un répertoire

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!

enter image description here

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: enter image description here

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/

3
maxisme

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.

0
maxisme

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

Comment configurer des utilisateurs virtuels pour vsftpd avec l’accès à un sous-répertoire spécifique?

0
Avenyet

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

0
kos