Por que quando eu tento executar um programa como usuário normal eu sou negado, e quando eu executo com o sudo eu recebo “Not Found”

1

Para executar o mysqlbackup eu tenho que executá-lo como root.

Aqui está o exemplo quando eu o executo como usuário normal:

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

que leva à Permissão negada, então eu tentei executá-lo com o sudo e recebo isso:

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

Mas quando eu executo como root não tenho problemas ...

meu usuário está dentro do arquivo sudoers apenas para que você saiba e eu também posso executar outros comandos com sudo sem problemas, mas neste caso minha pergunta é, porque eu não posso executá-lo com sudo e como eu posso ser capaz de executá-lo sem recorrer ao sudo -i para obter o ambiente raiz?

Nota : Ambos têm o mesmo $ 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
    
por VaTo 14.04.2016 / 22:21

2 respostas

2

Portanto, o motivo de seu backup estar falhando como um usuário normal é porque o arquivo libdata que mysqlbackup está tentando copiar / fazer backup pertence a um usuário diferente (mais do que provável, 'mysql') ou um usuário privilegiado. Portanto, executar mysqlbackup como um usuário elevado é provavelmente a escolha certa aqui, como você está tentando fazer.

Suponho que o motivo pelo qual você não consegue encontrar mysqlbackup como um usuário elevado é que o seu ambiente PATH não está definido corretamente ou não está definido. Estou certo em supor que você não pode fazer algo como:

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

Se puder, certifique-se de executar o comando com o caminho absoluto para mysqldump . Se isso não funcionar por causa de como o sudo está configurado, você precisará tentar uma tática diferente.

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

Agora, se isso funcionar, ótimo. No entanto, não é muito bom para o uso futuro da linha de comando. Você poderia criar um alias para executar mysqlbackup no futuro, para que você não precise especificar o PATH na linha de comando para uso futuro:

Para o bash:

(para outros shells como zsh , você precisará ler os documentos sobre como definir um alias)

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

... que pode ser invocado, depois de obter o arquivo .bashrc (logout e login é suficiente, ou contratar o arquivo IE . ~/.bashrc ), no futuro simplesmente executando:

mysqlbackup --compress...

Digamos que nada disso funcione, no entanto. Você provavelmente precisará obter o administrador da máquina para alterar suas permissões sudo para mysqlbackup para incluir o PATH adequado ou para especificar um caminho absoluto para mysqlbackup no arquivo sudoers para sua capacidade de chamá-lo do shell ao executar sudo .

Espero que isso ajude.

    
por 14.04.2016 / 22:44
2

Provavelmente secure_path está definido em / etc / sudoers. O caminho mostrado por which mysqlbackup não está incluído lá, mas é mostrado em echo $PATH quando executado como usuário ou a partir de um login raiz, certo? Parece estranho.

    
por 14.04.2016 / 22:40

Tags