Как заблокировать пользователя в одном каталоге
Я создал несколько виртуальных хостов, используя nginx, но теперь я хочу, чтобы некоторые пользователи могли изменять их без возможности редактировать что-либо еще, кроме каталога хоста.
Я пробовал так много вещей, но ничего не работает!! Вот где я сейчас нахожусь:
/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
Сценарий оболочки для создания пользователя:
#!/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
Но не это работает. Когда я настраиваю пользователя в Dreamweaver, он может читать, получать доступ и редактировать большинство файлов на всем компьютере, а это не то, что я хочу!
Что я делаю неправильно?
/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
Вход в систему как новый пользователь:
$ su - maxwebsite5
Password:
$ ls
public_html
$ cd /home
$ cd max
$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied
Когда я вхожу в систему с помощью Dreamweaver и устанавливаю корневой каталог как /
Я могу видеть и редактировать большинство вещей, включая другие каталоги виртуальных хостов:
Где, когда я устанавливаю корневой каталог как ничего, я сразу /NAS/$directory/
что-то вроде того, что я хочу!
Но я действительно хочу, чтобы пользователь думал, что его /
каталог /NAS/$directory/
3 ответа
Хорошо, я потратил 3 или 4 дня, пытаясь разобраться в этом. Вот сценарий оболочки для пользователя:
#!/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
Вы также должны загрузить пакет rssh
и редактировать /etc/rssh.conf
и раскомментируйте строку allowsftp
Если я правильно понимаю вопрос, вам нужно использовать local_root
local_root=/NAS/$USER/
и вам тоже понадобится
allow_writeable_chroot=YES
если вы хотите, чтобы пользователь мог писать в свою корневую папку
или если вы хотите иметь больший контроль, вы, вероятно, должны были использовать виртуальных пользователей и файлы конфигурации пользователя.
если это так, попробуйте следующее
Как настроить виртуальных пользователей для vsftpd с доступом к определенной подкаталоге?
Попробуй использовать
useradd -g $group $user
или же
useradd -N -g $group $user
вместо
useradd -G $group $user
И вот почему: с Ubuntu.com: Ubuntu Manpage: useradd - создайте нового пользователя или обновите информацию о новом пользователе по умолчанию:
-g, --gid GROUP Имя группы или номер начальной группы входа пользователя. Имя группы должно существовать. Номер группы должен ссылаться на уже существующую группу.
Если не указано, поведение useradd будет зависеть от переменной USERGROUPS_ENAB в /etc/login.defs. Если для этой переменной задано значение yes (или -U/- user-group указана в командной строке), для пользователя будет создана группа с тем же именем, что и ее логин. Если для переменной задано значение no (или -N/- no-user-group не указана в командной строке), useradd установит для основной группы нового пользователя значение, указанное в переменной GROUP в / etc / default / useradd или 100 по умолчанию.
-N, --no-user-group Не создавать группу с тем же именем, что и у пользователя, но добавить пользователя в группу, указанную параметром -g или переменной GROUP в / etc / default / useradd.
Поведение по умолчанию (если параметры -g, -N и -U не указаны) определяется переменной USERGROUPS_ENAB в /etc/login.defs.
Я полагаю, что происходит то, что любой пользователь, созданный на самом деле, в конечном итоге принадлежит к двум различным группам, по умолчанию создается путем пропуска -g
(который, возможно, имеет разрешения на чтение / запись для нескольких каталогов) и тот, который указан useradd -G $group $user