NRPE mysql --login-path
Суть, есть сервер на Centos, на нем стоит nrpe Перехожу на новую фишку от mysql --login-path Что бы отказаться от паролей в командной строке. Есть плагин с офф сайта последней версии /usr/lib64/nagios/plugins/pmp-check-mysql-status
Запускается вот так command[check_pmysql]=/usr/lib64/nagios/plugins/pmp-check-mysql-status -L nagios -x Threads_running -w 20 -c 40
Файл ключей создан для и под пользователем nagios и успешно лежит в его хомяке mysql_config_editor set --login-path=nagios --host=localhost --user=root --password --port=3306 --socket=/var/lib/mysql/mysql.sock
И с консоли успешно работает.
Если же nrpe запускает скрипт сам в ответ на запрос Nagios то получает ответ ERROR 1045 (28000): Access denied for user 'shadowmaster63'@'localhost' (using password: NO)
Почему именно этого пользователя пытается подставить непонятно. Но по отладке видно что mysql дергает его из файла /proc/self/loginuid
Так же после долгих мучений и отладки выяснил что при запуске из консоли или если в nrpe разрешить command_prefix=/usr/bin/sudo
stat("/etc/my.cnf", {st_mode=S_IFREG|0644, st_size=2455, ...}) = 0
open("/etc/my.cnf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2455, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3ce0b03000
read(3, "# Example MySQL config file for "..., 4096) = 2455
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7f3ce0b03000, 4096) = 0
stat("/etc/mysql/my.cnf", 0x7fffc5744aa0) = -1 ENOENT (No such file or directory)
stat("/usr/etc/my.cnf", 0x7fffc5744aa0) = -1 ENOENT (No such file or directory)
stat("/var/spool/nagios/.my.cnf", 0x7fffc5744aa0) = -1 ENOENT (No such file or directory)
stat("/var/spool/nagios/.mylogin.cnf", {st_mode=S_IFREG|0600, st_size=208, ...}) = 0
open("/var/spool/nagios/.mylogin.cnf", O_RDONLY) = 3
Видим что файл ключей успешно читается(запуск скрипта в консоли) В случае же если разрешить sudo то так же успешно читается но соответственно из хомяка root
А если без sudo по запросу удаленного Nagios получаем что он даже не ищет его как будто игнорирует опцию --login-path и побует подключиться с текущим пользователем без пароля
stat("/etc/my.cnf", {st_mode=S_IFREG|0644, st_size=2512, ...}) = 0
open("/etc/my.cnf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2512, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff47e37b000
read(3, "", 4096) = 2512
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7ff47e37b000, 4096) = 0
stat("/etc/mysql/my.cnf", 0x7fff3c0e9c00) = -1 ENOENT (No such file or directory)
stat("/usr/etc/my.cnf", 0x7fff3c0e9c00) = -1 ENOENT (No such file or directory)
stat("~/.my.cnf", 0x7fff3c0e9c00) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3) = 0
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3) = 0
open("/etc/nsswitch.conf", O_RDONLY) = 3
Идеи кончились, нужна помощь сообщества
Временный фикс: command_prefix=/usr/bin/sudo -u nagios
Посмотрел исходники nrpe Команды на исполнение запускаются банально fp=popen(command,«r»); Не так близко знаком с Си, но может именно в этом проблема ?