[Debian] Как изменить корневую папку FTP

Статус
В этой теме нельзя размещать новые ответы.

AsanBosam

Постоялец
Регистрация
1 Мар 2009
Сообщения
139
Реакции
11
Доброго времени суток!
Как изменить корневую папку FTP для определенного юзера?
Просто по умолчанию стоит /home/newuser а как и где менять не знаю
 
а какой ftp сервер хоть?
 
Статус: Соединение установлено, ожидание приглашения...
Ответ: 220 ProFTPD 1.3.1 Server (Debian) [XX.XXX.XXX.XX]

как я понял ProFTPD 1.3.1 Server
 
Поправить файлик /etc/passwd
Для пользователя ftp, задать нужную домашнюю директорию.
 
Если proftpd установлен в /sbin - ищем /etc/proftpd.conf
если в /usr/local/sbin - /usr/local/etc/proftpd.conf

конкретно ищем параметр
DefaultRoot ~
 
  • Заблокирован
  • #6
Если proftpd установлен в /sbin - ищем /etc/proftpd.conf
если в /usr/local/sbin - /usr/local/etc/proftpd.conf
конкретно ищем параметр
DefaultRoot ~
Вопрос внимательнее читай!
При чем тут дефолт, когда вопрос о юзерах?
Профтпд пускает юзера в его домашний каталог, смени домашний каталог юзера, сменишь и папку фтп для него...
 
Вопрос внимательнее читай!
Ответ внимательнее читай!

"DefaultRoot ~" означает, что дефолтовым рутовым каталогом для каждого пользователя будет его домашний каталог. Ты же в курсе насчет "~" ? То есть у пользователя "vasia" фтп каталог будет "/home/vasia", у пользователя "gena" - "/home/gena" и т.д.
 
  • Заблокирован
  • #8
1. собери proftpd с поддежкой mysql
2. конфиг proftpd
Код:
# Конфиг proftpd - 2006-02-19


# имя сервера - показывается коннектящимся клиентам
ServerName              "Main FTP servant :)"
# тип сервера (даже не тип самого сервера, а тип его запуска,
# standalone/inetd - сам или через inetd)
ServerType              standalone
# смысл следующей директивы такой: если клиент коннектится не на имя
# а на IP или на виртуальный хост, не описанный в конфиге, то при
# установке в `off` он получит отлуп, если же установлено `on` то
# он будет обслужен `сервером по-умолчанию`
DefaultServer           on
# e-mail администратора (по идее для каждого ВиртуалХоста его можно
# поставить разный - но я делаю один сервер без извращений с
# виртуальными хостами)
ServerAdmin             admin@lissyara.su
# файло где хранится инфа о сессиях
#ScoreboardFile         /var/run/proftpd.scoreboard

# порт на котором работает сервер
Port                    21

# Маска с которой создаются новые файлы (не совсем маска - маска получается
# из этого значения, путём его вычитания из 777 - т.е. в даном случае получится
# маска 755)
Umask                   022

# Максимальное число `детей` (работает только в standalohe режиме)
# необходимо для защиты от атак типа `отказ в обслуживании` да и
# от перегрузки сервера поможет :)
MaxInstances            30

# Юзер от которого работает сервер
User                    ftp
# группа, под которой работает сервер
Group                   ftp


# Тип авторизации (на самом деле - в каком виде хрянятся
# пароли в БД - в данном случае - открытым текстом)
SQLAuthTypes            Plaintext
# Кого и как аутентифицируем - on - всех и вся :)
# Но - если поставить `on` то он ломится в БД за группами.
# мне группы никчему. Посему поставил `users`
SQLAuthenticate         users
# инфа для соединения с MySQL сервером:
# имя_базы_данных@хост_где_MySQL:порт имя_пользователя пароль
SQLConnectInfo          ftp@localhost:3306 ftp ftp
# в каком порядке вернёт поля запрос - первое поле, это
# имя таблицы, где лежат пользователи
SQLUserInfo             `users_table` `username` `password` `uid` `gid` \
                        `homedir` `shell`
# должен ли быть у юзера (для того, чтобы он мог коннектится),
# `реальный` shell описанный в /etc/shells
RequireValidShell off
# лог файл работы с SQL
SQLLogFile      /var/log/proftpd.log

# Вот тут моя натура склонная к ведению логов на всё в
# БД MySQL смогла разыграться на полную катушку :)
# Записываем удачные логины в БД. Общий смысл такой - создаём
# именованую кверю, с указанием что мы должны сохранять
SQLLog          PASS            counter_login
SQLNamedQuery   counter_login   UPDATE "`last_login`=UNIX_TIMESTAMP(), \
                                `login_count`=`login_count`+1 WHERE \
                                `username`='%u'" `users_table`
# пишем неудачные логины в БД
SQLLog          ERR_PASS        counter_err
SQLNamedQuery   counter_err     UPDATE "`last_err_login`=UNIX_TIMESTAMP(), \
                                `err_login_count`=`err_login_count`+1 WHERE \
                                `username`='%U'" `users_table`

# логируем что сохраняет и тащщит с сервера:
# переменные
# %u - имя пользователя (с которым залогинился)
# %f - полный путь и имя файла который был скачан
# %b - число байт, которые были скачаны
# %h - имя клиента (из DNS), если не удалось разрешить - IP
# %a - IP-адрес клиента
# %m - имя команды полученной от клиента (RETR/STOR)
# %T - время (секунд) ушедшее на передачу файла клиенту

SQLLog          RETR,STOR               log_story_transfer
SQLNamedQuery   log_story_transfer      INSERT "'',\
                                        UNIX_TIMESTAMP(),'%u',\
                                        '%f', '%b', '%h', \
                                        '%a', '%m', '%T'" \
                                         `xfer_table`
# записываем ошибки при сохранении и чтении файлов
# (в одну строку не влезли - но работает и в таком виде :))
SQLLOG          ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO\
                                        log_err_modify
SQLNamedQuery   log_err_modify          INSERT "'',\
                                        UNIX_TIMESTAMP(),\
                                        '%u', '%f', '%h', \
                                        '%a', '%m'" `xfer_errors`

# если вылезет проблема, типа тормозов при подключении
# (в момент установления коннекта `задумывается` на 10-20 секунд)
# то раскомментируйте следующие две строки
#UseReverseDNS     off
#IdentLookups      off



# если надо чтобы ВСЕ пользователи по ftp были ограниченны
# своей домашней директорией, то надо раскомментировать
# следующую строку:
#DefaultRoot            ~
# у меня хитрее сделано - себе я разрешил шариться по всему серверу
# а остальных за`chroot`ил. Если, например, надо чтобы пользователи
# могли по серверу шариться а анонимоусы нет, то надо указать !users
# также можно указать определённую группу.
DefaultRoot             ~       !lissyara

# Директории
<Directory ~>
AllowOverwrite          on
<Limit Write>
AllowAll
</Limit>
<Limit READ>
AllowAll
</Limit>
</Directory>


<Anonymous /usr/home/ftp>
# пользователь от которого анонимоусы шарятся
User            ftp
# группа анонимоусов
Group           ftp
# альясы ананонимоусов (можно будет входить как ftp, а
# не anonymous)
UserAlias       anonymous ftp
# максимально число анонимоусов
MaxClients      10      "Sorry, max %m users - try again later"
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
3. дамп базы mysql
Код:
--
-- Table structure for table `users_table`
--

DROP TABLE IF EXISTS `users_table`;
CREATE TABLE `users_table` (
  `unic_id` int(11) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `groupname` varchar(24) NOT NULL,
  `uid` int(11) NOT NULL,
  `gid` int(11) NOT NULL,
  `homedir` varchar(50) NOT NULL,
  `shell` varchar(20) NOT NULL,
  `last_login` int(15) NOT NULL,
  `login_count` int(15) NOT NULL,
  `last_err_login` int(15) NOT NULL,
  `err_login_count` int(15) NOT NULL,
  PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица пользователей';

--
-- Dumping data for table `users_table`
--

INSERT INTO `users_table` VALUES (1,'user1','123','user1',
1001,1001,'/usr/home/user1','/sbin/nologin',0,0,0,0);


--
-- Table structure for table `xfer_errors`
--

DROP TABLE IF EXISTS `xfer_errors`;
CREATE TABLE `xfer_errors` (
  `unic_id` int(32) NOT NULL auto_increment,
  `timestamp` int(15) NOT NULL,
  `user_name` varchar(64) NOT NULL,
  `file_and_path` tinytext NOT NULL,
  `client_name` varchar(127) NOT NULL,
  `client_IP` varchar(15) NOT NULL,
  `client_command` varchar(5) NOT NULL,
  PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица ошибок при работе';

--
-- Dumping data for table `xfer_errors`
--


--
-- Table structure for table `xfer_table`
--

DROP TABLE IF EXISTS `xfer_table`;
CREATE TABLE `xfer_table` (
  `unic_id` int(32) NOT NULL auto_increment,
  `timestamp` int(15) NOT NULL,
  `user_name` varchar(64) NOT NULL,
  `file_and_path` tinytext NOT NULL,
  `bytes` int(15) NOT NULL default '0',
  `client_name` varchar(127) NOT NULL,
  `client_IP` varchar(15) NOT NULL,
  `client_command` varchar(5) NOT NULL,
  `send_time` varchar(9) NOT NULL default '0',
  PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица, чё приняли-передали';

--
-- Dumping data for table `xfer_table`
--
4. после пользователей заводить ручками в базе:
INSERT INTO `users_table` VALUES (1,'ИМЯ_ЮЗЕРА','ЕГО_ПАРОЛЬ','СИСТЕМНОЕ_ИМЯ(проще всего ставить ftp под ним пашет proftpd)', 1001,1001,'/usr/home/user1','
/sbin/nologin',0,0,0,0);

/usr/home/user1 в данном случае путь к папке куда будет направлен пользователь после входа, пеняется на любой другой, с предоставлением прав соответственно данному пользователю на папку.

1001 в данном случае UID и GID юзера в системе(в примере это пользователь ftp)

по всем вопросам не обращаться, обращаться по существу в личку.
 
А в чем проблема ? Если пользоваться системными юзерами, а не SQL, то просто нужно добавить имя юзера / группы, через пробел. Например вот так:

DefaultRoot / wheel
DefaultRoot /usr/local/www/apache22/data www
 
  • Заблокирован
  • #10
Ответ внимательнее читай!
"DefaultRoot ~" означает, что дефолтовым рутовым каталогом для каждого пользователя будет его домашний каталог. Ты же в курсе насчет "~" ? То есть у пользователя "vasia" фтп каталог будет "/home/vasia", у пользователя "gena" - "/home/gena" и т.д.
Ну так я об этом и говорю! При чем тут дефолт, если чел спросил конкретно про юзера?:)
Смени домашний каталог юзеру, сменишь его для юзера и на фтп...


# Use this to jail all users in their homes
# DefaultRoot ~

Т.е., дефолтрут нужно раскомментировать для того, чтобы запереть юзера в домашнем каталоге.

Как Oleg17 предлагает не пробовал, не было нужды, у меня другие потребности... :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху