web-dev-qa-db-ja.com

rootアクセス権を持っているが、まだcatコマンドの使用時に権限が拒否されている

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

しかし、私が使うとき

Sudo cat f84e19a2f44c6386.crt Gd_bundle-g2-g1.crt >> coolexample.crt

私は得る

bash: coolexample.crt: Permission denied.  
1
Mr.President

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

Sudo -s

そして、最初にSudoなしでコマンドを再試行します。

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

0
slashleo

Sudo cat aが実行されると、ファイルaの内容が読み取られ、 Sudo特権を持つstdout。テキストのリダイレクトはシェルによって処理され、ファイルに追加されますb>>が使用されました)。この特定のケースでは、ファイルに非スーパーユーザーが変更する権限がなかったようです。

Sudo suSudo -i、またはSudo -sを使用してrootとしてシェルを実行することは、この制限を克服するための良い考えのようですbut推奨されていません。シェルが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には、通常のユーザーが読み取る権限がありませんでした。

1
Kulfy