Суббота, 23 января 2010 г.

sftp на базе proftpd с пользователями в pgsql

Просмотров: 2302 | Подписаться на комментарии по RSS |

Прочитал много всевозможных статей (не будем показывать пальцем где, это и так все знают), причем во всех было хранение паролей в открытом виде, и вообще мало что связанное с безопасной передачей данных. Вроде все знаем что это не хорошо, но продолжаем делать глупые ошибки.

Мой выбор пал на proftpd с поддержкой SFTP, но как оказалось в портах не реализована поддержка, но это не помеха...

Патчь берем либо с официального сайта, либо с моей репы.

http://www.freebsd.org/cgi/query-pr.cgi?pr=143018
http://gitorious.org/zloidemon-freebsd-ports/trunk/blobs/master/patches/patch_sftp-proftpd-devel-1.3.3rc2

Дальше патчим и тд:

%cp -R /usr/ports/ftp/proftpd-devel ./
%patch -p0 <patch_sftp-proftpd-devel-1.3.3rc2
%sudo make -C proftpd-devel/ config-recursive install clean
# вообщем с опциями там будет все понятно, что и для чего нужно

Писать про установку pgsql я пока не собираюсь, про это и так достаточно написано. Так что перейдем к работе с самой базой данных.

%createuser -S -D -R -P files
%createdb -O files sftp
%psql -U files -d sftp

#тут приглашение и тд и тп... вообщем выполняем такой запрос.
sftp=>
CREATE TABLE users (id serial PRIMARY KEY,sftpuser varchar(20),passwd text,uid int,gid int,home varchar(70),shell varchar(20));

#на что там выдаст
NOTICE: CREATE TABLE создаст подразумеваемую последовательность "users_id_seq" для serial-колонки "users.id"
NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "users_pkey" для таблицы "users"
CREATE TABLE
#смотрим что имеем
sftp=> \d
List of relations
Schema | Name | Type | Owner
--------+--------------+----------+-----------------
public | users | table | files.zlonet.ru
public | users_id_seq | sequence | files.zlonet.ru
(2 rows)

Покажу свой конфиг proftpd, но это не означает что его нужно копировать, он и так почти весь default:

ServerName                      "Server from HELL"
ServerType                      standalone        
DefaultServer                   on
Port                            21
#UseIPv6                                off
Umask                           022
MaxInstances                    30
User                            nobody                   
Group                           nogroup
DefaultRoot ~ 
AllowOverwrite          on
<Limit SITE_CHMOD>                
  DenyAll                         </Limit>
SQLAuthTypes            OpenSSL
SQLBackend              postgres
SQLAuthenticate         users
SQLConnectInfo          sftp@localhost files megapass
SQLUserInfo             users sftpuser passwd uid gid home shell
RequireValidShell       off
SQLLogFile              /var/log/proftpd_sql.log
MaxClients              20 "Sorry Max Clients"
MaxClientsPerHost       10 "Max client from your host"
MaxLoginAttempts        5 "Max Login Attmps"
SyslogLevel             notice
UseReverseDNS           off
SFTPEngine      On
SFTPHostKey     /etc/ssh/ssh_host_rsa_key
SFTPHostKey     /etc/ssh/ssh_host_dsa_key

Собственно комментировать тут нечего, и так все понятно, если что надо можно заглянуть в установленную с proftpd документацию.

Добавление пользователей, для этого написал скрипт, так как вломы генерирова SHA1 ложить в БД и тд.

Берем скрипт из репы

http://gitorious.org/zloidemon-dev/trunk/blobs/master/createftpuser/src/createftpuser.py

Для него понадобиться python и модуль:

%sudo make -C /usr/ports/databases/py-sqlalchemy config-recursive install clean
#собираем с поддержкой pgsql

Сам скрипт прокомментировал достаточно хорошо, так что настроить его для работы с вашей любимой БД не составит труда.

Пример работы:

./createftpuser.py
Adding new user
user :blah
password :test
uid :14
gid :14
home dir :/var/ftp
shell :
New user info:
user : blah
password : test
uid: 14
gid 14
home: /var/ftp
shell: /bin/sh
add new user y/n :y

После работы скрипта можно посмотреть что создалось в БД:

sftp=>
SELECT * FROM users;

id | sftpuser | passwd | uid | gid | home | shell
----+----------+------------------------------------+-----+-----+----------+---------
1 | blah | {SHA1}qUqP5cyxm6YcTAhz05Hph5gvu9M= | 14 | 14 | /var/ftp | /bin/sh
(1 запись)

Учитывая данные созданные в таблице, создаем пользователя в системе (в моем случае все пользователи из БД работают от ftp:ftp, которого можно создать через sysinstall).

Подключаемся:

%sftp -oPort=21 blah@host#адрес или домен удаленного сервера.
Connecting to host...
The authenticity of host '[host]:21 ([host]:21)' can't be established.
RSA key fingerprint is ea:33:59:2c:40:74:7b:a1:18:de:fd:a1:21:fd:bf:e3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[host]:21' (RSA) to the list of known hosts.
blah@host's password:
sftp> ls
etc       incoming  pub

Метки: | |

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)