Ubuntu无法cd进入/etc/letsencrypt/live目录提示Permission denied
问题根因
两个核心逻辑没搞清楚:
- sudo权限不是登录就默认生效的:只有你在命令前显式加
sudo调用时,才会临时提权到root执行对应操作,日常普通操作走的还是你当前账号的权限,不会自动带root权限。 - 目录的访问权限规则:能在上级目录看到某个文件夹的条目,只需要上级目录有读权限;但要
cd进入这个文件夹,必须当前操作的用户对该文件夹拥有执行(x)权限。
Certbot(签发Let's Encrypt证书的官方工具)默认会将/etc/letsencrypt全目录权限设为700(rwx------),属主属组均为root,普通用户对这个目录没有任何读写执行权限,所以直接cd会报权限拒绝。你能看到这个目录存在,只是因为上级/etc目录默认对所有用户开放了读+执行权限,允许你列出/etc下的文件/文件夹名而已,不代表你有权限访问这个文件夹内部。
解决方案
根据你的使用场景选对应方案即可:
- 临时操作(推荐,安全性最高)
因为cd是shell内置命令,无法直接通过sudo cd提权进入,两种常用操作方式:- 直接提权执行你需要的操作,不需要cd进目录,比如查看live目录下内容、读取证书文件:
# 列出live目录下所有内容 sudo ls -l /etc/letsencrypt/live # 读取指定证书内容 sudo cat /etc/letsencrypt/live/你的域名/cert.pem - 临时切换到root shell操作,操作完成输入
exit即可退回普通用户:sudo -i cd /etc/letsencrypt/live # 后续正常操作即可 exit
- 直接提权执行你需要的操作,不需要cd进目录,比如查看live目录下内容、读取证书文件:
- 长期给普通用户开放访问权限(强烈不推荐生产环境使用)
目录内存储的证书私钥属于高敏感信息,放开权限后可能被恶意程序窃取,导致HTTPS流量被解密、站点被仿冒。如果是本地测试环境确实需要,可以用ACL给指定用户授予权限:
执行完后当前普通用户就可以直接cd进入对应目录,不需要加sudo。# 安装acl工具 sudo apt update && sudo apt install -y acl # 递归给当前用户授予/etc/letsencrypt下的读+执行权限(X是大写,只会给目录加执行权限,不会给文件乱加) sudo setfacl -R -m u:$USER:rX /etc/letsencrypt/
内容的提问来源于stack exchange,提问作者gabogabans
相关产品推荐
相关产品推荐

