У меня есть CentOs версии 6.4 с Digital Ocean, и я хотел бы успешно создавать пользователей SFTP и помещать их в собственный домашний каталог chroot, но я боюсь, что напортачу с этим.
Я пробовал много вещей, слишком много, чтобы перечислять здесь на самом деле, поскольку большинство из них, вероятно, неверно или не имеет особого смысла, но то, что я считаю, должно быть правильным процессом, и то, что я пробовал, это:
Создать группу для sftp
: -
groupadd sftp
Создайте пользователя и установите его домашний каталог: -
useradd -d /var/www/vhosts/domain.com dummyuser
Установите пароль для пользователя: -
passwd dummyuser
Измените группу пользователя на sftp: -
usermod -g sftp dummyuser
Установите оболочку пользователя на /bin/false
: -
usermod -s /bin/false dummyuser
Изменить подсистему в sshd_config
(/etc/ssh/
): -
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Добавьте следующее в нижнюю часть sshd_config
файл:-
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Я удостоверяюсь, что все следующие каталоги root:root
: -
/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
Если я затем попытаюсь войти на сервер через SFTP с пользователем dummyuser
(в WinSCP) я получаю следующее: -
Authentication log (see session log for details):
Using username "dummyuser".
Authentication failed.
Все, чего я хочу добиться, - это поместить пользователя в домашний каталог. Я также установил и настроил vsftpd. Пользователи могли нормально войти в систему, но имели бы доступ ко всему серверу - мне просто не удалось заставить работать тюрьму.
Забыл упомянуть, затем перезапустил sshd
также:-
service sshd restart
Когда ошибка возникает в WinSCP, их страница справки по этому поводу Вот.
/var/log/secure
Я заменил фактическое имя сервера на server_name
.
Apr 28 14:20:56 server_name sshd[9944]: Accepted password for dummyuser from 80.194.255.4 port 44402 ssh2
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session opened for user dummyuser by (uid=0)
Apr 28 14:20:56 server_name sshd[9946]: fatal: bad ownership or modes for chroot directory component "/var/www/vhosts/"
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session closed for user dummyuser
Это распространенная ошибка:
Все папки до chroot home должны принадлежать и доступны для записи только root
пользователь.
Папки не могут быть доступны для групповой записи, даже если группа root
.
Я нашел и успешно настроил sftp на CentOS 6.5: http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
Отредактируйте конфигурацию sshd:
vim / и т.д. / ssh / sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server (comment out the default with "#")
add:
Subsystem sftp internal-sftp
Match Group sftp-only
ChrootDirectory /var/www/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
Выйти и сохранить.
Затем:
mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only (take note the GID (Group ID). Here, in my example it's 500)
Для нового пользователя с именем "testuser" (член группы только для sftp с GID 500):
useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --shell /sbin/nologin testuser
(я использую пустой / etc / skel2, поэтому CentOS по умолчанию не копирует .bashrc и т.д.)
mkdir -p /var/www/testuser/home/testuser
chown root:sftp-only /var/www/testuser
chmod 750 /var/www/testuser
chown root:root /var/www/testuser/home
chmod 755 /var/www/testuser/home
chown testuser:sftp-only /var/www/testuser/home/testuser
chmod 770 /var/www/testuser/home/testuser
В этом примере я сделал это, чтобы предоставить безопасный доступ внешним консалтинговым фирмам, которые управляют веб-сайтами. После всего этого вы могли сделать:
mkdir /var/www/testuser/home/testuser/www.somesite.com
chown testuser:apache /var/www/testuser/home/testuser/www.somesite.com
chmod xxx (permissions to the website as needed, usually 750 so apache would get read access)
Все это можно было настроить по мере необходимости.
Надеюсь, это помогло!
Гай Бойсверт IngTegration inc. http://www.ingtegration.com