2016-11-10 12 views
1

LinuxでSU権限なしでパッケージをインストール/アップデートしようとしているときに、私はnpmでエラーになります。スーパーユーザーとしてnpmを実行します。それは良い考えではありませんか?

easy問題を解決する方法は、実行sudo npm install <package>ですが、それが良い考えであるかどうかはわかりません。

よくある質問は、StackOverflowの質問とブログの投稿にあるように、.npmというフォルダの所有者になることです。

私の質問は:なぜnpmをSUとして実行するのが良い考えではないのですか?

+0

スーパーユーザー権限で実行/読み書きすることができるので、sthがnpmプロセスを利用すると、SUとして実行/読み書きできます。 –

答えて

3

スーパーユーザーとしてnpmを実行すると、信頼できないコードがスーパーユーザーとして実行され、システム全体が混乱する可能性があります。特権を持たないユーザーとしてnpmを実行すると、そのコードをより少ない権限で実行する危険性があり、システム全体を混乱させることはありません - 自分のファイルだけで(これは見た目によっては悪いこともあります) 。

私が頻繁にやりたいことは、自分のコンピュータならば、システム上でグローバルにではなくホームディレクトリにNodeをインストールすることです。そうすれば、npmの場合はsudoまたはsu、ノード自体の場合はmake installで実行する必要はありません。

さまざまなスイッチを使用してソースからコンパイルしたノードをたくさん実行します。使用する規約は、バージョン付きのディレクトリにノードをインストールすることです(グローバルには/optですが、その後はsudoが必要です)。ホームディレクトリは~/optです。

wget https://nodejs.org/dist/v7.1.0/node-v7.1.0.tar.gz 
tar xzvf node-v7.1.0.tar.gz 
cd node-v7.1.0 
./configure --prefix=$HOME/opt/node-v7.1.0 
make && make test && make install 

その後、私は~/opt/node-v7.1.0にシンボリックリンク~/opt/nodeポインティングを作成して、私が持っている:私の.profileまたは.bashrc

PATH="$HOME/opt/node/bin:$PATH" 

私はこのようにそれを行います。

このようにして、Nodeをインストールしたりnpmを実行するためにスーパーユーザーとして実行する必要はありません。

ボーナスとして、シンボリックリンクを変更するだけで、デフォルトのノードバージョンをすばやく切り替えることができます。また、PATHを変更するか、~/opt/node-v7.0.0/bin/nodeなどのフルパスでノードを実行すると、いつでも他のバージョンを実行できます。

私は私の他の回答で、より詳細にそのインストール・プロセスを説明した:

この回答があるので、私はここではあまり詳細には触れたくありませんスーパーユーザーとしてnpmを実行するのは良い考えではありません。このインストールプロセスは、スーパーユーザーとしてnpmを実行する必要がない1つの解決策に過ぎません。

スーパーユーザーとして実行されないようにnpmアクセス許可を設定するその他のオプションについては、npm docsのFixing npm permissions(RyanZimのコメントの中のコメントのおかげで)に説明されています。

+1

'npm'を実行しているときに' sudo'を使わない理由の良い説明です。おそらく、https://docs.npmjs.com/getting-started/fixing-npm-permissionsにリンクされていれば、より完全な答えになるでしょうか? – RyanZim

+1

すばらしい説明! –

+0

@RyanZim提案していただきありがとうございます。私は自分の答えを更新しました。 – rsp

関連する問題