Linux

MariaDB

Войти в базу данных

sudo mysql
mysql -u root -p

Создать нового пользователя

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

Предоставление прав доступа для пользователя

GRANT ALL PRIVILEGES ON database.table TO 'user'@'localhost';
  • database - название базы в MySQL, к которой мы предоставляем доступ.
  • table - название таблицы БД, к которой мы предоставляем доступ
  • можно использовать *, чтобы предоставить доступ ко всем базам данных/таблицам

Cписок наиболее часто используемых привилегий MySQL:

  • ALL PRIVILEGES - пользователь имеет полный доступ к базе данных.
  • CREATE - пользователю разрешено создавать базы данных и таблицы.
  • DROP - пользователь имеет право удалять базы данных и таблицы.
  • DELETE - пользователь может удалять строки из определенной таблицы.
  • INSERT - пользователь может вставлять строки в определенную таблицу.
  • SELECT - пользователю разрешено читать базу данных.
  • UPDATE - пользователь может обновлять строки таблицы.

Пример

GRANT SELECT, INSERT, DELETE ON database.* TO 'user'@'localhost';

Внесение изменений

FLUSH PRIVILEGES;

Определений существующий привилегий

SHOW GRANTS FOR 'user'@'localhost';

Отмена привилегий

Аналогично присвоению

REVOKE ALL PRIVILEGES ON database.* TO 'user'@'localhost';

Удалить пользователя

DROP USER 'user'@'localhost';

Просмотреть методы аутентификации

SELECT user,authentication_string,plugin,host FROM mysql.user;

Создать базу данных

CREATE DATABASE db_server01;

Просмотреть список баз данных

SHOW DATABASES;

Postgresql

Установка пакета

sudo apt install postgresql

Проверка состояний

sudo systemctl is-active postgresql
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
sudo pg_isready

Создание пользователя и базы

sudo su - postgres
psql

Управление пользователями

\du
CREATE USER bob WITH PASSWORD 'P@$$w0rd';
CREATE DATABASE bobdb;
GRANT ALL PRIVILEGES ON DATABASE bobdb to bob;
\q
exit

Настройка клиентской аутентификации

cd /etc/postgresql/14/main

postgresql.conf

listen_addresses = '*'
uncomment this line and change localhost to *

pg_hba.conf

host    all             all             0.0.0.0/0     md5

изменить строку 127.0.0.1/32 на 0.0.0.0/0

Перезагрузить сервис

sudo systemctl restart postgresql

Можно протестировать кодом

import psycopg2


class PostgresqlConn():
    def __init__(
        self,
        user="ea",
        password="ea",
        host="194.87.206.89",
        port="5432"
    ):
        self.user = user
        self.password = password
        self.host = host
        self.port = port

    def fDbOpenConn(self, database):
        db_conn = psycopg2.connect(
            database=database,
            user=self.user,
            password=self.password,
            host=self.host,
            port=self.port
        )
        # print("Database opened successfully")
        db_cursor = db_conn.cursor()
        return db_conn, db_cursor

    def fDbCloseConn(self, db_conn):
        db_conn.commit()
        db_conn.close()
        # print("Database closed successfully")

    def fFindNoteTable(self, arr_clmns, sql_req, database):
        db_conn, db_cursor = self.fDbOpenConn(database)
        db_cursor.execute(sql_req)

        l_test = []
        for i in db_cursor.fetchall():
            l_test.append(i)

        df = pd.DataFrame(
            columns=arr_clmns,
            data=l_test
        )

        self.fDbCloseConn(db_conn)
        return df


test = PostgresqlConn()

test.fDbOpenConn('db_trobotic')

Netplan

sudo nano /etc/netplan/02-networkd.yaml
sudo netplan generate

Права доступа Linux

WinSCP ошибка

 sudo chown -R ea:ea .

Узнать права каталога Для того, чтобы просмотреть права доступа на файлы и каталоги в нужной директории, переходим в неё и выполняем команду: ls -l

Получаем:

drwxr-xr-x 2 openhab openhab 4096 окт 22 22:15 html

Слева отображены права доступа на файл и директорию вида:

drwxrwxr-x

Обозначения символов Первый символ

Первый символ обозначает тип данных: - - обычный файл; d - директория/каталог/папка (directory); l - символическая ссылка (link).

Последующие символы

Следующие 9 символов обозначают права доступа.

rwxrwxr-x

Данные 9 символов состоят из трех групп:

rwx rwx r-x

Первая группа из трех символов обозначает права доступа владельца файла или директории:

u - user

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

g - group

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

o - other

r read, то есть, право доступа на чтение файла или директории. w write, то есть, право на изменение и удаление файла или директории. x eXecute, то есть, право на запуск файла как программы или вход в директорию. Всегда располагаются в таком порядке:

rwx

Если вместо какого-то символа идёт тире (минус), к примеру:

r-x

то это значит, что отсутствуют права на изменение и удаление файла или директории. Или так:

r--

то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.

Изменение права для группы на изменение файла: sudo chmod g-w /etc/openhab2 Рекурсивное изменение права для группы на изменение файла:

Изменим рекурсивно права на файлы и директории внутри нужной директории. Отменим, к примеру, все права у остальных пользователей и групп:

chmod -R o-rwx ~/linuxrussia.com/

OpenVPN Linux

Установка VPN сервера на линукс через git

sudo apt-get install git

клонируем репозиторий openvpn-install с помощью инструмента git

cd ~
git clone https://github.com/Nyr/openvpn-install.git

переходим в каталогopenvpn-install, созданный с помощью клонирования, и запускаем сценарий установщика

cd openvpn-install/ 
ls -1 
chmod +x openvpn-install.sh 
sudo ./openvpn-install.sh

получаем несколько запросов на изменение или подтверждение настроек по умолчанию для установки

Welcome to this OpenVPN "road warrior" installer! I need to ask you a few questions before starting the setup. You can leave the default options and just press enter if you are ok with them.

First, provide the IPv4 address of the network interface you want OpenVPN listening to. IP address: X.X.X.X - подтверждаем ip сервера

Which protocol do you want for OpenVPN connections? 1) UDP (recommended) 2) TCP Protocol [1-2]: 1 - тут выбираем на свое усмотрение

What port do you want OpenVPN listening to? Port: 1194 - прописываем порт по умолчанию или свой на выбор

Which DNS do you want to use with the VPN? 1) Current system resolvers 2) 1.1.1.1 3) Google 4) OpenDNS 5) Verisign DNS [1-5]: 3 - тут выбираем на свое усмотрение

Finally, tell me your name for the client certificate. Please, use one word only, no special characters. Client name: testclient - вводим имя первого клиента

Okay, that was all I needed. We are ready to set up your OpenVPN server now. Press any key to continue... - жмем Enter

После создания клиента файл можно найти в папке root и скачать на свое устройство

добавим службу openvpn-server в автозагрузку

sudo systemctl enable openvpn-server@server.service

проверяем статус

sudo systemctl status openvpn-server@server.service

для создания еще одного клиента или удаления существующего необходимо зайти в папку openvpn-install

cd openvpn-install/ 

выполняем и следуем подсказакам в консоли

sudo ./openvpn-install.sh

для мониторинга клиентов онлайн необходимо проверить наличие в файле /etc/openvpn/server.conf строки status openvpn-status.log (если есть идем дальше, если нет то дописываем строку в файле конфигурации и перезагружаем службу openvpn-server) и выполняем команду

cat /etc/openvpn/server/openvpn-status.log

Установка клиента на линукс

sudo mv client1.ovpn /etc/openvpn/client/client1.conf
sudo systemctl enable openvpn-client@client1
sudo systemctl start openvpn-client@client1

Задать клиенту статический адрес с сервера

sudo nano /etc/openvpn/ccd/client1
ifconfig-push 10.8.0.51 255.255.255.0

добавить в server.conf

client-config-dir /etc/openvpn/ccd

перезагрузить сервер

systemctl restart openvpn-server@server.service

tun это туннель L3, tap это туннель L2

добавление клиентов

sudo ./openvpn-ubuntu-install.sh

Изменить шаблон клиента

sudo nano /etc/openvpn/client-template.txt

Перезагрузка VPN клиента в случае отсутствия соединения

Создаем conn_script

IP1=ya.ru
IP2=8.8.8.8
RES1=0
RES2=0
ping -I tun0 -q -c 2 $IP1 > /dev/null && RES1=1
ping -I tun0 -q -c 2 $IP2 > /dev/null && RES2=2
if [ $RES1$RES2 = 00 ]
then
    echo "Bad conn"
    sudo systemctl restart openvpn-client@LinuxSrvVdmx > /dev/null
fi
echo "Conn tested $(date)"

Вызываем скрипт командой

bash conn_script

Также добавляем выполнение скрипта в Cron

Firewalld

sudo apt install firewalld
systemctl enable firewalld
systemctl start firewalld

Перечитать правила

sudo firewall-cmd --reload

Открыть порт

sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp

Закрыть открытый порт

sudo firewall-cmd --permanent --zone=public --remove-port=5000/tcp

Проверить открытые порты для зоны

sudo firewall-cmd --permanent --zone=public --list-ports

Посмотреть все правила активной зоны

firewall-cmd --permanent --list-all --zone=public

Включить маскардинг

sudo firewall-cmd --permanent --zone=public --add-masquerade

Пробросить порт

firewall-cmd --permanent --zone=external --permanent --add-forward-port=port=10502:proto=tcp:toport=502:toaddr=192.168.1.30

Добавить интерфейс к зоне

firewall-cmd --permanent --zone=public --change-interface=eth0
firewall-cmd --permanent --zone=public --remove-interface=eth0

Проверить что systemctl разрешает переадресацию пакетов

ip_forward=1

Посмотреть отношение интерфейсов к зонам

firewall-cmd --get-active-zones

Нужно раскидать интерфейс тунеля и интерфейс локальной сети в разные зоны internal (eth0) и external (tun0). Пробрасываем порт в external зоне и включаем маскарадинг в обоих зонах

Отключить ICMP

sudo firewall-cmd --add-icmp-block-inversion

Когда target=default, то при попытке подключиться к запрещённому получаю ответ, что не могу. Так можно понять, что где-то блокирует файрвол. А если стоит режим DROP - то программа, которая пытается подключиться, допустим, ssh, будет долго ждать и просто не дождётся ответа

sudo firewall-cmd --set-target=DROP --permanent

Интерфейсы

Пинг через выбранный интерфейс

ping -I eth0 ya.ru

Узнать какой отвечает за интернет можно с помощью команды route. Строка с маской 0.0.0.0 и есть выход в интернет. В правом столбце будет указано через какой интерфейс это пойдет. С помощью фильтров это можно сделать так:

route | grep '^default' | grep -o '[^ ]*$'

Изменить интерфейс по умолчанию

ip route change default via 192.168.0.1 dev usb0

Проверить доступность порта на удаленном хосте

nc -zvw3 172.31.161.140 41012 

Подключение к Wifi

sudo nmtui-connect

KVM

Проверить поддерживает процессор аппаратное ускорение виртуализации от Intel-VT или AMD-V. 0 - не поддерживает, 1 или больше - ок.

egrep -c '(vmx|svm)' /proc/cpuinfo

Установить KVM

 sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager

Systemd

На примере добавления python .py файла в качестве службы Linux Ubuntu 22.04

создаем конфигурационный файл службы

sudo nano /lib/systemd/system/nameservice.service

содержание файла

[Unit]
Description=Nameservice

[Service]
Type=idle
Restart=always
RestartSec=3
User=ea
ExecStart=/usr/bin/python3 /home/ea/Desktop/main.py

[Install]
WantedBy=multi-user.target

управление службой

sudo systemctl daemon-reload 
sudo systemctl enable nameservice.service 
sudo systemctl start nameservice.service

Диагностика системы

htop
atop
df -h
ncdu - позволяет вычислить забитое место на диск

sudo cfdisk - разделы дисков

Изменить MAC Mikrotik

/interface ethernet set mac-address=A4:BB:6D:6A:DD:CC ether1
172.31.165.215 KL000911

mac точказрения 74:56:3C:68:BA:5F