sudo для скрипта, использующего mysql connect с анонимным пользователем

У меня есть следующий скрипт:

[root@localhost:~]# cat /mnt/start_discovery
#!/bin/sh
InterfaceNumber=$((65471 - $1))
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"

и 3 пользователя, которые позволяют выполнять команду: root, ste и www. Пользователь ste и www используют sudo для выполнения команды, root работает без sudo.

[root@localhost:~]# cat /etc/sudoers
root    ALL=(ALL)   ALL
ste     ALL=(ALL)   ALL
www     ALL=/mnt/start_discovery *,\
            sh -xv *

Когда я запускаю команду от пользователя www - все нормально:

[www@localhost:~]$ sudo sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ mysql --user=  --execute=insert into dc.discovery_commands(device, job_ttd) select 65471, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);

но для пользователя ste:

[ste@localhost:~]$ sudo sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ERROR 1045 (28000): Access denied for user ' '@'localhost' (using password: YES)

то же самое и для пользователя root:

[root@localhost:~]# sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ERROR 1045 (28000): Access denied for user ' '@'localhost' (using password: YES)

Для пользователя root и ste у меня есть пароли для mysql в файлах ~/.my.cnf, для пользователя www - не имеет никакого доступа к mysql. Пользователи для MySQL созданы:

[root@localhost:~]# mysql -e "select user,host,password from mysql.user;"
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *48A8ACDAF5434778D6B5D0254833B2AEC555514A |
| ste  | localhost | *425AF4AF33C4FB42AC52A0A6630DEE61AB94A67A |
|      | localhost |                                           |
+------+-----------+-------------------------------------------+

Есть идеи, почему так происходит? И как лучше будет сделать то, что у всех пользователей есть возможность выполнить этот скрипт (скрипт имеет разрешение 750 и требуется sudo)?

1 ответ

Решение

Ошибки, появляющиеся при попытках № 2 и № 3 (запуск сценария как ste или же root) упоминание(using password: YES)msgstr ", хотя в строке вызова в вашем скрипте нет пароля.

У этих двух пользователей должен быть свой личный файл конфигурации (~/.my.cnf), который содержит password пункт (в этом случае такой пароль всегда предоставляется по умолчанию).

Попробуйте добавить следующую опцию в ваш скрипт: --password=''

Другие вопросы по тегам