Файловый браузер - это web сервер, через который можно получить доступ к файлами на хосте. Доступ можно настроить к отдельным папкам для отдельных пользователей.
Файловый браузер работает на базе https://filebrowser.org/.
Установка web сервера filebrowser
Подключаемся по ssh к хосту, на котором находятся файлы, доступ к которым нужно осуществить.
Если файловый браузер filebrowser
уже установлен, тогда этот шаг можно пропустить. Чтобы это проверить, мы можем воспользоваться командой:
filebrowser version
Если такая команда не найдена, значит необходимо выполнить установку.
Скрипт установки filebrowser
:
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
filebrowser
Нажимаем Ctrl+С, чтобы остановить filebrowser, и продолжаем установку:
mkdir -p /etc/filebrowser
mkdir -p /var/lib/filebrowser/base
filebrowser config set --address 0.0.0.0
mv filebrowser.db /var/lib/filebrowser
cat > /etc/filebrowser/.filebrowser.yml <<EOF
database: /var/lib/filebrowser/filebrowser.db
address: 0.0.0.0
port: 8090
root: /var/lib/filebrowser/base
EOF
cat > /etc/systemd/system/filebrowser.service <<EOF
[Unit]
Description=File browser
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/bin/filebrowser
[Install]
WantedBy=multi-user.target
EOF
Запускаем службу:
systemctl daemon-reload
systemctl start filebrowser
systemctl enable filebrowser
systemctl status filebrowser
Если все сделали правильно, тогда служба должна запуститься успешно, а ее вывод должен быть таким:
Dec 21 08:50:02 host4.mineland.local systemd[1]: Started File browser.
Dec 21 08:50:02 host4.mineland.local filebrowser[14701]: 2020/12/21 08:50:02 Using config file: /etc/filebrowser/.filebrowser.yml
Dec 21 08:50:02 host4.mineland.local filebrowser[14701]: 2020/12/21 08:50:02 Listening on [::]:8090
Если все хорошо, переходим в браузере по адресу http://айпи_хоста:8090/, авторизируемся под логином admin
и паролем admin
. В настройках профиля нужно поменять пароль и сохранить его в keepass.
Проксируем filebrowser за NAT
Чтобы не афишировать айпи адрес хоста, где установлен filebrowser
, можно проксировать его через прокси хост.
Для этого подключаемся по ssh к прокси хосту и создаем на нем такие iptables правила:
iptables -t nat -A PREROUTING -p tcp --dport 8091 -j DNAT --to-destination айпи_хоста:8090
iptables -t nat -A POSTROUTING -p tcp --dport 8090 -j SNAT --to-source айпи_прокси_хоста
В данном примере используется порт 8091
на прокси-хосте, но такой порт может быть уже занят. Проверить занятость порта можно такими командами:
netstat -tnlp | grep :8091
iptables -vnL -t nat --line-numbers | grep 8091
Если эти команды дали какой-то вывод, значит такой порт занят, и нужно выбрать любой другой.
Пробуем подключиться через браузер к прокси хосту по адресу http://айпи_прокси_хоста:8091/.
Если все работает, тогда осталось поместить получившиеся iptables правила в файл /etc/iptables/iptables.d/10-nat
, чтобы они сохранялись после перезагрузки системы. Пример такого файла:
*nat
# proxy
-A PREROUTING -p tcp --dport 8091 -j DNAT --to-destination айпи_хоста:8090
-A POSTROUTING -p tcp --dport 8090 -j SNAT --to-source айпи_прокси_хоста
COMMIT
Создание пользователя
Открываем filebrowser
в браузере, авторизируемся под аккаунтом админки admin
, пароль от него можно узнать у любого админа Mineland.
После входа в аккаунт, открываем настройки Settings
и переходим во вкладку User Management
. Напротив заголовка Users
есть кнопка New
, жмем на нее.
В форме создания юзера указываем имя пользователя Username
и пароль Password
. Также нужно настроить параметр Scope
. В это поле нужно указать путь к папке, которая будет доступна для этого пользователя. Папки всех пользователей располагаются по пути /var/lib/filebrowser/username
, например, для пользователя с именем lokha
его папка будет /var/lib/filebrowser/lokha
.
Дальше подключаемся по ssh к хосту, на котором мы создали пользователя. На этом хосте создаем папку, которую мы указали при создании пользователя:
mkdir -p /var/lib/filebrowser/base/username
Пользователь он не сможет покинуть пределы этого каталога.
На данном этапе уже можно подключиться через filebrowser под созданным пользователем. Но его домашний каталог пока что пуст. Чтобы выдать доступ к конкретным каталогам, нужно воспользоваться командой ln -s каталог/ символическая_ссылка/
:
# добавляем первый каталог
ln -s /home/mcraft/servers/creative /var/lib/filebrowser/base/username/server-creative
# добавляем второй каталог
ln -s /home/mcraft/servers/skyblock /var/lib/filebrowser/base/username/server-skyblock
# так можно добавлять сколько угодно каталогов
В качестве примера были добавлены две папки. Поскольку пользователь не может покинуть свою папку /var/lib/filebrowser/base/username/
, нельзя выдать ему доступ напрямую к папкам каталогам извне. По этому мы создали точки символические ссылки внутри папки пользователя server-creative/
и server-skyblock/
, которые ведут на конкретные папки /home/mcraft/servers/creative/
и /home/mcraft/servers/skyblock/
.
Чтобы пользователь мог редактировать файлы в добавленных папках, нужно выполнить этот скрипт:
# файлам и каталогам добавляем права на публичное редактирование
find -L /var/lib/filebrowser/base/*/** -type f -print0|xargs -0 chmod +666
find -L /var/lib/filebrowser/base/*/** -type d -print0|xargs -0 chmod 777
# добавляем acl правила, которые будут для новых файлов и каталогов
# ставить права на публичное редактирование по умолчанию
setfacl -L -R -d -m u::rwX -m g::rwX -m o::rwX /var/lib/filebrowser/base/*/**
Протестить, работает ли изменение прав по символическим ссылкам.