Ограничение FTP-аккаунта на доступ к файлам, папкам

DS
На сайте с 09.02.2008
Offline
137
1292

Приветствую,

кто-нибудь делал на CentOS-7 и Fastpanel (хотя это не важно скорее всего), каким-либо более удобным способом ограничение для фтп-аккаунта на папки?

То есть, на данный момент заходя на ftp-аккаунт мы видим:

Папка-1
Папка-2
Папка-3
и файлы в корне сайта.

И хотим скрыть Папка-2 для данного ftp-аккаунта.
Или же хотим скрыть какой-то определённый файл в корне сайта для данного фтп-аккаунта, так можно?

Fastpanel насколько вижу, не позволяет создать фтп-аккаунт с набором для него разрешённых папок.



Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#1

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

В конкретно этом случае я бы первым делом узнал какой именно ftp сервер используется. Если proftpd, то все просто.

Во-первых открываем его конфиг(и) и ищем есть ли allowoverride on, если нет - добавляем. Правда не знаю может ли эта панелька перезаписать позже конфиг.

В нужной папке создаете файл .ftpaccess с такого плана содержимым:

hidefiles (dir1|index.htm)$
<limit all>
ignorehidden on
</limit>

Т.е. вроде понятно - перечисляете какие файлы/папки спрятать. Или наоборот: hidefiles !(dir1|index.htm)$ - спрятать все, кроме dir1 и index.htm

Спрятать не от всех, а только определенного пользователя: hidefiles (dir1|index.htm)$ user nesokolov (или опять же через user !sokolov спрятать от всех кроме такого-то юзера)

(справка)

Ниже limit all нужно т.к. без него допустим папку dir1 по фтп видно не будет, но если знать что она там есть, то можно написать cd dir1 и невозмутимо попасть в нее 😏


Однако... надо смотреть не вырванно из контекста, а какие конкретно задачи вы преследуете. Дать кому-то чужому доступ на фтп?

Меня периодически клиенты спрашивают о подобном и объясняю, что (хотя конечно кто знает как там у вас все настроено) это не имеет никакого смысла.

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

К примеру он закинет php или cgi скрипт свой, которым вместо ftp сервера, через web сможет открыть все куда есть доступ у этого пользователя.

Т.е. в вашем случае вы типа спрятали файлы и папки какие-то, но что помешает php скриптом получить к ним доступ?

Не исключаю что из-за этого и нет такого функционала в панели вашей, т.к. смысла нет.

totamon
На сайте с 12.05.2007
Offline
437
#2
права на уровне ОС нужно раздавать
Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
DS
На сайте с 09.02.2008
Offline
137
#3
Евгений Крупченко #:
Однако... надо смотреть не вырванно из контекста, а какие конкретно задачи вы преследуете. Дать кому-то чужому доступ на фтп?


Евгений, благодарю за подробный ответ!

Задача, да - дать кому-то чужому доступ на фтп, но при этом для безопасности ограничить доступ к одному php файлу, но при этом чтобы php файл был доступен по http и исполнялся, т.к. он задействован в движке сайта.

с Вашим вариантом разбираюсь, установлен да, proftpd.

Пока я пришёл к решению, не знаю правильное ли:

1) заходим через root по SSH
2) меняем Владельца php-файла на root через chown (т.к. файл был создан через фтп-аккаунт)
3) убираем на этом php-файле права Чтения, Запись и Исполнение для Группы и для Остальных.
Тогда он перестаёт открываться по FTP (как и хотелось)
Получается:
-rwx------

Но исполняется по http (как и требовалось)

Вроде бы работает, это корректное решение?

Если в будущем нужно подредактировать данный файл, то меняем обратно права на запись через ssh.
Либо редактируем данный файл через root по ssh (не совсем конечно удобно php код так править)

UPDATE:

Нет не работает способ.
По http файл - access denied (видимо раньше работал, т.к. читался из кэша).
Причём выставление прав на Исполнение на Группу или Остальным - не помогает.
А на чтение не можем выставить права, т.к. тогда он будет открываться для просмотра по FTP.


Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#4

Суть так и не улавливаете.

Если ваш web-сервер читает/исполняет и тот секретный файл и другой, который кто-то чужой по фтп закинет - все, это конец :)

Что его остановит сделать <?echo file_get_contents('secret.php');?>

Суть же в том что вы пытаетесь разграничить доступ в одной среде (ftp) - да, это можно сделать через .ftpaccess (выше расписано).

Но в другой середе у вас apache (или что там) имеет доступ (и должен иметь, раз говорите он должен по http открываться) ко всему. И как вы себе представляете?


Если уж совсем пофантазировать, то можно сделать что-угодно. Например:

1) Делаем владельцем папки сайта и всех его файлов user1, на папки 770, на файлы 660 права.

2) Секретный ваш secret.php делаем владельцем user2 и тоже 660.

3) Запускаем 2шт - apache1 от имени user1 и apache2 от user2

4) Nginx проксирует запросы этого сайта к backend apache1 - и соответственно сайт открывается нормально весь, кроме secret.php - к нему у user1 доступа нет и пишет 403 firbidden.

5) Делаем в конфиге nginx исключение типа location /secret.php... который проксироваться будет уже к apache2.

6) Ну и по фтп заходит user1 и имеет доступ ко всем файлам/папкам сайта, короме конечно же secret.php

7) Даже если он закинет php shell или просто свой любой скрипт и попытается открыть secret.php - доступа у него не будет т.к. владельцем его является user2, а 660 - последняя 0 означает что для всех остальных доступа нет. Но при этом сайт и файл этот по http будут полноценно работать.


И теперь спрашивается стоит ли оно этой всей мороки?

W1
На сайте с 22.01.2021
Offline
285
#5
D.Sokolov :
И хотим скрыть Папка-2 для данного ftp-аккаунта.

Можно открыть для данного ftp-аккаунта конкретную папку - это обычная функциональность.

D.Sokolov :
Или же хотим скрыть какой-то определённый файл в корне сайта для данного фтп-аккаунта

А так нельзя.

Мой форум - https://webinfo.guru –Там я всегда на связи
ViktorVakhonin
На сайте с 06.04.2016
Offline
59
#6
D.Sokolov :

Приветствую,

кто-нибудь делал на CentOS-7 и Fastpanel (хотя это не важно скорее всего), каким-либо более удобным способом ограничение для фтп-аккаунта на папки?

То есть, на данный момент заходя на ftp-аккаунт мы видим:

Папка-1
Папка-2
Папка-3
и файлы в корне сайта.

И хотим скрыть Папка-2 для данного ftp-аккаунта.
Или же хотим скрыть какой-то определённый файл в корне сайта для данного фтп-аккаунта, так можно?

Fastpanel насколько вижу, не позволяет создать фтп-аккаунт с набором для него разрешённых папок.



Добрый день.

Можно сделать так:

Создать файл, к примеру, /etc/proftpd/conf.d/deny.conf со следующим содержимым:

<Directory /var/www/fast.site/data/www/fast.site/test/>
    <Limit ALL>
        AllowUser gooduser
        DenyAll
    </Limit>
</Directory>

После этого не забудьте перезапустить proftpd.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий