NodeJS不安全的perm不能在package.json上工作
我想在我的package.json
上使用预安装脚本运行npm install
命令。 我知道这是反模式,但我需要以root身份运行一些脚本。
通过向我的根目录添加一个包含unsafe-perm = true
的.npmrc
文件,它工作正常。 但是它不能通过在我的package.json
文件中添加一个configuration属性来工作:
{ "name": "foo", "version": "1.4.4", "config": { "unsafe-perm":true }, "scripts" : { "preinstall" : "npm install -g bower" } } // It is not working
根据NPMconfiguration文档,可以在我的包文件中添加此属性。 我想了解为什么它不工作。
添加该属性时,将使用前缀npm_config_package
将其添加到脚本的环境中:
$ cat package.json { "config": { "unsafe-perm": true } } $ npm run env | grep perm $ npm run env | grep perm npm_package_config_unsafe_perm=true npm_config_unsafe_perm=true $ sudo npm run env | grep perm npm_package_config_unsafe_perm=true npm_config_unsafe_perm= $
这是出于安全原因,有点。 如果npm
registry中的任意包允许你改变npm
的configuration设置(例如,如果它将前缀设置为/etc
并安装了一个名为passwd
的文件)
但是,您仍然可以通过在脚本行中设置环境variables来解决该问题(这在Windows上不起作用):
$ cat package.json { "config": { "unsafe-perm": true }, "scripts": { "foo": "npm_config_unsafe_perm=true env" } } $ npm run foo | grep unsafe_perm npm_config_unsafe_perm=true npm_package_config_unsafe_perm=true npm_lifecycle_script=npm_config_unsafe_perm=true env npm_package_scripts_foo=npm_config_unsafe_perm=true env $ sudo npm run foo | grep unsafe_perm npm_config_unsafe_perm=true npm_package_config_unsafe_perm=true npm_lifecycle_script=npm_config_unsafe_perm=true env npm_package_scripts_foo=npm_config_unsafe_perm=true env $
这可能是npm
一个错误,所以我build议不要依赖这种行为。 你可以逃脱使用不同的用户比root
?
来源:在OSX上使用npm@2.6.1
进行testing。 我是npm
问题跟踪器的支持志愿者, https://github.com/npm/npm/issues 。
不安全烫发
如果以超级用户身份运行,则为true;否则为true Type:Boolean设置为true以禁止在运行程序包脚本时切换UID / GID。 如果显式设置为false, 则以非root用户身份进行安装将失败 。