为什么当我尝试以普通用户身份执行程序时,我被拒绝,而当我使用 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 ...

如果这有效的话,那就太好了。但是,这对于将来的命令行使用来说不太好。您可以创建一个alias以便将来运行mysqlbackup,这样您就不需要在命令行中指定 PATH 供将来使用:

对于bash:

(对于其他 shell,例如zsh,您需要阅读有关如何设置别名的文档)

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

.bashrc...在获取文件之后(注销和登录就足够了,或者获取文件 IE . ~/.bashrc),将来可以通过简单地运行以下命令来调用:

mysqlbackup --compress...

不过,假设这些都不起作用。您可能需要让计算机管理员更改您的 sudo 权限,以便mysqlbackup包含正确的 PATH 或在 sudoers 文件中指定绝对路径,mysqlbackup以便您能够在执行时从 shell 调用它sudo

希望这有帮助。

相关内容