1

次のスクリプトがあります。

[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 の場合、ファイル ~/.my.cnf に mysql のパスワードがあります。ユーザー 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 が必要です)。

4

1 に答える 1

1

試行 #2 および #3 (スクリプトをsteorとして実行root) で表示されるエラーには、" (using password: YES)" が記載されていますが、スクリプトの呼び出し行にパスワードが指定されていません。

これら 2 人のユーザーには、句を含むカスタムの個人用構成ファイル (~/.my.cnf) が必要です (passwordこの場合、そのようなパスワードは常にデフォルトで提供されます)。

スクリプトに次のオプションを追加してみてください。--password=''

于 2013-03-18T09:44:29.437 に答える