ルートアクセス権があるのに、cat コマンドを使用すると権限が拒否される

ルートアクセス権があるのに、cat コマンドを使用すると権限が拒否される

Centos 上の nginx の手順に従って、SSL 証明書 (GoDaddy) をインストールしようとしていました。GoDaddy からダウンロードした zip には、プライマリ証明書、中間証明書、PEM ファイルの 3 つのファイルが含まれています。Ubuntu
VPS のルート アクセス権を持っています。

しかし、私が

sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt

私は

bash: coolexample.crt: Permission denied.  

答え1

が実行されるとsudo cat a、ファイル1つのの内容は、sudo権限を持って標準出力に読み込まれ、印刷されました。テキストのリダイレクトはシェルによって処理され、ファイルに追加されます。b(>>が使用されているため)。この特定のケースでは、ファイルにスーパーユーザー以外のユーザーによる変更権限がなかったようです。

sudo suこの制限を克服するには、sudo -iまたはを使用してシェルをルートとして実行するsudo -sのがよい考えのように思えますが、しかし推奨されません。シェルがsudo特権で実行されていて、知らないうちにルート シェルを終了せずに他のコマンドが使用される可能性があります。そのコマンドを誤って入力すると、システムに重大な損害を与える可能性があります。

このような場合、catの出力はパイプで接続され、teeが使えます。これは標準入力から入力を読み取り、ファイルと標準出力に出力するユーティリティです。ファイルに追加したいので、-aオプションが使えます。したがって、コマンドは次のようになります。

sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt | sudo tee -a coolexample.crt

私はそう思ったf84e19a2f44c6386.crtそしてgd_bundle-g2-g1.crt通常のユーザーが読む権限がなかった

答え2

スーパーユーザーとしてログインしてみてください

sudo -s

そして、最初に sudo なしでコマンドを再度実行してください。

動作しない理由は、リダイレクトが cat ではなくシェルによって実行されるためです。詳細については、次の回答を参照してください。https://askubuntu.com/a/230482

関連情報