Tips & tricks — httpd, cокеты и SElinux
Была задача, организовать общение http-сервера на CentOS с MSSQL-сервером на win2k3.
apache+mysql+php(extension mssql.so)+freetds
Вроде всё как обычно. Но вебсервер категорически отказывался соединяться и получать данные от MSSQL, что через cms, что через простой скрипт отдавало - Something went wrong while connecting to MSSQL
Путем экспериментов было выловлено, что через консольную утилитку tsql соединение от рута устанавливается нормально, а от простого юзера нет.
Копание логов установило, что происходит ошибка net.c:237:tds_open_socket:ip:port: Permission denied
Грешили и на фаервол, и на права доступа к файлам, даже пересобрали mssql.so, чтобы писала в лог передаваемые параметры.
Но всё-таки корнем проблемы оказался, ранее мне не встречаемый на практике, SElinux.
Для того чтобы он разрешал открывать сокеты только веб-серверу нужно:
в папке /etc/selinux/targeted создать файл booleans
записать в параметр отключения защиты вебсервера
установить этот параметр в действующей системе
перезапустить вебсервер
apache+mysql+php(extension mssql.so)+freetds
Вроде всё как обычно. Но вебсервер категорически отказывался соединяться и получать данные от MSSQL, что через cms, что через простой скрипт отдавало - Something went wrong while connecting to MSSQL
Путем экспериментов было выловлено, что через консольную утилитку tsql соединение от рута устанавливается нормально, а от простого юзера нет.
Копание логов установило, что происходит ошибка net.c:237:tds_open_socket:
Грешили и на фаервол, и на права доступа к файлам, даже пересобрали mssql.so, чтобы писала в лог передаваемые параметры.
Но всё-таки корнем проблемы оказался, ранее мне не встречаемый на практике, SElinux.
Для того чтобы он разрешал открывать сокеты только веб-серверу нужно:
в папке /etc/selinux/targeted создать файл booleans
touch /etc/selinux/targeted/booleans
записать в параметр отключения защиты вебсервера
echo "httpd_disable_trans=1" > /etc/selinux/targeted/booleans
установить этот параметр в действующей системе
setsebool httpd_disable_trans 1
перезапустить вебсервер
/etc/init.d/httpd restart