一般ユーザーとしてプログラムを実行しようとすると拒否され、sudoを使用して実行すると「見つかりません」というメッセージが表示されるのはなぜですか?

一般ユーザーとしてプログラムを実行しようとすると拒否され、sudoを使用して実行すると「見つかりません」というメッセージが表示されるのはなぜですか?

mysqlbackupを実行するには、rootとして実行する必要があります。

以下は、一般ユーザーとして実行する場合の例です。

mysqlbackup --compress --user=root --socket=/var/lib/mysql/mysql.sock --backup-dir=/home/user/backup backup
MySQL Enterprise Backup version 3.12.2 Linux-2.6.32-400.37.11.el6uek.i686-i686 [2016/01/19] 
Copyright (c) 2003, 2016, Oracle and/or its affiliates. All Rights Reserved.

 mysqlbackup: INFO: Starting with following command line ...
 mysqlbackup --compress --user=root --socket=/var/lib/mysql/mysql.sock 
        --backup-dir=/home/user/backup backup 

 mysqlbackup: INFO: 
 mysqlbackup: INFO: MySQL server version is '5.5.44-MariaDB'.
 mysqlbackup: INFO: Got some server configuration information from running server.

IMPORTANT: Please check that mysqlbackup run completes successfully.
           At the end of a successful 'backup' run mysqlbackup
           prints "mysqlbackup completed OK!".

160226 08:30:02 mysqlbackup: INFO: MEB logfile created at /home/user/backup/meta/MEB_2016-02-26.08-30-02_compress_backup.log

 mysqlbackup: ERROR: Opening of file /var/lib/mysql/ibdata1 failed. Error code: 13, Permission denied

これにより権限の拒否が発生するため、sudoを使用して実行しようとすると、次の結果が表示されます。

 sudo mysqlbackup
[sudo] password for user: 
sudo: mysqlbackup: command not found

しかし、rootとして実行しても問題はありません...

私のユーザーはsudoersファイルの中にあるので、問題なくsudoを使用して他のコマンドを実行することができることを知っていますが、この場合、私の質問はsudoを使用してなぜ実行できないのですか?再利用する必要はありません。 sudo -i ルート環境を取得するには?

ノート:すべて同じ$ PATHを持ちます。

[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
[root@localhost ~]# exit
[user@localhost backup]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin

答え1

おそらくsecure_path/etc/sudoersに設定されているでしょう。表示されたパスはwhich mysqlbackupそこには含まれていませんが、echo $PATHユーザーとして実行したり、rootからログインしたときに表示されます。そうですか?それでも変に見えます。

答え2

したがって、通常のユーザーとしてバックアップが失敗するのは、コピー/バックアップしたいlibdataファイルがmysqlbackup他のユーザー(ほとんどの場合「mysql」)または権限を持つユーザーが所有しているためです。したがってmysqlbackup、この操作を試みるときは、管理者として実行するのが正しい選択かもしれません。

mysqlbackupパワーユーザーとして見つからない理由は、PATH環境が正しく設定されていないか、まったく設定されていないためだと推測しています。次のことができないと仮定するのは正しいですか?

sudo /usr/bin/mysqldump --compr....

可能であれば、絶対パスを使用してコマンドを実行してくださいmysqldump。設定された方法で機能しない場合は、sudo別の戦略を試してください。

PATH=/usr/bin sudo mysqlbackup --compress ...

これがうまくいけばいいでしょう。ただし、これは将来のコマンドラインの使用には適していません。後で使用するコマンドラインでPATHを指定する必要がないように、alias後で実行するエントリを作成できます。mysqlbackup

バッシュの場合:

(たとえば、他のシェルの場合は、zshエイリアスの設定方法に関するドキュメントを読む必要があります。)

echo 'alias mysqlbackup="PATH=/usr/bin sudo mysqlbackup"' >> ~/.bashrc

.bashrc...ファイルを取得した後(ログアウトとログインで十分であるか、IEファイルを取得した後. ~/.bashrc)、後で簡単に以下を実行して呼び出すことができます。

mysqlbackup --compress...

しかし、このうち何も動作しないとしましょう。mysqlbackup正しいPATHを含めるようにsudo権限を変更するか、mysqlbackup実行時にシェルから呼び出すことができるように、sudoersファイルへの絶対パスを指定するようにコンピュータ管理者に要求する必要がありますsudo

お役に立てば幸いです。

関連情報