如何撤销存在安全风险的npm EACCES权限修复操作
撤销错误chown操作及npm EACCES问题安全修复方案
权限回滚操作
你之前执行的两条命令中,第一条不需要回滚:
~/.npm是当前用户专属的npm缓存目录,本身就应该归当前登录用户所有。如果之前因为误用sudo执行npm命令导致该目录所有者变为root,反而会触发普通用户运行npm时的权限报错,当前这个目录的权限状态是正常的,无需改动。
你需要回滚的是第二条修改系统级node_modules目录权限的操作:/usr/local/lib/node_modules/ 是系统全局npm包的存放目录,默认所有者为root,普通用户不应具备写入权限,否则任意运行在你用户下的进程都可以篡改全局安装的npm包,存在提权和恶意篡改风险。根据你使用的系统执行对应命令即可恢复默认权限:
- macOS系统执行:
sudo chown -R root:wheel /usr/local/lib/node_modules/
- 主流Linux发行版(Debian/Ubuntu、CentOS/RHEL、Fedora等)执行:
sudo chown -R root:root /usr/local/lib/node_modules/
执行完成后可以运行ls -ld /usr/local/lib/node_modules验证,输出内容的所有者列显示为root即代表恢复成功。
无安全隐患的npm EACCES报错修复方案
不要通过修改系统目录所有者、全局npm命令加sudo的方式解决权限问题,以下两种方案都是官方推荐的安全方案:
方案1:修改npm全局安装路径至用户目录
不需要管理员权限,所有全局npm包都存放在你的个人目录下:
- 创建个人专属的全局npm包目录:
mkdir ~/.npm-global
- 配置npm将该目录设为新的全局安装路径:
npm config set prefix '~/.npm-global'
- 将该目录下的bin路径加入系统环境变量:
- 如果你使用zsh(macOS默认shell、多数Linux用户常用shell),在
~/.zshrc文件末尾添加一行:export PATH=~/.npm-global/bin:$PATH - 如果你使用bash,Linux用户在
~/.bashrc、macOS用户在~/.bash_profile末尾添加上述同样的配置行
- 如果你使用zsh(macOS默认shell、多数Linux用户常用shell),在
- 刷新shell配置使其生效,例如zsh执行
source ~/.zshrc,bash对应source自己编辑的配置文件即可。
配置完成后全局安装yarn等npm包时,直接执行npm install -g yarn即可,不会触发EACCES报错,全程不需要sudo。
方案2:使用Node.js版本管理器
长期做Node.js开发推荐使用这个方案,安装fnm、nvm这类版本管理器后,Node.js程序和所有全局npm包都会存放在你的个人用户目录下,天生不存在系统目录权限冲突问题,还可以随时切换不同版本的Node.js适配不同项目,不会污染系统环境。
内容的提问来源于stack exchange,提问作者IanC
相关产品推荐
相关产品推荐

