Как сделать файл неизменяемым в Linux
Предположим, вы хотите защитить от записи некоторые важные файлы в Linux, чтобы их нельзя было удалить или подделать случайно или иным образом.
Предположим, вы хотите защитить от записи некоторые важные файлы в Linux, чтобы их нельзя было удалить или подделать случайно или иным образом.
После обновления платформы 8.3.20.1674, обратил внимание что не выполняется реиндексация баз данных относящихся к 1С, в логах значится ошибка — «Невозможно реорганизовать индекс «_Acc48_1» в таблице «_Acc48″, поскольку отключена блокировка на уровне страницы.»
DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) — это блочное устройство, предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством.
Поступило задание проработать возможность централизованного создания пользовательских подписей в Outlook на основе данных из их учетных записей в Active Directory и так же запрета пользователям задавать свои подписи.
Syncthing — приложение, позволяющее синхронизировать файлы между несколькими устройствами. Разберем как поднять Syncthing на Debian 11 Bullseye.
RADIUS — расширенный протокол удаленной аутентификации пользователей, представляет собой ключевой элемент в обеспечении безопасности и управлении доступом в сетях.
Опишу как настроить алерты на возникающие различные события в MSSQL, дабы быть вовремя информированным о возникшей той или иной проблеме.
В продуктиве имеется два MSSQL работающих в режиме Always On High Availability
и после очередного планового переключения ноды в secondary для установки обновлений сервер и перезагрузки, после перезагрузке одна из баз в Always on Availability Group
оказалась в статусе — Not Synchronizing
.
Ниже опишу как ввести linux систему Debian 10 в домен Windows с помощью Kerberos, Samba, Winbind.
Исходные данные:
Перед началом выполнения ниже описанных действий обновляем систему до актуального состояния:
apt-get update && apt-get upgrade -y
Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname
:
datastore1.sysos.local
Так же файл /etc/hosts
приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP:
127.0.0.1 localhost 192.168.1.10 datastore1.sysos.local datastore1
Если разница будет более 5 минут, то будет не возможно получить билет от Kerberos. Настраиваем синхронизацию времени с контроллером домена, выполняем установку NTP:
apt-get install ntp ntpdate
В файле конфигурации /etc/ntp.conf
, добавляем в него информацию о вашем сервере времени (в моем случае указываю контролер домена):
# You do need to talk to an NTP server or two (or three). server dc1.sysos.local
Перезапускаем службу времени:
/etc/init.d/ntp restart
Для единовременной синхронизации можно воспользоваться командой:
ntpdate dc1.sysos.local
[stextbox id=’info’]Рекомендую ознакомится подробней о синхронизации времени на Linux системах можно почитать в этой статье и выполнить его настройку.[/stextbox]
В различных ситуациях может понадобится выполнение sudo
без ввода пароля. Рассмотрим как это сделать на Linux на нескольких примерах.
Для удобства рекомендую хранить файл настроек для каждого пользователя системы (если их много, то будет проще управлять) отдельно в /etc/sudoers.d
.
К примеру для пользователя jakonda
, разрешим выполнять абсолютно все команды без sudo
пароля:
echo "jakonda ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers.d/jakonda
Пояснение по синтаксису:
jakonda |
Задаём имя пользователя, к которому нужно применить данное правило (в данном случае это jakonda ). |
Первое ALL |
Означает, что правило будет применяться ко всем хостам. |
Второе ALL |
Означает, что указанный пользователь может запускать команды в сессии любого пользователя. |
Третье ALL |
Означает, что указанный пользователь может запускать команды в любой группе. |
Последнее ALL |
Указывает, что эти правила нужно применять ко всем командам. |
Если необходимо разрешить выполнять только определенные команды, к примеру chown
, chmod
:
jakonda ALL=(ALL) NOPASSWD:/usr/bin/chmod,/usr/bin/chown
[stextbox id=’info’]ИНФОРМАЦИЯ. Важно указывать полный путь к исполняемому файлу. Узнать расположение файла можно используя — which <имя команды>
.[/stextbox]
Можно разрешить пользователю перезапускать какую либо службу (к примеру apache):
jakonda ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart apache2
Ранее я уже описывал как добавить поддержку шифрования по ГОСТ Р 34.10-2012 в OpenSSL на Debian 9, недавно возвращался к этому вопросу но уже на системе Debian 11, поэтому решил актуализировать под Debian 11.
# Все ниже действия будут производится от root.
Устанавливаем необходимые пакеты:
apt-get install g++ gcc make git libssl-dev
Поддержу GOST-Engine будем реализовывать для OpenSSL 1.1.1p.
Выполняем сборку OpenSSL 1.1.1p
, выполняем команды (скачиваем, распаковываем, собираем билд, устанавливаем, настраиваем):
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix=/usr/ssl --openssldir=/usr/ssl make all make install cd .. && rm /usr/bin/openssl ln -s /usr/ssl/bin/openssl /usr/bin/openssl echo "/usr/ssl/lib" >> /etc/ld.so.conf.d/ssl.conf ldconfig
Проверяем версию OpenSSL, должно быть так:
openssl version -v OpenSSL 1.1.1p 21 Jun 2022
# Для сборки GOST Engine
нужна версия CMake
3.0 и выше.
# Добавляем в систему репозиторий MySQL.
wget https://dev.mysql.com/get/mysql-apt-config_0.8.18-1_all.deb dpkg -i mysql-apt-config_0.8.18-1_all.deb
[stextbox id=’info’]Установщик пакета предложит вам выбрать версию MySQL для создания репозитория. По умолчанию для конфигурации репозитория выбрана версия MySQL 8.0.[/stextbox]
# Обновляем индекс репозитория
apt-get update apt-get install mysql-community-server -y
[stextbox id=’info’]Во время установки будет предложено ввести пароль от root пользователя, а так же в случае установки MySQL 8.0 будет предложено выбрать метод аутентификации. [/stextbox]
# Выполняем настройку безопасности MySQL сервера.
mysql_secure_installation
В случае если в процессе обновления индексов репозитория вы увидите ошибку не доступности публичного ключа MySQL репозитория:
Err:2 http://repo.mysql.com/apt/debian buster InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29 W: GPG error: http://repo.mysql.com/apt/debian buster InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29 E: The repository 'http://repo.mysql.com/apt/debian buster InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.
# Добавляем публичный ключ MySQL репозитория и обновляем локальные индексы репозитория.
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 apt-get update
Рассмотрим как ввести систему Debian в домен Windows с помощью realmd, SSSD.
Realmd (Realm Discovery) – сервис D-Bus, позволяющий производить настройку сетевой аутентификации и членства в домене (Active Directory) без сложных настроек. Информация о домене обнаруживается автоматически. Для аутентификации и проверки учетных записей realmd
использует SSSD
(через Kerberos и LDAP) или Winbind
.
SSSD (System Security Services Daemon) — это клиентский компонент централизованных решений для управления идентификацией, таких как Microsoft Active Directory, Kerberos, OpenLDAP и других серверов каталогов. SSSD обслуживает и кэширует информацию, хранящуюся на удаленном сервере каталогов, и предоставляет услуги идентификации, аутентификации и авторизации хост-машине.
Исходные данные:
# Обновляем информацию о репозиториях и обновляем установленные пакеты:
apt-get update && apt-get upgrade -y
Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname
:
debian.jakonda.local
Файл /etc/hosts
приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP хоста:
127.0.0.1 localhost 192.168.1.10 debian.jakonda.local debian
Настраиваем клиент DNS на хосте. Файл /etc/resolv.conf
приводим к виду с учетом ваших данных:
domain jakonda.local search jakonda.local nameserver 192.168.1.100
Очень важно для корректной работы чтобы разница во времени между хостом и домен контроллером была минимальная или не превышала более 5 минут, в противном случае не возможно получить билет от Kerberos. Настроим синхронизацию времени с контроллером домена.
# Устанавливаем необходимые пакеты:
apt-get install ntp ntpdate
В файле /etc/ntp.conf
, указываем контроллер домена в качестве точки синхранизации, остальные комментируем :
# You do need to talk to an NTP server or two (or three). server dc1.jakonda.local # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: <http://www.pool.ntp.org/join.html> # pool 0.debian.pool.ntp.org iburst # pool 1.debian.pool.ntp.org iburst # pool 2.debian.pool.ntp.org iburst # pool 3.debian.pool.ntp.org iburst
Выполняем единовременную синхронизацию времени с контроллером домена и запускаем службу:
/etc/init.d/ntp stop ntpdate -bs jakonda.local /etc/init.d/ntp start
В рамках теста разворачивал ownCloud и при попытке установки внутренного приложения External Storage: Windows Network Drives
видел ошибку:
Приложение не может быть установлено, следующие зависимости не удовлетворены:
The library libsmbclient is not available
.
Ниже описание как выполнить установку libsmbclient
для php7.4 в Debian 11.
Устанавливаем необходимые пакеты:
apt-get install php7.4-dev libsmbclient-dev -y
С помощью PECL
(репозиторий модулей для PHP) устанавливает smbclient
для версии 7.4
:
pecl -d php_suffix=7.4 install smbclient
В файл конфигурации /etc/php/7.4/apache2/php.ini
добавляем описание включение модуля
echo 'extension=smbclient.so' >> /etc/php/7.4/apache2/php.ini
Перезапустим apache для применения изменений:
/etc/init.d/apache2 restart
Разберем как установить и Collabora Online Development Edition на Debian 11 Bullseye.
Collabora Online — это мощный офисный пакет на базе LibreOffice для совместной работы с документами в браузере. В рамках статьи будем устанавливать Collabora Online Development Edition (CODE) версию. Я лично использую CODE в связке с Nextcloud.
# Все ниже действия будет выполняться от root
.
Импортируем ключ подписи и добавляем репозиторий Collabora Productivity Ltd (/etc/apt/sources.list.d/collaboraonline.sources
):
cd /usr/share/keyrings wget https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg cat EOF /etc/apt/sources.list.d/collaboraonline.sources Types: deb URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian11 Suites: ./ Signed-By: /usr/share/keyrings/collaboraonline-release-keyring.gpg EOF
Обновляем информацию о репозиториях и устанавливаем пакеты:
apt-get update apt-get install coolwsd code-brand collaboraofficebasis-ru collaboraoffice-dict-ru collaboraoffice-dict-en apache2 apache2-utils -y
Настройка CODE осуществляется через файл — /etc/coolwsd/coolwsd.xml
, но более удобный способ настройки через пакет coolconfig
. Выполним основные настройки для работы CODE.
Задаем пароль администратора для доступа в web консоль CODE.
coolconfig set-admin-password
Указываем FQDN имя сервера на котором запущен coolwsd (прим. collaboraonline.example.com):
coolconfig set server_name <fqdn name>
Указываем имя хоста которому будет разрешен доступ к демону coolwsd
(прим. nextcloud.example.com):
coolconfig set storage.wopi.host <fqdn name>
Рассмотрим как на виртуальной машине Linux увеличить раздел диска без LVM.
Исходные данные
В системе один диск /dev/sda
размером 20G, отобразим информацию по нему:
fdisk -l Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors Disk model: Virtual Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x73000288 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 39942143 39940096 19G 83 Linux /dev/sda2 39944190 41940991 1996802 975M 5 Extended /dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
df -h Filesystem Size Used Avail Use% Mounted on udev 944M 0 944M 0% /dev tmpfs 192M 500K 192M 1% /run /dev/sda1 19G 990M 17G 6% / tmpfs 960M 0 960M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 192M 0 192M 0% /run/user/1000
Увеличиваем размер жесткого диска в ВМ, в моем случае я увеличиваю до 25G
. После расширения диска в ВМ, принудительно выполним рескан дисков, командой:
echo 1 > /sys/block/sda/device/rescan
Проверяем изменения. В случае если после рескана размер диска не увеличился в системе, то выполняем перезагрузку и проверяем повторно.
fdisk -l Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors Disk model: Virtual Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x73000288 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 39942143 39940096 19G 83 Linux /dev/sda2 39944190 41940991 1996802 975M 5 Extended /dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
[stextbox id=’warning’]ВНИМАНИЕ. Рекомендуется перед последующими действиями сделать резервную копию ВМ.[/stextbox]
Разберем как установить из исходников актуальную (на момент написания статьи) версию VPN-сервера OpenConnect 1.2.2 на Debian 11 Bullseye.
# Все ниже действия будут производится из под root.
# Обновляем информацию о репозиториях и обновляем установленные пакеты:
apt-get update && apt-get upgrade -y
# Устанавливаем необходимые зависимости:
apt-get install build-essential make pkg-config libgnutls28-dev libev-dev libpam0g-dev liblz4-dev libseccomp-dev libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev libpcl1-dev libcjose-dev libjansson-dev liboath-dev libprotobuf-c-dev libtalloc-dev libhttp-parser-dev libcurlpp-dev libssl-dev libmaxminddb-dev libbsd-dev libsystemd-dev libwrap0-dev libuid-wrapper libpam-wrapper libnss-wrapper libsocket-wrapper gss-ntlmssp tcpdump protobuf-c-compiler iperf3 lcov ssl-cert libpam-oath
# Скачиваем и распаковываем исходники OpenConnect (на момент написания статьи последняя версия 1.2.2):
wget -P /opt/ https://www.infradead.org/ocserv/download/ocserv-1.2.2.tar.xz tar -xvf /opt/ocserv-1.2.2.tar.xz -C /opt/ cd /opt/ocserv-1.2.2
# Собираем и устанавливаем — OpenConnect:
./configure --prefix= --enable-oidc-auth make && make install
# Создаем рабочий каталог для ocserv
и копируем примеры файлов конфигурации в него:
mkdir -p /etc/ocserv/ cp doc/sample.config /etc/ocserv/ocserv.conf cp doc/sample.passwd /etc/ocserv/ cp doc/sample.otp /etc/ocserv/ cp doc/profile.xml /etc/ocserv/
# Создаем пользователя ocserv
от которого будет работать служба:
useradd -r -M -U -s /usr/sbin/nologin ocserv
Поступила просьба от 1С-ников организовать мониторинг сервера 1С:Предприятие 8.3 с помощью Zabbix 5.0. В частности необходимо мониторить как общие показатели системы (CPU, RAM, HDD, Службы) так и параметры относящиеся непосредственно к серверу 1С — кол-во текущих сеансов, кол-во сеансов по типам подключения, блокировки СУБД.
С мониторингом общих показателей системы прекрасно справляется zabbix-agent и штатный шаблон, а вот со вторым уже нужно прибегать к функциям cервера администрирования кластера серверов 1С, который состоит из двух утилит: непосредственно самого сервера — программы ras.exe и утилиты командной строки rac.exe, которая обращаясь к запущенному прежде серверу ras позволяет выполнять различные операции с кластером серверов 1С:Предприятия.
Перечитав кучу различных мануалов как мониторить кластер 1С я пришел к выводу что надо писать свое..
Как итог было написано две утилиты. Первая утилита запускает ras.exe как службу Windows, а вторая это утилита которая работает с rac.exe, выполняет запросы, обрабатывает и выдает результат, который в последующем может обрабатывать zabbix-agent и передавать на сервер Zabbix.
Итак скачиваем первую утилиту helper_ras_1c.exe и помещаем ее в какой-нибудь отдельный каталог (прим. C:\1c_ras).
[stextbox id=’info’]ИНФОРМАЦИЯ. Немного актуализировал статью под новую версию Debian, чтобы установка из статьи проходила в режиме copy-paste без ошибок.[/stextbox]
Рассмотрим как установить FreePBX 14 в связке с Asterisk 18 на Debian 10 Buster.
Перед началом установки обновляем систему до актуального состояния:
apt-get update && apt-get upgrade -y
Устанавливаем необходимые зависимости:
apt-get install build-essential linux-headers-`uname -r` apt-transport-https bison flex curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libcurl4-openssl-dev libical-dev libneon27-dev libspandsp-dev subversion libtool-bin python-dev unixodbc dirmngr sudo apache2 mariadb-server mariadb-client default-libmysqlclient-dev -y
[stextbox id=’alert’]ВНИМАНИЕ. Обязательно перезагружаем систему и после этого продолжаем установку.[/stextbox]
Устанавливаем PHP версии 5.6 (для корректной работы FreePBX fwconsole):
curl https://packages.sury.org/php/apt.gpg | apt-key add - echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/deb.sury.org.list apt-get update && apt-get install php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-mbstring php5.6-gd php5.6-xml php-pear -y
Устанавливаем NodeJS :
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash - apt-get install nodejs -y pear install Console_Getopt
Устанавливаем поддержку MariaDB ODBC
wget https://downloads.mariadb.com/Connectors/odbc/latest/mariadb-connector-odbc-3.1.9-debian-buster-amd64.tar.gz tar -zxvf mariadb* cp -v mariadb-connector-odbc-3.1.9-debian-buster-amd64/lib/mariadb/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
[stextbox id=’alert’]ВНИМАНИЕ. На момент написание статьи версия MariaDB ODBC — 3.1.9, поэтому обращаем внимание на случай ошибок и при необходимости корректируйте версионность. Последние версии можно посмотреть на оф. сайте — https://downloads.mariadb.com/Connectors/odbc/latest/.[/stextbox]
Рассмотрим как реализовать доступ к FreePBX GUI через HTTPS. Все действия производились на FreePBX установленный на Debian 9 Stretch (как установить можно почитать тут) и Apache.
Любым удобным вам способом копируем сертификат, закрытый ключ, промежуточные + корневой сертификат в систему (как это сделать через SSH можно почитать тут). Так как сертификатом будет пользоваться веб-сервер Apache, то не забываем прописать на файлы сертификатов соответствующие права. Я выставляю такие права доступа на файлы сертификатов:
chown root:www-data {путь к файлу} chmod 640 {путь к файлу}
Включаем модуль SSL в Apache:
a2enmod ssl
Конфигурация виртуального хоста. Приводим дефолтный вирт. хост /etc/apache2/sites-available/000-default.conf к виду:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine On SSLCertificateFile /etc/ssl/crt.crt SSLCertificateKeyFile /etc/ssl/key.key SSLCACertificateFile /etc/ssl/crt-ca.crt </VirtualHost>
[stextbox id=’warning’]ВНИМАНИЕ. Обращаю внимание что в SSLCertificateFile, SSLCertificateKeyFile, SSLCACertificateFile указываем свой путь к файлам.[/stextbox]