Потребовалось создать безопасный файлообменник.
Требования:
1. Безопасность.
2. Простота использования
3. Возможность использовать на различных ОС
Всем этим критериям больше всего удовлетворяет sftp.
SFTP расшифровывается как SSH File Transfer Protocol — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2, но это не обязательно.
OpenSSH (открытый безопасный shell) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH.
Он был создан под руководством Teo de Raadt (Тэо де Раадт) как открытая альтернатива проприетарного ПО от SSH Communications Security. В набор программ OpenSSH входит и sftp-сервер. Также была добавлена возможность помещать отдельных пользователей в изолированное окружение(chroot).
Установка на FreeBSD:
Надо включить его в группу sftponly, дать реальную оболочку(например sh),указать правильный домашний каталог(мы его уже создали /usr/sftp), ну естественно, пароль.
Примечание: на FreeBSD при остановке демона sshd не происходит дисконект, т.е. тукущие сессии остаются активными и Вы можете спокойно запустить новый демон. Проверенно, т.к. настраивал удаленно.
Я например использую WinSCP в Windows.
Кроме подсоединения он также может и синхронизировать файлы.
Для более "тонкой" настройки синхронизации рекомендую AllwaySync'n'Go
Ссылки:
Использование sftp+chroot из openssh в качестве альтернативы ftp-серверу.
Настройка доступа по sftp на основе openssh + chroot
Требования:
1. Безопасность.
2. Простота использования
3. Возможность использовать на различных ОС
Всем этим критериям больше всего удовлетворяет sftp.
SFTP расшифровывается как SSH File Transfer Protocol — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2, но это не обязательно.
OpenSSH (открытый безопасный shell) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH.
Он был создан под руководством Teo de Raadt (Тэо де Раадт) как открытая альтернатива проприетарного ПО от SSH Communications Security. В набор программ OpenSSH входит и sftp-сервер. Также была добавлена возможность помещать отдельных пользователей в изолированное окружение(chroot).
Установка на FreeBSD:
# cd /usr/ports/security/openssh-portable
# make install clean
[X] PAM Enable pam(3) support
[X] TCP_WRAPPERS Enable tcp_wrappers support
[X] LIBEDIT Enable readline support to sftp(1)
[X] KERBEROS Enable kerberos (autodetection)
[ ] SUID_SSH Enable suid SSH (Recommended off)
[ ] GSSAPI Enable GSSAPI support (req: KERBEROS)
[ ] KERB_GSSAPI Enable Kerberos/GSSAPI patch (req: GSSAPI)
[X] OPENSSH_CHROOT Enable CHROOT support
[ ] OPENSC Enable OpenSC smartcard support
[ ] OPENSCPINPATCH Enable OpenSC PIN patch
[ ] HPN Enable HPN-SSH patch
[ ] LPK Enable LDAP Public Key (LPK) patch
[ ] OVERWRITE_BASE OpenSSH overwrite base
Не забудьте прописать в /etc/rc.conf openssh_enable="YES"
#sshd_enable="YES"
Переходим в католок с настроечными файлами # cd /usr/local/etc/ssh
Открываем файл sshd_config и добавляем куда-нибудь в конец следующие строки.Убедиться, что в конфиге они не повторяются!!! В группу wheel входят пользователи без ограниченный, а в группу sftponly входят наши пользователи. Можно также выставить права и на конкретных пользователей ( Match User XXX) Subsystem sftp internal-sftp
## выставляем настройки для группы
Match group sftponly
#### выставляем настройки для пользователя
#Match User newusr
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Создадим будущему пользователю домашний каталог, куда он и будет кидать свои файлы # mkdir /usr/sftp
# mkdir /usr/sftp/newusr
Добавляем группу: # chown -R root /usr/sftp
# pw groupadd sftponly
Теперь надо правильно добавить пользователя через adduser.Надо включить его в группу sftponly, дать реальную оболочку(например sh),указать правильный домашний каталог(мы его уже создали /usr/sftp), ну естественно, пароль.
# adduser
Username: newusr
Full name:
Uid (Leave empty for default):
Login group [newusr]: sftponly
Login group is sftponly. Invite ssadminsftp into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]: sh
Home directory [/home/newusr]: /usr/sftp
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : newusr
Password : *****
Full Name :
Uid : 1006
Class :
Groups : sftponly
Home : /usr/sftp
Home Mode :
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (newusr) to the user database.
Add another user? (yes/no):no
Goodbye!
Права на каталоги должны быть root (домашний каталог пользователя и каталоги выше по иерархии перед ним). Права на папку 75x(rwxrwx---). # chown -R root /usr/sftp
# chown -R newusr /usr/sftp/newusr
Останавливаем базовый демон и стартуем новый.Примечание: на FreeBSD при остановке демона sshd не происходит дисконект, т.е. тукущие сессии остаются активными и Вы можете спокойно запустить новый демон. Проверенно, т.к. настраивал удаленно.
#/etc/rc.d/sshd stop
#/usr/local/etc/rc.d/openssh restart
И пробуем залогинится под нашим пользователем с какой-нибудь машины.Я например использую WinSCP в Windows.
Кроме подсоединения он также может и синхронизировать файлы.
Для более "тонкой" настройки синхронизации рекомендую AllwaySync'n'Go
Ссылки:
Использование sftp+chroot из openssh в качестве альтернативы ftp-серверу.
Настройка доступа по sftp на основе openssh + chroot
Привет,
ОтветитьУдалитьА что можете посоветовать если нужно раздавать контент с помощью HTTP(S), так чтобы каждый пользовател имел возможность создавать в своём домашнем каталоге, подкаталоги для других пользователей, поролить некоторые каталоги? + конечно лимитирование места. Идея состоит в том, чтобы дать возможность работнику компании создавать для своих клиентов аккаунты, чтобы они в свою очередь могли, чтото закачать или скачать, ну и конечно не смогли выйти за пределы их каталога.
Так как имеем дело с конечным пользователем, то нужен дружелюбный веб интрефейс. Можете сталкивались с чем-то готовым?
Спасибо.
Интересная задачка...
ОтветитьУдалитьПару уточняющих вопросов:
- Уровень конечных пользователей? Как много их и как часто они меняются?
- Требуемый уровень безопасности.
задача не самая тривиальная. Основная загвозда -удобство для конечного пользователя...
Готовых решений не встречал.Из того что первое приходит в голову - связка pureftpd + Mysql + PureUserAdmin (webfrontend) + apache.
Пользователи смогут забирать файлы как по шифрованному ftp, так и по https. Закачка только через ftp (можно с шифрованием). Как вариант можно каждому пользователю создать Private и Public. private доступ будет иметь только сам пользователь. В Public создавать папки для клиентов. Каждый пользователь запер в своем катологе. Т.е. будет иметь доступ только к своим клиентам. Клиенты в свою очередь тоже "заперты" в своем катологе.
Используя симлинки можно добиться некоторой гибкости схемы. Возможно понадобится написание некоторых дополнительных скриптов...
Спасибо большое - эта идея давно уже крутилась в голове, не интересовался возможностью реализации.
ОтветитьУдалитьПосле этого можно забыть вообще о фтп.
Но возникает проблемма с правами - ведь создаётся отдельный юзер со своим UID, а если хочется менять скажем php файлы то права должны быть www-data, т.к это всё дело работает под (nginx+php-fpm).
Иначе: хочется чтоб был chroot в папку пользователя, но UID пользователя был как у www-data.
(Интересует под линукс, но думаю разницы не должно быть большой)
PS. У вас слетела подсветка bash
У меня такой задачи не было...
ОтветитьУдалитьИз того что приходит в голову:
1. Дать пользователю www-data shell и соответственно писать из под него. ПРоблем быть не должно. Но такой вариант по безопасности в корне не правилен! Особенно если заливают несколько человек...
2. Скорее всего Вам нужно смотреть в сторону ftp серверов, которые умеют работать с sftp (pureftp, proftpd и т.д.)
P.S. спасибо за замечание!!!