Невозможно изменить контекст безопасности SELinux для общей папки VirtualBox

Я столкнулся со следующей ситуацией. Для целей веб-разработки мне удалось настроить гостевую виртуальную машину CentOS 7 с VirtualBox. Я установил стек LAMP и настроил Apache (vhost, добавил члена Apache в группу vboxsf, добавил правило брандмауэра) для доступа к общей папке VirtualBox.

Параметр конфигурации гостевой машины GUEST CentOS 7 VM:

Virtual machine hostname: dickwan.dev
Shared Folders:
    Name    |   Read-only   | Auto-mount
    ------------------------------------
    dickwan |   no          | yes
    ------------------------------------


Networking: NAT (with port forwarding rules)
Port Forwarding Rules:
    Name    |   Protocol    |   Host IP     |   Host Port   |   Guest IP    |   Guest Port
    --------------------------------------------------------------------------------------
    HTTP    |   TCP         |   . . .       |   8080        |   . . .       |   80
    --------------------------------------------------------------------------------------
    MariaDB |   TCP         |   . . .       |   9306        |   . . .       |   3306
    --------------------------------------------------------------------------------------
    SSH     |   TCP         |   . . .       |   2222        |   . . .       |   22

Теперь, когда я на своем хост-компьютере, я открываю браузер и перехожу к (допустим):

http://dickwan.dev:8080/server-status

Я получаю сообщение:

Forbidden

You don't have permission to access /server-status on this server.

Я отследил проблему до проблемы типа контекста безопасности SELinux. Когда SELinux отключен, все работает нормально (ну... хорошо, да, хм).

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

Есть ли возможность получить доступ к общей папке через Apache без деактивации SELinux?


person dickwan    schedule 05.11.2014    source источник


Ответы (2)


У меня была похожая проблема (кроме Fedora 20 в качестве хоста и гостевой ОС). Что я сделал:

sudo mount -t vboxsf общая_папка /медиа/общая_папка

sudo ln -s /media/shared_folder/ /var/www/

sudo chcon -R --reference=/var/www /var/www/shared_folder

И это работает для меня :)

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

person seba    schedule 05.12.2014

Поскольку контекст безопасности общих папок VBox изменить нельзя, вы можете изменить политику безопасности SELinux, чтобы разрешить Apache работать с этим контекстом. Это похоже на открытие порта в брандмауэре, чтобы открыть определенный порт приложению.

Во-первых, убедитесь, что ваш пользователь apache является частью группы, которой принадлежит общая папка, если это не так, вы можете добавить его с помощью команды, которая будет выглядеть следующим образом (имена пользователя/группы могут отличаться в вашей системе):

usermod -aG vboxsf apache

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

Если вы ленивы и хотите разрешить Apache доступ только для чтения к вашим общим папкам VBox, вы, вероятно, можете адаптировать следующий файл политики my_httpd_t.te и использовать включенные команды, чтобы применить его в своей системе.

module my_httpd_t 1.0;

require {
        type httpd_t;
        type vmblock_t;
        class dir read;
        class file { read getattr open };
}

#============= httpd_t ==============
allow httpd_t vmblock_t:dir read;
allow httpd_t vmblock_t:file { getattr open read };

# Generated by audit2allow

# To apply this policy:
## checkmodule -M -m -o my_httpd_t.mod my_httpd_t.te
## semodule_package -o my_httpd_t.pp -m my_httpd_t.mod
## semodule -i my_httpd_t.pp
## systemctl restart httpd
person guiweb    schedule 26.07.2017