sudoコマンドのいくつかのピットについて
1.sudo実行時にコマンドが見つからない理由sudo:command not found
ローカルにUbuntu仮想マシンをインストールし、golang環境にPATH環境変数を追加し、makeがソースコードをコンパイルすると
Permission denied
、sudoがソースコードをコンパイルするとsudo: go: command not found
を表示します.go version
コマンドを実行してみますgo version go1.12.6 linux/amd64
go version go1.12.6 linux/amd64
sudo: go: command not found
/etc/sudoersファイルのデフォルトはreannly読み取り専用で、いくつかの権限を追加する必要があります.そしてsecure_PathにGOROOTパスを追加すればいい:変更前
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
変更後
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/go/bin"
2.変更/etc/sudoers権限に問題が発生
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
異なるバージョンのLinuxシステムでは/etc/sudoersファイルの読み書き権限を変更した後の表現に異なる反応が現れ、個別のバージョンでファイル権限を変更した後、sudoコマンドの実行は上記のエラーを報告します.
しかし、権限を変更すると、直接権限を変更します:
permision denied
;sudo変更権限(すべてのsudoコマンドを実行)は、上のエラーを報告します.権限の変更に失敗します.この場合、sudo機能と同様のコマンド
pkexec
を使用することができ、コマンドを管理者として実行する役割も果たすが、soduersファイルに依存しない.sudoコマンドが使用できない場合、pkexec
を使用してコマンドを管理者権限で実行することが考えられます.# pkexec sudoers 440
pkexec chmod 440 /etc/sudoers