User Tools

Site Tools


ssh_chroot

ssh chroot

По умолчанию, при подключении по SFTP пользователь имеет возможность спускаться по дереву каталогов и видеть структуру директорий. А при наличии прав, редактировать и удалять файлы. Доступ можно ограничить, создав специальное окружение для определенной директории и всех ее поддиректорий.

Пользователи и группы

Задача
Надо предоставить пользователям user1 и user2 доступ по sftp к каталогам в которых лежат их сайты и запереть их там.
Пользователю user3 надо предоставить доступ к произвольному каталогу.

Создаем директории:

# Для user1
mkdir -p /var/www/html/user1/mysite
 
# Для user2
mkdir -p /var/www/html/user2/mysite
 
# Для user3
mkdir -p /mnt/project/skynet

Пользователи user1 и user2 не должны подниматься выше /var/www/html/user1/mysite и /var/www/html/user2/mysite соответственно. Пользователь user3 не должен подниматься выше /mnt/project/skynet.

Создание групп пользователей:

Создаем группу sftp_only для пользователей user1 и user2. Создаем группу sftp_user3 для пользователя user3.

groupadd sftp_only
groupadd sftp_user3

Создание пользователей: Создаем пользователей, задаем им домашнюю директорию, шелл и добавляем их в группу.

useradd -d /var/www/html/user1/mysite -s /sbin/nologin -G sftp_only user1
useradd -d /var/www/html/user2/mysite -s /sbin/nologin -G sftp_only user2
useradd -d /mnt/project/skynet -s /bin/bash -G sftp_user3 user3

Задаем пользователям пароли

passwd UserName

В файлах /etc/group и /etc/passwd проверяем, что пользователи создались правильно

cat /etc/passwd | grep user
user1:x:1001:1003::/var/www/html/user1/mysite:/sbin/nologin
user2:x:1002:1004::/var/www/html/user2/mysite:/sbin/nologin
user3:x:1003:1005::/mnt/project/skynet:/bin/bash
cat /etc/group | grep sftp
sftp_only:x:1001:user1,user2
sftp_user3:x:1002:user3

Выставление прав на каталог
Директории /var/www/html/user1, /var/www/html/user2 и /mnt/project должны принадлежать пользователю и группе root.

chown root: /var/www/html/user1
chown root: /var/www/html/user2
chown root: /mnt/project/
chmod 755 /var/www/html/user1
chmod 755 /var/www/html/user2
chmod 755 /mnt/project

Директории /var/www/html/user1/mysite должна принадлежать пользователю и группе user1, а /var/www/html/user2/mysite должна принадлежать user2

chown -R user1:user1 /var/www/html/user1/mysite/
chown -R user2:user2 /var/www/html/user2/mysite/
chown -R user3:user3 /mnt/project/skynet

Настройка ssh

Вносим изменения в конфигурацию sshd, файл /etc/ssh/sshd_config.

# Закомментируем строку
Subsystem      sftp    /usr/libexec/openssh/sftp-server
 
# И под ней добавляем новую строчку
Subsystem       sftp    internal-sftp
 
# Определяем пользователей и ip адреса с которых на сервер можно зайти по ssh
AllowUsers root@11.22.33.44 user1@10.10.10.14,10.10.10.15 user2@192.168.22.*,4.4.5.0/24 user3@192.168.22.17
 
# В конец файла добавляем для групп sftp_only и sftp_user3
Match Group sftp_only
    ChrootDirectory /var/www/html/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
 
Match Group sftp_user3
    ChrootDirectory /mnt/project/skynet
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

Перезапускаем демон sshd

systemctl restart sshd.service

Troubleshooting

Смотрим логи

tail -f -n20 /var/log/auth.log

При попытке подключиться по sftp получаем ошибку:

fatal: bad ownership or modes for chroot directory

Следует выставить правильные права. Система требует, чтобы все каталоги пути имели права 755 и их владельцем был root

ssh_chroot.txt · Last modified: 2023/04/06 10:28 (external edit)