nixp.ru v3.0

30 мая 2017,
вторник,
00:02:26 MSK

DevOps с компанией «Флант»
anonymous написал 18 февраля 2005 года в 16:33 (995 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Pureftpd собран с опцией --with-diraliases. Создал файл /etc/pureftpd-dir-aliases, прописал в нем нужные алиасы и перазапустил pureftpd. Приконнектился к серверу. Ввожу «site alias», получаю список доступных алиасов (все прописанные мной в /etc/pureftpd-dir-aliases), однако самих алиасов в корневом каталоге нет и в ответ на команду «cd somealias» получаю ответ «550 Can’t change directory to somealias: No such file or directory»

Буду очень благодарен, если кто-нибудь подскажет, в чем проблема.

fly4life

а с правами на директории, к которым у тебя выставлены алиасы, всё нормально?

anonymous

Вроде бы да, везде 755

fly4life

а покажи, как у тебя выглядит /etc/pureftpd-dir-aliases

anonymous

# Начало файла /etc/pureftpd-dir-aliases

downloads

/home/negus/downloads

distfiles

/usr/portage/distfiles

# Конец файла

Алиасы заданы просто для проверки работы сервера.

Да кстати, проблем с чтением этого файла pureftpd, судя по логам, не испытывает. Для проверки я задавал некорректные строки, вот тогда в логах появлялась запись, что файл поврежден. А так все нормально, к тому же сервер выдает эти алиасы как доступные в ответ на команду «site alias».

fly4life
negus
# Начало файла /etc/pureftpd-dir-aliases

downloads

/home/negus/downloads

distfiles

/usr/portage/distfiles

# Конец файла

Алиасы заданы просто для проверки работы сервера.

Да кстати, проблем с чтением этого файла pureftpd, судя по логам, не испытывает. Для проверки я задавал некорректные строки, вот тогда в логах появлялась запись, что файл поврежден. А так все нормально, к тому же сервер выдает эти алиасы как доступные в ответ на команду «site alias».

а ты, случаем, не на 'downloads' пробовал зайти? На неё не пустит с ФТПшника, т.к. она находится в домашней директории пользователя, в которую ходить могут только сам пользователь и рут.

anonymous

Почему не пустит, ведь права на /home/negus/downloads выставлены как 755, т.е. каждый может просматривать содержимое каталога. К тому ж я делал для проверки ссылку на /home/negus/downloads, расположенную в /home/ftp, и по ней спокойно заходил в нужный каталог (естественно через фтп). А вот алиасы не работают ;(

На сколько я понимаю, dir. aliases должно работать следующим образом:

1. есть фтп-сервер, в домашнем каталоге которого (/home/ftp) расположены следующие подкаталоги:

/

|-incoming/

|-video/

|-music/

2. задаю алиас в /etc/pureftpd-dir-aliases, например,

downloads

/home/negus/downloads

3. коннекчусь к серверу и вижу в корне фтп новую директорию downloads

/

|-downloads/ <- вот алиас на /home/negus/downloads

|-incoming/

|-video/

|-music/

4. когда я захожу в downloads, то фтп-север редиректит меня в /home/negus/downloads

Однако, когда я выполняю 3-й шаг, то каталог downloads в списке директорий отсутствует, т.е. корень фтп выглядит как в шаге 1. Выполняю команду «site alias». Сервер выводит перечень доступных алиасов, в котором, как и положено, присутствует «downloads /home/negus/downloads». Выполняю «cd downloads», в ответ получаю ругательство, что нет такой директории (это естественно ;), ведь в списке ее нет).

fly4life

а у тебя пользователи, случайно, в chroot окружение своих домашних директорий не загнаны?

negus
fly4life
а у тебя пользователи, случайно, в chroot окружение своих домашних директорий не загнаны?

Есть такое дело, сервер запущен с параметром «-A». Я думал об этом, вот только не знаю, является ли это причиной, ведь по симлинку переход получается за пределы корневой директории сервера.

И еще, вспомнил, я делал алиас на вложенный каталог внутри директории фтп-сервера (somealias /home/ftp/path/to/somedirectory), но это тоже не работало.

fly4life
negus
Есть такое дело, сервер запущен с параметром «-A». Я думал об этом, вот только не знаю, является ли это причиной, ведь по симлинку переход получается за пределы корневой директории сервера.

Нуу, а что есть «корневая директория сервера». Таковой директорией является домашний каталог залогиневшегося пользователя (для пользователя negus: /home/negus). Если в настройках ФТПшника этот пользователь находится в chroot’е, то он за пределы своей домашней директории вылезти не может (даже по символической ссылке). Так что, кто и куда у тебя там вылазил, остаётся только догадываться.

Если ты про это: «К тому ж я делал для проверки ссылку на /home/negus/downloads, расположенную в /home/ftp, и по ней спокойно заходил в нужный каталог (естественно через фтп)», то тут тоже не всё ясно. Ссылка находилась в /home/ftp и ссылалсь на /home/negus/downloads, так? Тогда остаётся вопрос: если пользователь в чруте, то как он оказался в каталоге /home/ftp (который далеко не его домашний), чтобы перейти по символической ссылке? Значит, можно сделать вывод, что он не был в чруте.

negus

Прошу прощения за недостаточно ясное изложение ситуации.

На сервер я логинюсь как анонимный пользователь, поэтому и попадаю в каталог сервера (/home/ftp).

negus

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

Камнем преткновения, действительно, оказалось использование chroot окружения. Прописывать алиасы необходимо было, отталкиваясь от каталога фтп-сервера как от корневого. Поясню на примере. Домашний каталого фтп-сервера /home/ftp, в нем имеется каталог video/clips. Следующая запись будет неверной:

clips

/home/ftp/video/clips

т.к. путь для алиаса выходить за chroot окружение. Зато следующая запись будет правильной:

clips

/video/clips

Вот, соственно говоря, и все. Единственное, что хотелось бы добавить, это то, что использование алиасов оказалось не совсем удобным. Во-первых, пользователь может увидеть доступные алиасы только по команде «script alias» (а об ее существовании не многие знают), а во-вторых, использование алиасов оказывается ограничено каталогом ftp-сервера. Таким образом, более удобным оказалось использование простых ссылок.

Genie

тогда уж лучше бы тебе mount --bind … использовать.

более приятная штука, особенно, когда нужное находится за пределами доступности корня ftp.

плюс к тому, можно, таким образом, ужесточать доступ до файлов: к примеру, /mnt/video имеет права a+rwx, в то время как для пользователей ftp можно, скажем, только читать. это, в общем-то, логично, поэтому mount — bind -o ro … даст нужный эффект