LINUX.ORG.RU

Сообщения Sv00p

 

Конфиг nginx для mvc + phpmyadmin

Добрый день, всё никак немогу разобраться с nginx. Практики не хватает. Суть такова. Есть легаси проект на php, он в mvc архитектуре, без фреймворков. Крутился раньше на апаче, нужно его перебросить на nginx+php-fpm. Наковырял конфиг, вроде работает mvc приложуха, но не уверен что он правильно настроен в плане реврайтинга. В апаче там через .htaccess реврайт прописывался, тут как я понял try_files $uri $uri/ /index.php; и далее маршрутизация управляется приложением (ну всё через index.php). Обратите внимание на location / и ниже, правильно ли вообще написаны директивы для mvc ? . Немогу утверждать важная или нет инфа - но запросы в приложении маршрутизируются с помощью переменных, примерно вот так cabinet/epu/([A-Za-z]+)/edit/(write-item-extant)/([0-9]+) и далее контроллеры обрабатывают, а вот классический подход типа ?uri=$uri&$args не используется. Ну и собственно вторая часть вопроса.

Скачал свежий phpmyadmin архив, распаковал в директорию /usr/share/phpMyAdmin, cделал владельцем этой директории www-data и дал права на выполнение (от него же и nginx работает и php-fpm), чтото-там [ключ] добавил в blowfish_secret, импортровал/создал таблицы для phpMyAdmin в мускуле и также добавил для него location в конфиге nginx. Ничего не завелось. Вопрос - где неправильно описана обработка location (ведь он же уже не как mvc сущность считается ) ? Может стоит в отдельный блок server запихать phpMyAdmin ? на выходе хотелось бы на том же порту [пока 80й] остаться и приложением mvc и phpmyadmiНОМ. В логах ошибок нет, в браузере пустая страница выводится белая как снег, аксес лог вот такой:

[21/Apr/2024:18:43:31 +0300] 192.168.3.77 -> test.local "GET /phpmyadmin/ HTTP/1.1" 200 31 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0" "-"rt=0.000 ut=0.000 cs=-

На выходе хотелось бы иметь схему на одном порту без поддоменов. Т.е. test.local - открывает mvc приложение, а test.local/phpmyadmin панель phpMyAdmin.

Стоит добавить что если написать в браузере непонятные символы http://test.local/asdasdqwe то в логе то же самое (ну за исключением GET - он с непонятыми символами). Забегая вперед также еще вопрос - можно ли как-то встречать 404й или ещё какой-то ошибкой такой юзерский ввод ? Если допустим юзер уже в приложении авторизовался с куками и сессиями и такой ввод делает, то там уже приложение перебрасывает на еррорпэйджи, а вот до авторизации как «встретить» кракозябры от юзера nginx-ом?

сам конфиг

server {
     listen   192.168.3.10:80;
     server_name  www.test.local;
     return 301 http://test.local$request_uri;
}
server {
     listen   192.168.3.10:80;
    server_name  192.168.3.10;
     return 301 http://test.local$request_uri;
}

server {
    #listen 443 ssl http2;
     listen 192.168.3.10:80;
     server_name test.local;
	 
		##phpMyAdmin config###
		location /phpmyadmin {
		alias /usr/share/phpMyAdmin/;
		#root /usr/share/phpMyAdmin/;
		    location /phpmyadmin {
                   try_files $uri $uri/ =404;
			}
			
		    location ~ \.php$ {
		    # fastcgi_pass 127.0.0.1:9000;
			fastcgi_pass   unix:/run/php-fpm/www.sock;
			fastcgi_index index.php;
			fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin$request_filename;
			include fastcgi_params;
			fastcgi_ignore_client_abort off;
		    }
			
		    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
			access_log    off;
			log_not_found    off;
			expires 1M;
			}
		}

    root /var/www/legacy-project/;
    index index.php index.html index.htm;
    access_log /var/www/legacy-project/log/access.log main;
    error_log /var/www/legacy-project/log/error.log;
	charset utf-8;

	if (!-e $request_filename)
	{
		rewrite ^/(.*)$ /index.php last;
		break;
	}

    location / {
	index  index.php;
	    try_files $uri $uri/ /index.php;
    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
    access_log off;
    expires max;
    }

    location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT  /var/www/legacy-project/;
    fastcgi_param SCRIPT_FILENAME /var/www/legacy-project$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /var/www/legacy-project$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param HTTPS on;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }


    location ~ /\.ht {
    deny all;
    }
}

П.С. Все тестовые манипуляции были с чистым кэшем браузера (каждый тест - новое окно инкогнито)

 , ,

Sv00p
()

raid1 md0 inactiv после извлечения одного диска

Доброго дня. Железо HP ProLiantGen10 DL160. Система Debian12. 6.1.0-13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.55-1 (2023-09-29) x86_64 GNU/Linux Железный сервак с аппаратным рейдом (hdd).ОСь его видит как один. Всё нормально. Затем были установлены дополнительно 2 ssd и собран из них raid1 с mdadm. Собирал вот так его

mdadm --create --verbose /dev/md1 -l 1 -n 2 /dev/sdd1 /dev/sde1

Дополнительно ещё поправил mdadm.conf : ARRAY /dev/md/0 metadata=1.2 name=servername:0 UUID=7fa2de39:14807166:fd2afb7e:64808f46 и, как по инструкции запустил update-initramfs -u , чтобы при перезагрузке не получить md127. Всё работает неплохо.

Выключаю сервак, достаю один из дисков этого raid1. Включаю - и массив inactiv становится. Дебиан не загружается, мол потерял раздел (Dependency failed for....). Приходится его вот так шатать чтобы оживить:

mdadm: stopped /dev/md0
mdadm --readwrite /dev/md0
ну и на всякий случай тут же update-initramfs -u

после этого он оживает и загружается, и видно красивую надпись (_U), показывающую отсутствие диска. Снова выключаю, диск обратно вставляю - всё работает. Если снова его или соседа вытащить - не рабоатает (inactiv и не загружается).

Подскажите как что ему сделать, чтобы он не терял себя.

# lsmod | grep raid
raid10                 65536  0
raid456               180224  0
async_raid6_recov      24576  1 raid456
async_memcpy           20480  2 raid456,async_raid6_recov
async_pq               20480  2 raid456,async_raid6_recov
async_xor              20480  3 async_pq,raid456,async_raid6_recov
async_tx               20480  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
raid6_pq              122880  3 async_pq,raid456,async_raid6_recov
libcrc32c              16384  2 xfs,raid456
raid0                  24576  0
raid1                  53248  1
md_mod                192512  7 raid1,raid10,raid0,linear,raid456,multipath

 ,

Sv00p
()

Astra linux ssh Bye Bye

Доброго дня. Подскажите по ssh на Astra Linux. В общем обменялся с хостом астры ключами - проблем нет. Тут понадобилось забиксом чекать кое-какие параметры. Сгенерировали ключики для юзера забикс, обменялись с астрой и пробуем с операционной системы (debian 12), где стоит забикс, подключиться к астре:

sudo -u zabbix ssh support@10.x.x.x

всё отлично!!

окт 30 19:46:35 srvzpbxus-s0 audit[27965]: USER_ACCT pid=27965 uid=0 auid=4294967295 ses=4294967295 subj=0:0:0:0 msg='op=PAM:accounting grantors=pam_tally,pam_permit acct="support" exe="/usr/sbin/sshd" hostname=10.x.x.x addr=10.x.x.x terminal=ssh res=success'

окт 30 19:46:35 srvzpbxus-s0 sshd[27965]: Accepted publickey for support from 10.x.x.x port 51214 ssh2: RSA SHA256:laxoGuU/4IqV6/4X0zB239BzNJEAdWu1uwm9sdZGVt0

А теперь пробуем из элемента данных подключиться по ssh к астре и выполнить любую команду (например df), подкидываем ключки и юзера в соответствующие поля элемента данных и получаем ошибку вэбки забикса:

Public key try failed: The key algorithm 'ssh-rsa' is not allowed to be used by PUBLICKEY_ACCEPTED_TYPES configuration option

а вот что в журнале самой астры в этот момент:

окт 30 19:50:55 srvzpbxus-s0 sshd[26270]: Received disconnect from 10.x.x.x port 49552:11: Bye Bye [preauth]

окт 30 19:50:55 srvzpbxus-s0 audit[26270]: USER_ERR pid=26270 uid=0 auid=4294967295 ses=4294967295 subj=0:0:0:0 msg='op=PAM:bad_ident grantors=? acct="?" exe="/usr/sbin/sshd" hostname=10.x.x.111 addr=10.x.x.x terminal=ssh res=failed'

окт 30 19:50:55 srvzpbxus-s0 sshd[26270]: Disconnected from 10.x.x.x port 49552 [preauth]

Меняем адрес на другой сервер (не астра а центос там) - проблем нет, ключи обмен есть, всё работает братцы. С астрой нифига. Куда подсмотреть подскажите. Чего они там в астре накрутили с ssh что ей что-то не хватает.

Я так понимаю что подключение по ssh в вэбке забикса происходит от сущности вэбки через библиотеку libssh. Там есть настройки ssh_options_set() , такое чувство что там не добавлены новые методы шифрования (не туда меня наверно понесло). Забикс свежий 6.4, php 8.2.7 Ключи делали даже на 4096 - результат тот же.

П.С. Недавно боролся с сертификатом ssl на астру, там было что-то типа error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small . Типа сертификат маленький давай на 4096. В общем беда какая-то с этой астрой. Подскажите как её победить по ssh.

 

Sv00p
()

OpenLdap proxy

Добрый день, настраиваю openldap proxy на debian 11. Первый раз, и как обычно ничего не получается. Задача - авторизацию сервисов запулить через лдап проски, ибо админ АД выдает только одну учетку служебную для прокси, а пользователи сервисов (юзеры АД) должны логиниться через свои доменные учетки в этих сервисах. Сами сервисы умеют бегать в лдап, но для них админ АД не выдаёт учетки. Причины есть, связанные с космической секьюрностью. На хабре есть статья там команда делала подобную штуку. Что делал:

1.apt install libnss-ldapd libpam-ldapd ldap-utils

  1. dpkg-reconfigure slapd - тут задал свой тестовый домен, который подразумевается будет прокси.

  2. Убедился, что есть файлик back_ldap.la в директории /usr/lib/ldap/

4.Показал сущности cn=config что надо подгружать бэкенд модуль :

-файлик backend.ldif

objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: back_ldap.la

-команда, чтобы этот файлик внести в конфиг ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif

  1. Пока всё в порядке.

вот конфиг весь, тут видно, что модуль back_ldap.la подгружен. (лапша cn=core и cn=schema убраны)

objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal
entryUUID: adf5cee0-00e6-103e-93ff-19c1b1debbf8
creatorsName: cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.210589Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20231017031159Z

( читать дальше... )

  1. Добавляем базу с ldap сервером, т.е. где все пользователи и живут. Т.е. добавляем backend-базу типа ldap, в качестве которой будет выступать Active Directory:

файлик ldap_db.ldif

dn: olcDatabase=ldap,cn=config
objectClass: olcDatabaseConfig
objectClass: olcLDAPConfig
olcDatabase: ldap
olcDbIDAssertBind: bindmethod="simple" binddn="CN=userNameStaff,CN=Users,DC=company-ad,DC=good-ad,DC=ru" credentials="yY0987654321"
olcDbURI: ldap://company-ad01.company-ad.good-ad.ru
olcReadOnly: TRUE
olcRootDN: cn=admin,dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcRootPW: NH32Ofo5lm9ul4Ofo4r/a6uh+nYI/esd
olcSuffix: dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcDbChaseReferrals: FALSE

Здесь userNameStaff - это логин для просмотра внешнего каталога ldap, в поле credentials его пароль. Эти данные дал владелец АД. Пока в режиме настройки 636 порт не используется. Вот описание с хабра + мои вопросы:

olcDbIDAssertBind: Указание метода подключения, distinguishedName и пароля УЗ для подключения к контроллеру MS Active Directory.

olcDbURI: URI контроллера AD.

olcReadOnly: Режим работы (чтение/запись) с MS Active Directory.

olcRootDN: Сервисная УЗ OpenLDAP. С помощью нее к OpenLDAP будут подключаться сервисы. Я еще добавил credentials, ибо хозяин АД дал учетку с паролем.

olcRootPW: Пароль от сервисной УЗ OpenLDAP. Здесь я указал admin, и его пароль, правильно ли это? или нужно создать нового юзера

olcSuffix: Суффикс домена (какого именно ? домена где прокси? )

olcDbChaseReferrals: Определяет возможность использования механизма отсылок.

Добавляем этот конфиг и сразу ошибка:

root@proxyldap:/etc/ldap# ldapadd -Y EXTERNAL -H ldapi:/// -f ldap_db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=ldap,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
        additional info: <olcRootPW> can only be set when rootdn is under suffix

root@proxyldap:/etc/ldap#

Уже и удалял строки, иногда добавляется, но ошибка при перезапуске slapd в журнале backend_startup: warning, database 2 (ldap) has no suffix

Перерыл много чего, везде всё по разному и юзают конфиг slapd.conf в папке openldap (типа старый стиль), а с cn=config толком нет инфы. Мне просто нужно пользователей какого-либо сервиса пропускать в базу company-ad01.company-ad.good-ad.ru . Это же пользователи этого АД. Сервисов много, всем [сервисам] учётки не дают для просмотра каталога ldap, дают только дну. Вот нужен некий прокси. Подскажите где поправить чтобы проксирование срабатывало.

 ,

Sv00p
()

Немогу удалить юзера

Добрый день. Такая ситуация. Создал юзера, добавил в судо.

usermod -aG sudo user && gpasswd -a user sudo

Затем при переходе к этому юзеру линукс заругался что нет домашнего каталога. Нашел первую ссылку как починить: и там было такое:

sudo mkdir /home/user
sudo usermod --shell /bin/bash --home /home/user user
sudo chown -R me:me /home/user
cp /etc/skel/.* /home/user/

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

Подскажите как убрать эту ссылку чтобы обычнй каталог стал, куда можно файлы положить

 ,

Sv00p
()

Подсветка сиснтаксиса

Добрый день, Уважаемые гуру, подскажите как сделать чтобы в окружении подсвечивались ip адреса. Например когда лог грепаешь по ip. Либо просто когда лог плывёт с tail -f чтобы ip адрес был подсвечен. Пытался функцию писать в bashrc - как-то не задалось. Подскажите где поправить конфиг для подсветки (например жёлтый цвет чтобы был). Регулярку для ip сварганю, а вот где её подставить подскажите…

 , ,

Sv00p
()

Передать параметр bash в ssh

Добрый день, я новичек в линукс, потихоньку осваиваюсь. У меня вопрос господа. Есть локальный и удаленный серверы. Задача стоит удалить файл с удалённого сервера, при этом скрипт должен запускаться на локальном.

вот примерно сам скрипт, нужно обязательно передавать с параметром $1

#!/bin/bash
echo $1
logfile="/var/log/delete_file.log"
if [ -n "$1" ];then
`/usr/bin/find /var/lib/blablalba/* -type f -a  -name "$1" -exec rm -rf {} \; >> /dev/null 2>&1`
	if [ $? -eq 0 ] ;then
        sleep 1
        echo "DELETED ! ALL OK!." >> $logfile
        exit 0
	else
echo "`date +"%d.%m.%Y_%H:%M:%S"`  file ----> "$1" <---- NO DELETED ! Check script!" >> $logfile
        fi		
else
echo "`date +"%d.%m.%Y_%H:%M:%S"`  Parametr ----> "$1" <---- NOT FOUND ! Check script!" >> $logfile
		exit 1
fi

Что я делал :

/usr/bin/ssh remote_server@remote_ip 'bash -s' < "/var/lib/test_script/delete_file.sh --file.txt"

Ну и с ковычками туда-сюда манипуляции делал. Всегда выводит ошибку No such file or directory

upd

На удалённом сервере кусочек этого скрипта, отвечающий за поиск и удаление файла (по имени) без проблем находит этот файл:

/usr/bin/find /usr/bin/find /var/lib/blablalba/* -type f -name "file.txt"

связка по ключам ssh настроена. Права все выданы [вроде все].

 ,

Sv00p
()

RSS подписка на новые темы