具有 root 访问权限,使用 cat 命令时仍然被拒绝权限

具有 root 访问权限,使用 cat 命令时仍然被拒绝权限

我尝试按照他们在 Centos 上针对 nginx 的说明安装 SSL 证书 (GoDaddy)。我从 GoDaddy 下载的 zip 包含 3 个文件 - 一个主证书、一个中级证书和一个 PEM 文件。
我对我的 Ubuntu VPS 具有 root 访问权限。

但是当我使用

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

我明白了

bash: coolexample.crt: Permission denied.  

答案1

sudo cat a运行时,文件A的内容被读取并打印在 stdout 上,具有sudo权限。文本的重定向由 shell 处理,并将附加到文件b(因为>>已使用)。在此特定情况下,似乎该文件没有非超级用户修改的权限。

sudo su尽管使用或以 root 身份运行 shellsudo -i似乎sudo -s是克服此限制的好主意,不建议这么做。可能会发生这样的情况:shell 以sudo特权运行,并且在不知情的情况下未退出 root shell,就使用了其他命令。如果该命令输入错误,可能会对系统造成严重损害。

在这种情况下,cat的输出可以通过管道传输,tee可以使用。它是一个实用程序,它从标准输入读取输入并输出到文件和标准输出。由于您想要附加文件,-a可以使用选项。因此,命令将如下所示:

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

我以为f84e19a2f44c6386.crtgd_bundle-g2-g1.crt没有普通用户阅读的权限

答案2

尝试以超级用户身份登录

sudo -s

然后在开始时不使用 sudo 再次尝试您的命令。

它不起作用的原因是重定向是由 shell 而不是 cat 完成的。有关更多信息,请参阅此答案:https://askubuntu.com/a/230482

相关内容