
Есть много руководств по созданию chrooted SFTP, но я хотел бы использовать SSH, потому что это намного быстрее, чем просто wget
, unzip
, mysql
и mysqldump
чем метаться между FTP и phpMyAdmin. Метод должен быть также чистым (без ручной ldd
магии) и расширяемым, чтобы я мог легко добавлять и обновлять пакеты.
решение1
К счастью, мне удалось придумать, как это сделать.
Шаг 1: Добавьте группу для пользователей chroot
groupadd chrootusers
Шаг 2: Настройка SSH
nano /etc/ssh/sshd_config
Заменять
Subsystem sftp /usr/libexec/openssh/sftp-server
С
Subsystem sftp internal-sftp
Вставить в конец
Match Group chrootusers
ChrootDirectory /home/%u
Бегать
systemctl restart sshd
systemctl status sshd
Шаг 3: Добавьте пользователя
Измените peter
имя пользователя на желаемое.
export NEW_USER_NAME=peter
useradd ${NEW_USER_NAME}
usermod -G chrootusers -d / ${NEW_USER_NAME}
passwd ${NEW_USER_NAME}
Шаг 4: Установка пакетов и создание необходимой структуры каталогов.
yum --installroot=/home/${NEW_USER_NAME} --releasever=7 --nogpg --disablerepo='*' --enablerepo=base install centos-release openssh-clients wget vi nano zip unzip tar mariadb findutils iputils bind-utils rsync
Шаг 5: Монтируем proc
иdev
echo "none /home/${NEW_USER_NAME}/proc proc defaults 0 0" >> /etc/fstab
echo "/dev /home/${NEW_USER_NAME}/dev none bind 0 0" >> /etc/fstab
Бегать
mount -a
Шаг 6: Настройте DNS-серверы
echo "nameserver 8.8.8.8" >> /home/${NEW_USER_NAME}/etc/resolv.conf
echo "nameserver 8.8.4.4" >> /home/${NEW_USER_NAME}/etc/resolv.conf
Вот и все.
Имейте в виду, что $NEW_USER_NAME
это привязано к текущему сеансу!
При добавлении другого пользователя начните с шага 3.
Чтобы установить дополнительные пакеты позже, используйте ту же команду, что и в шаге 4.
При входе через SSH вы получите сообщения типа cannot find name for user ID x
. Их можно смело игнорировать, но если вы хотите от них избавиться, вам нужно будет продублировать пользователя в chroot:
export NEW_USER_ID=$(id -u ${NEW_USER_NAME})
export NEW_USER_GROUP_ID=$(id -g ${NEW_USER_NAME})
chroot /home/${NEW_USER_NAME} /bin/bash -c 'useradd -u ${NEW_USER_ID} ${NEW_USER_NAME}'
chroot /home/${NEW_USER_NAME} /bin/bash -c 'groupadd -g ${NEW_USER_GROUP_ID} chrootusers'