Lxcfs ubuntu что это

Обновлено: 08.07.2024

Файловая система SSHFS (Secure Shell FileSystem) позволяет монтировать файловую систему удалённого сервера с помощью протокола SSH. Это может быть очень удобно, если вам надо передать на удалённый сервер много данных или скачать эти данные оттуда. Конечно, существует утилита scp, но иногда просматривать файловую систему в файловом менеджере намного удобнее.

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

Подключение SSHFS в Linux

Для работы файловой системы достаточно SSH доступа к удалённому серверу. На клиентской машине надо установить пакет sshfs. Если он не установлен, команда установки в Ubuntu будет выглядеть следующим образом:

sudo apt install sshfs

Монтирование SSHFS выполняется с помощью одноимённой команды. Её синтаксис такой:

$ sshfs опции имя_пользователя @ адрес : /путь /точка/монтирования

Например, чтобы примонтировать удалённую файловую систему по адресу 192.168.56.103 от имени пользователя root достаточно выполнить:

sudo sshfs root@192.168.56.103:/ /mnt


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

Чтобы получить возможность монтировать от имени обычного пользователя необходимо создать группу fuse:

sudo groupadd fuse

Затем добавить текущего пользователя в эту группу:

sudo usermod -aG fuse $USER

После этого перелогиньтесь в системе, чтобы изменения применились. От имени обычного пользователя вы не сможете примонтировать sshfs в /mnt потому что у вас нет права записи в эту папку, создайте папку для монтирования в домашней папке:

Далее можно пытаться монтировать:


Теперь вы можете использовать эту папку для того чтобы обмениваться файлами с сервером. Если надо чтобы и другие пользователи могли получать доступ к этой папке, надо использовать опцию allow_other. Она будет работать только если в файле /etc/fuse.conf присутствует опция user_allow_other. Добавьте её:

sudo vi /etc/fuse.conf


Теперь можно монтировать:

sshfs -o allow_other root@192.168.56.103:/


Для того чтобы отмонтировать файловую систему используйте привычную команду umount:

Автоматическое монтирование SSHFS

Затем передайте его на сервер:

Когда ключ будет загружен, будет достаточно передать утилите в опциях монтирования путь к ключу. Чтобы убедится, что всё работает выполните:

sshfs -o identityfile=

Если всё работает, можно составить сточку конфигурации для /etc/fstab:

sudo vi /etc/fstab

root@192.168.56.103:/ /mnt fuse.sshfs noauto,x-systemd.automount,_netdev,follow_symlinks,identityfile=/home/sergiy/.ssh/id_dsa,allow_other,default_permissions,reconnect 0 0


Путь к файлу ключа должен быть полным, поэтому замените имя пользователя на своё. Для того, чтобы не получать ошибок доступа при записи желательно чтобы имя пользователя на локальной машине и на удалённой совпадали. Или же, можно указать ID пользователя и группы владельца во время монтирования. Сначала посмотрите UID и GID текущего пользователя:

cat /etc/passwd | grep $USER


В данном случае, это 1000. Первая цифра - это UID, вторая - GID. Затем передайте их в опциях монтирования uid и gid:

root@192.168.56.103:/ /mnt fuse.sshfs uid=1000,gid=1000,noauto,x-systemd.automount,_netdev,follow_symlinks,identityfile=/home/sergiy/.ssh/id_dsa,allow_other,default_permissions,reconnect 0 0

Теперь всё должно работать.

Выводы

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

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Разработкой LXC занимается компания Canonical, последняя версия LXC 4.0.10 вышла совсем недавно в июле 2021, а началась в 2008.

В чем разница LXC и Docker:

Docker - это контейнер для упаковки одного процесса или службы;
на практике Docker это пачка легких контейнеров для упаковки одного веб-сервиса;

LXC - это легкий контейнер на один веб-сервис или сайт, включающий все службы, которые нужны для его функционирования.

В каких случаях удобно применять LXC:

Legacy: у вас уже есть веб-сервис/сайт размещенный на выделенном сервере и нужно упаковать его в форме контейнера, который можно отдать разработчикам, либо перенести на другой сервер (резервный или stage);

Вам нравится работать в окружении, где все службы собраны в одном контейнере;

Нужна изоляция на сервере чтобы каждый веб-сервис находился в своем контейнере, но при этом не терять производительность как в случае с виртуальными машинами;

Если вы умеете настраивать основные сервисы в Linux, значит вы сможете создать LXC контейнер под ваш проект. LXC очень похож на обычную виртуалку.

Наш опыт и небольшая победа над Legacy

Преобразовать наш существующий массивный веб-проект в форме LXC-контейнера оказалось проще в форме LXC.

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

Docker не подошел, т.к. пришлось бы настроить и наладить с десяток контейнеров, хотелось получить результат быстрее.

В форме LXC образа удалось за несколько дней все упаковать, образ очень похож на обычный виртуальный сервер, куда были установлены нужные версии программ, а данные скопированы. За несколько недель продакшен и разработка перешла на LXC.

Как побочный эффект, получили:

способ развернуть stage-окружение для тестирования;

живую резервную копию сервера, куда настроили репликацию БД и синхронизацию файлов;

легкий переезд на другой сервер, когда понадобилось переехать в другой дата-центр.

Порог вхождения отсутствует

Чтобы настроить окружение под веб-проект из нескольких служб (mysql, nginx, php-fpm, memcached, postfix) дополнительных знаний не требуется. Видео-демонстрация: как создать контейнер установить nginx и php-fpm за несколько минут.

Все что нужно знать уместится в этот пост:

Установка LXC под Ubuntu: apt install lxc

Для разработки каталог с исходными файлами проекта пробрасываем с хоста в контейнер.

Как пробросить (и особенность настройки прав)

Конфигурируется это через файл настроек: /var/lib/lxc/myapp/config

Права для рабочей директории

Бывают трудности, когда uid и gid пользователя не совпадают на хосте и в контейнере.
Когда какой-то файл создается в пробрасываемой директории контейнера, скажем от пользователя ubuntu с uid=1000, а у вас на хосте uid=1002, то файл будет не доступен на редактирование.

Рекомендую после создания контейнера создать пользователя в контейнере с таким же uid и gid, как и в вашей хост системе:

Резюме по LXC

Низкий порог вхождения: можно создать свой контейнер за минуты;

хорошо подходит для упаковки существующих проектов и для legacy;

если нужно посмотреть чей-то веб проект, установить определенные версии mysql/nginx или другие программы, при этом не затрагивая основную систему;

он легок, экономит время при отладке и настройке;

проверено работает при наличии sudo, хотя фича unprivileged контейнеров есть;

классно сочетается с zfs, в этом случае получаем мгновенные снэпшоты и дополнительную надежность.

Когда Docker может быть лучше

Вам нужен IaC. Dockerfile это отраслевой стандарт.
В LXC похожее отсутствует. Концепция Infrastructiure as Code мне очень близка, я попробовал создать shell-скрипт который является аналогом Dockerfile чтобы воспроизводит LAMP окружение на LXC, но с помощью скрипта не обновить одной командой продакшен.

Если нужен готовый публичный образ какой-то программы или опубликовать свой образ.

Вот встал вопрос. если у меня запущено несколько штук (больше одного) контейнеров (lxc, docker, . ) с одинаковыми бинарниками и либами (например nginx одной версии), то одинаковые файлы из контейнеров будут записываться в ram единожды первым поднявшимся контейнером (а остальные заберут из дискового кеш) или каждый контейнер отправит в ram свою копию файла?

Есть готовые инструменты или только ручками?

Как первопроходец использования режима router для veth lxc докладываю:

необходимо и достаточно (Debian 11)

PS А ещё хотелось бы получать IP в контейнере от DHCP, но без IP в конфиге он просто не запускается с ошибкой сети.

Кто виноват и что делать? Хрен бы со scopами всякими вручную, но автостарт как делать?(не пробовал). Починят или как? Ждать или гуглить? Грамотной статьи по переходу на cgroupV2 не нашёл, а…

есть проблемка, если набрать в lxc:

то отвалится ssh и на хосте и в lxc

Как сделать, что бы iptables в lxc не перекрывал iptables на хосте?

Хотел создать lxc для проекта и выдать доступы программеру, который будет создавать docker'ы для своей работы в контейнере. Но своими руками он может переломать все связи на моем хосте. Отдавать прогеру отдельный сервер под маленький проект, будет слишком жирно.

Хочется ужасного, меню как программа для всех приложений, что живут в контейнере LXC. В Chrome OS вместо штатной засунул archlinux, почти все прекрасно, но помнить, как называются приложения для запуска из командной строки так себе тема.

Единственное меню вспомнил - lxlaucher от LXDE, работает, но допотопное. Что наподобие есть в альтернативу?

Появилась проблема, нужно фильтровать трафик который идёт на контейнер в основной ос. Сейчас с такими настройками не могу поймать трафик который идёт на lxc, никакой цепочкой iptables.

Добрый вечер ЛОР. Имеется машина с несколькими контейнерами, конфигурилось все через lxd.

Кинфигурация одного из контейнеров:

Конфигурация дефолтного профиля:

Форвардинг пакетов включен. Что я делаю не так?

Поймал себя очередной раз на неправильно выбранном размере для системного раздела. Понятно, что можно загрузиться с live образа и подрастянуть lvm’ом, но дабы избегать подобного действа хотелось бы иметь возможность запускать основную систему в какой-то контролируемой среде. Из того что приходит на ум:

Кто как решает эту проблему, и есть ли какие готовые фреймворки/мануалы, чтобы по минимуму играть в пионеров?

Интересует именно решение для desktop, с серверами всё проще, а прокидывать туда разве что видюху надо.

P.S. если кто расскажет как решить средствами lvm без перезагрузки сию досадную неприятность, то я готов изгнать эту бредовую идею обратно на задворки сознания.

Желаю странного. есть хост с одним сетевым адаптером. Оный адаптер имеет 2 ip (первичный и вторичный), прописанных статически. Есть желание повесить на каждый из этих 2 адресов 2 gluster сервера, крутящихся на 2 lxc контейнерах хоста. net им обоим выставлено none, чтоб использовать сетевую карту хоста. Возможно ли каждому контейнеру видеть только какой-то один из двух адресов этого адаптера? через cgroups какой-нить настройкой или ещё как.

ps: да, я знаю про veth и всякое такое, но это дополнительные ip адреса в сети, хочу обойтись имеющимися.

pps:да, я знаю, что это порнография, это исключительно тестовое окружение.

Есть необходимость иметь графическое не полностью доверенное приложение в контейнере и запускать пару копий от разных пользователей не перелогиниваясь, чтобы оно не имело доступ ни к хомяку, ни ко всей ФС, ни к сетевым интерфейсам и моему реальному ip. Пусть свои настроечки хранит, и никуда не лезет.
Это планируется делать в виртуалке, где есть и другие задачи. Запускать ещё одну машину только для одного приложения, кажется неразумным расходом ресурсов и времени. Сразу в голову приходит использовать контейнер. Нашёл разные инструкции для запуска из контейнера Docker с расшариванием X11 сокета хоста (например, это), а так же из lxc контейнера (например, такая)
Какой способ будет наименее требователен к ресурсам (т.к. запускается уже на виртуалке) и оптимальным решением?
Знаю про firejail, но мне не хотелось бы настраивать ещё из-за него apparmor, да и вообще, не очень понравился.

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

Шаббат шалом, джентльмены.

Есть хост c ZFS на борту, на нём сконфижен LXD:

Если зайти на контейнер на этом хосте и попробовать записать что-нибудь в /dev/stdout, то получаю Permission denied, если просто вывести что-нибудь командой echo, то символы выводятся:

Контейнеры Linux или LXC - это легкая технология виртуализации, которая может использоваться для решения различных задач. Технология встроена в ядро Linux и с помощью неё вы сможете запустить несколько дистрибутивов на одном компьютере или сервере практически без потерь производительности.

LXC можно расценивать как что-то среднее между изолированным окружением chroot и полноценной технологией виртуализации Qemu, Xen, KVM или VirtualBox. Поскольку все программы выполняются на реальном железе, без использования виртуализации, то вы не теряете производительность, в отличие от случая если бы вы использовали VirtualBox. Вы можете очень легко запустить параллельно несколько контейнеров в своей системе, даже при очень низких аппаратных ресурсах, чего нельзя сделать с полноценными технологиями виртуализации.

В этой небольшой статье мы рассмотрим как выполняется установка и настройка LXC в Ubuntu, а также как использовать эту технологию.

Что такое контейнеры LXC?

Перед тем как перейти к настройке давайте рассмотрим что из себя представляют контейнеры Linux. Как я уже сказал, это не совсем виртуализация, потому что все программы, которые выполняются внутри контейнера - работают на реальном железе и почти не теряют в производительности. Используется, только одно ядро, а для разграничения наборов процессов между собой применяются виртуальные окружения.

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

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

Благодаря всему этому потеря производительности при использовании контейнеров LXC Linux составляет не более 1%. Теперь, когда вы знаете как все это работает, перейдем к описанию процесса установки LXC.

Установка и настройка LXC

В этой инструкции мы будем настраивать LXC в Ubuntu, поскольку это самая популярная операционная система, но все эти команды подойдут для всех других дистрибутивов. Отличие составляет только команда установки. Сначала нужно установить все необходимое программное обеспечение. Установка LXC на Ubuntu выполняется командой:

sudo apt install lxc lxc-templates uidmap

lxc

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

Настроим пользовательские пространства имен. Первая цифра означает первый UID пользователя linux в контейнере, вторая отвечающий ему UID пользователя в основной системе:

echo "lxc.id_map = u 0 100000 65536" >>

/.config/lxc/default.conf
echo "lxc.id_map = g 0 100000 65536" >>

lxc1

Дальше настраиваем сеть в контейнере:

echo "lxc.network.type = veth" >>

/.config/lxc/default.conf
echo "lxc.network.link = lxcbr0" >>

/.config/lxc/default.conf
echo "lxc.network.flags = up" >>

Затем в файле /etc/lxc/lxc-usernet нужно разрешить использовать сетевые интерфейсы текущему пользователю, чтобы получить возможность запускать контейнер без root прав:

echo "$USER veth lxcbr0 2" | sudo tee -a /etc/lxc/lxc-usernet

Для того чтобы пространства имен пользователей linux в контейнере работали нужно присвоить своему пользователю подпространство UID и GID 100000-165536:

sudo usermod --add-subuids 100000-165536 $USER
sudo usermod --add-subgids 100000-165536 $USER

И даем права на использование данного пользователя в cgm:

sudo cgm create all user
sudo cgm chown all user $(id -u) $(id -g)
cgm movepid all user $$

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

lxc-create --template download --name ubu1

lxc2

В этом списке вам предстоит выбрать нужную операционную систему. Просто введите необходимые параметры, имя, релиз и архитектура, выбрав их из списка доступных, например, для Ubuntu Yakkety Yak 64 бит:

lxc3

Затем начнется загрузка уже готового, настроенного образа из интернета. Это может занять довольно много времени если у вас медленный интернет.

Также вы можете использовать не интерактивный режим и указать все необходимые параметры сразу в командной строке:

lxc-create -t download -n ubu1 -- --dist ubuntu --release xenial --arch amd64

lxc4

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

Использование контейнеров LXC

После всех проделанных выше действий мы можем перейти к запуску контейнера. Для этого используйте команду lxc-start с именем вашего контейнера, например:

lxc-start -n ubu1 -d

Опция -n задает имя контейнера, в нашем случае - ubu1, а -d говорит утилите запуска, что нужно выполнять программу в фоновом режиме. Вы можете убедиться, что контейнер запущен с помощью такой команды:

lxc5

Тут опция -f включает более подробный вывод, в списке вы увидите только что установленный контейнер и его состояние будет запущен.

Подключение к контейнеру

Чтобы подключиться к терминалу контейнера используйте команду lxc-attach:

lxc-attach -n ubu1

lxc6

После подключения вы получаете полный root доступ к файлам в контейнере, дальше рекомендуется задать пароль root и создать пользователя:

lxc7

lxc8

Настройка системы или установка программ выполняется точно так же, как и в обычной системе, например установка программ:

apt install wget openssh-server htop tmux nano iptables

Выключение контейнера

Когда вы завершили все работы в контейнере, его можно выключить, чтобы он не отнимал системные ресурсы. Для этого выполните:

lxc9

Эта команда проведет правильное завершение работы контейнера и он больше не будет потреблять ресурсов системы, кроме дискового пространства.

Клонирование контейнеров

После того как вы установили все необходимые программы в контейнере и настроили его как нужно, можно создать несколько его копий для упрощения настройки новых контейнеров и экспериментов. Для этого есть команда clone, которая создает полную копию контейнера:

Для примера давайте создадим клон контейнера ubu1 с именем ubu2. Сначала нужно остановить контейнер:

Затем можно клонировать. Опция -n указывает контейнер источник, а -N - имя нового контейнера:

lxc-copy -n ubu1 -N ubu2

Затем вы опять можете использовать lxc-ls, чтобы убедится, что контейнер был создан:

lxc11

Моментальные снимки

Затем используйте команду lxc-snapshot для создания снимка:

lxc-snapshot -n ubu1

Будет создан снимок с именем snap0, следующие снимки для этой же машины будут называться snap1, snap2, и так далее. Вы можете восстановить состояние контейнера до снимка в любой момент, для этого используйте опцию -r:

lxc-snapshot -r snap0 -n ubu1

Вам нужно указать имя снимка и имя контейнера.

Запуск контейнера при старте системы

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

lxc.start.auto = 1
lxc.start.delay = 5

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

Решение проблем

Если у вас возникнут проблемы с запуском контейнеров, первое что нужно сделать, это попытаться запустить контейнер lxc с опцией -F, запуск не будет отправлен в фоновый режим и вы увидите все ошибки:

lxc-start -n ubu1 -F

lxc12

sudo vi /etc/lxc/lxc-usernet

losst veth lxcbr0 5

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

Выводы

Контейнеры Linux можно использовать для решения огромного количества задач. Начиная от средства тестирования настроек или нового программного обеспечения и до изоляции своих приложений для обеспечения максимальной безопасности системы. Обратите внимание, что вы даже можете запускать приложения с графическим интерфейсом с помощью контейнеров.

Установка и настройка LXC Linux полностью рассмотрена и я надеюсь, теперь вам стало понятнее как работать с этой технологией. Ее полезность ограничена только вашей фантазией, так что не бойтесь экспериментировать. Если остались вопросы по настройке контейнеров, спрашивайте в комментариях!

На завершение видео с конференции LinuxPiter, где рассказывается подробно что такое контейнеры Linux и действительно ли они настолько безопасны:

Читайте также: