В вашем случае, я думаю, вы также могли бы максимально придерживаться стандартных процедур.
Начиная с нетронутой CentOS 6.10 минимальной установки ISO, я бы действовал следующим образом:
Во-первых, включить неограниченный OpenVPN :CentoOS 6 поставляется со стандартной политикой SELinux, которая по умолчанию запускает /usr/sbin/openvpn
двоичный файл в ограниченном режиме, который в основном разрешает только сетевые настройки, тем самым предотвращая любой вспомогательный скрипт. чтобы можно было сделать что-нибудь полезное. Однако CentOS 6 также предоставляет один простой параметр для включения неограниченного OpenVPN. Как суперпользователь запустите:
setsebool -P openvpn_run_unconfined on
Подождите несколько секунд, так как это может занять некоторое время.
Вы можете вернуть его в ограниченный режим, как только все заработает. Есть несколько жизнеспособных подходов, к которым я вернусь позже.
Затем, чтобы продолжить базовую настройку, установите репозиторий EPEL в yum вашей системы:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
Это дает yum вашей системы репозиторий, который предоставляет пакеты RPM для openvpn и передачи, упакованные для CentOS 6.
После этого вы можете сделать:
yum install openvpn transmission-daemon
Затем установите бота transmission-telegram
, как вы уже сделали. Просто не забудьте поместить его в каталог, указанный в $PATH
. Принимая во внимание политику CentOS 6 SELinux, /usr/local/bin
может быть хорошим выбором.
(Пожалуйста, обратите внимание , что я не могу подробно рассказать о ботах Telegram, потому что я ничего о нем не знаю и даже не могу его протестировать, потому что вообще не пользуюсь Telegram.)
Затем создайте скрипт openvpn-transmission-up.sh
наподобие:
#!/bin/bash
PATH+=":/sbin:/usr/sbin"
service transmission-daemon start
service transmission-daemon status && telegram-bot-start.sh
telegram-bot-start.sh
— это просто гипотетическая оболочка для запуска фактической команды, которая запускает бота Telegram, и выполняется только в случае успешного запуска демона передачи -. Вы также можете использовать прямую команду вместо сценария-оболочки, если прямую команду можно сделать одной строкой -, которая будет помещена после &&
.
Затем также сделайте скрипт openvpn-transmission-down.sh
наподобие:
#!/bin/bash
PATH+=":/sbin:/usr/sbin"
telegram-bot-stop.sh
service transmission-daemon stop || true
Здесь вы также можете использовать прямые команды для остановки бота Telegram вместо обёртки telegram-bot-stop.sh
, даже если они на самом деле представляют собой последовательность команд.
Затем сделайте два вышеуказанных сценария работоспособными:
chmod +x openvpn-transmission-up.sh openvpn-transmission-down.sh
и снова поместите их в каталог /etc/openvpn/scripts
(, чтобы соответствовать политике CentoOS SELinux ). Создайте этот каталог, если у вас его еще нет.
Затем поместите свой собственный конфиг для OpenVPN в /etc/openvpn
. Такой файл можно назвать как угодно, но он должен иметь суффикс .conf
.
Убедитесь, что в этом файле .conf
есть следующие строки:
script-security 2
route-up scripts/openvpn-transmission-up.sh
route-pre-down scripts/openvpn-transmission-down.sh
Если у вас уже есть скрипты route-up
или route-pre-down
, просто объедините существующие скрипты до -с указанными выше соответственно, но обязательно поместите их в /etc/openvpn/scripts
.
Приведенная выше настройка гарантирует, что ваш бот Transmission и Telegram всегда будут следовать судьбе VPN-туннеля.
Наконец, установите openvpn для запуска при загрузке:
chkconfig openvpn on
Этот последний параметр зависит от установки, поставляемой с пакетом RPM для OpenVPN, что позволяет запускать его только после успешного запуска общей сети.
Обратите внимание: я думаю, вам не нужно настраивать Transmission, потому что конфигурации по умолчанию, поставляемой с пакетом RPM, должно быть достаточно. Однако, если вы хотите повторно использовать команду sed
для установки IP-АДРЕСА _, поместите эту команду sed
в сценарий openvpn-transmission-up.sh
перед запуском демона передачи -. В любом случае, обычно лучше использовать $ifconfig_local
вместо $4
.
К этому моменту все должно быть готово. Вы можете проверить это с помощью простого service openvpn
, за которым следует start
, или stop
, или restart
и т. д. Или просто перезагрузив безголовый сервер.
ПРИМЕЧАНИЕ : если ваш провайдер VPN требует аутентификации с помощью имени пользователя и пароля, вам нужно будет поместить их в файл в две отдельные строки. Этот файл должен находиться в папке /etc/openvpn
в соответствии с политикой SELinux. Затем включите auth-user-pass /etc/openvpn/credentials-file
в ваш файл openvpn .conf
. Если вы этого не сделаете, CentOS остановится во время загрузки, ожидая интерактивного ввода учетных данных, или просто OpenVPN может просто отказаться запускаться.
Что касается (повторного -)усиления вышеуказанной настройки, в зависимости от ваших предпочтений вы можете быть довольны тем, как есть :установка на данный момент использует допустимые настройки, предварительно -установленные CentOS, в том числе тот, который позволяет OpenVPN работать с меньшими ограничениями, что в основном позволяет вспомогательным сценариям свободно выполнять двоичные файлы, доступные в системе. Как бы расплывчато это ни звучало, он по-прежнему более ограничен, чем полное отсутствие SELinux, и, оставив все таким образом, и Transmission, и Telegram-бот работают с немного большими ограничениями, чем их стандартная (или ручная )установка. разрешать.
Если вы хотите вернуть OpenVPN в режим ограниченной работы, это все равно может быть довольно легко сделать, воспользовавшись тем фактом, что CentOS 6 фактически использует Upstart в качестве своего /sbin/init
, даже несмотря на то, что большая часть операций загрузки зависит от устаревшего Скрипты в стиле SysVinit -. Однако вам потребуются дополнительные шаги:
Для начала переведите OpenVPN обратно в ограниченный режим:
setsebool -P openvpn_run_unconfined off
Теперь, если вы запустите OpenVPN, вспомогательные скрипты не смогут запустить бота Transmission и Telegram.
Итак, пользовательская политика SELinux:
Создайте файл с именемopenvpn-talk-upstart.te
точно следующим образом:
module openvpn-talk-upstart.mod 1.0;
require {
type openvpn_t;
type init_t;
class unix_stream_socket connectto;
}
allow openvpn_t init_t:unix_stream_socket connectto;
Затем выполните следующие команды:
checkmodule -m -M -o openvpn-talk-upstart.mod openvpn-talk-upstart.te
semodule_package -o openvpn-talk-upstart.pp -m openvpn-talk-upstart.mod
semodule -i openvpn-talk-upstart.pp
последняя команда может занять некоторое время.
Затем задания Upstart:
Создайте файл /etc/init/transmission-up.conf
следующим образом:
task
exec service transmission-daemon start
и файл /etc/init/transmission-down.conf
следующим образом:
task
exec service transmission-daemon stop
Тогда вам нужны задания Upstart для бота Telegram.
Для согласованности с моим примером я придерживаюсь своего гипотетического подхода к сценариям, поэтому файлы заданий, названные, например, /etc/init/telegram-bot-up.conf
и /etc/init/telegram-bot-down.conf
, будут такими же, как файлы Transmission, только с командами exec
ed, преобразованными в (соответственно)/usr/local/bin/telegram-bot-start.sh
и /usr/local/bin/telegram-bot-stop.sh
.
Обратите внимание, что здесь, в зависимости от вашего доверия к Upstart, вы также можете поместить соответствующие команды непосредственно в файлы заданий, в ключевые слова script... end-script
вместо ключевого слова exec
,или вы даже можете создать демона, полностью контролируемого Upstart -, с помощью одного единственного файла задания Upstart (, но не типа task
), если вам так хочется.
После этого сделайте вспомогательный сценарий OpenVPN openvpn-transmission-up.sh
в /etc/openvpn/scripts
следующим:
#!/bin/sh
/sbin/start transmission-up && /sbin/start telegram-bot-up
и сценарий openvpn-transmission-down.sh
:
#!/bin/sh
/sbin/start telegram-bot-down
/sbin/start transmission-down || true
Обратите внимание на использование команды /sbin/start
, хотя на самом деле это операция «вниз».
Теперь все должно работать с OpenVPN в исходном ограниченном (, т.е. более безопасном )режиме, но и с Transmission, и с ботом Telegram в их стандартном «бесплатном» (, т.е. менее безопасном )режиме.
Если вы хотите еще больше усилить защиту этих двух последних, вам нужно будет запустить их в ограниченном контексте SELinux, например, для OpenVPN, а затем провести тщательный анализ файла /var/log/audit/audit.log
, чтобы точно настроить политику SELinux. В этом вам могут помочь инструменты, а именно команда audit2allow
, доступная в пакете policycoreutils-python
.
Вы можете запустить эту команду поверх audit.log
, полученного из SELinux в разрешительном режиме (, см. файл /etc/sysconfig/selinux
), но это может привести к слишком большому разрешению. В противном случае вы можете запустить его поверх audit.log
, который исходит от обычного принудительного SELinux, выполняя его шаг -за шагом -, пока вы, наконец, не доберетесь до рабочей настройки. В последнем случае вы можете быть уверены, что разрешаете только то, что действительно необходимо.
Вывод из audit2allow -a -m...
должен быть передан в checkmodule -m -M -o...
, затем вывод этого последнего в semodule_package -o... -m...
и, наконец, semodule -i
файла, сгенерированного semodule_package
. Эта итерация на каждом шаге анализа.
Это может быть очень долгой задачей, и даже когда вы доберетесь до рабочей установки, это может быть так только вначале :в какой-то момент вы можете столкнуться с неожиданными проблемами "отказ в доступе" позже на, например в первый раз, когда ваша передача или бот Telegram,пытается получить доступ к чему-то, чего раньше не пробовал.
echo Y | sudo tee /sys/module/bluetooth/parameters/disable_ertm
This is temporary, rebooting your computer will undo the effect of step 2
There is also a permanent solution in the linked article, but I didn't use that and so I haven't included it in this answer, if anyone does use it, and it works, feel free to add it here.
/etc/modprobe.d/xbox_bt.conf
options bluetooth disable_ertm=1
/sys/module/bluetooth/parameters/disable_ertm
равно Y
. Возможно, вам потребуется выполнить следующую команду в конце, чтобы все заработало.
sudo systemctl restart bluetooth