일반 사용자로 프로그램을 실행하려고 하면 거부되고 sudo를 사용하여 실행할 때 "찾을 수 없음" 메시지가 나타나는 이유는 무엇입니까?

일반 사용자로 프로그램을 실행하려고 하면 거부되고 sudo를 사용하여 실행할 때 "찾을 수 없음" 메시지가 나타나는 이유는 무엇입니까?

mysqlbackup을 실행하려면 루트로 실행해야 합니다.

다음은 일반 사용자로 실행할 때의 예입니다.

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

하지만 루트로 실행하면 아무런 문제가 없습니다 ...

내 사용자가 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사용자로 실행하거나 루트에서 로그인하면 표시됩니다. 그렇죠? 그래도 이상해 보입니다.

답변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.

도움이 되었기를 바랍니다.

관련 정보