sudoコマンドのいくつかのピットについて


1.sudo実行時にコマンドが見つからない理由sudo:command not found


ローカルにUbuntu仮想マシンをインストールし、golang環境にPATH環境変数を追加し、makeがソースコードをコンパイルするとPermission denied、sudoがソースコードをコンパイルするとsudo: go: command not foundを表示します.go versionコマンドを実行してみます
  • 非rootユーザ実行:go version go1.12.6 linux/amd64
  • rootユーザ実行:go version go1.12.6 linux/amd64
  • 非rootユーザsudo実行:sudo: go: command not found
  • これは???おかしいんじゃない??一体何のためでしょうか??元のrootユーザと非rootユーザが正常にコマンドを実行する場合、使用するPATHプロファイルが/etc/environment非rootユーザsudo実行コマンドである場合、使用するPATHプロファイルは/etc/sudoers
    /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