A execução do npm via sudo (não como root, não como auto-usuário) não pode encontrar npm em que root ou auto-usuário podem

2

Eu tenho um makefile, que eu uso para sudo make install para as partes do meu aplicativo que geralmente requerem instalação raiz. Infelizmente, isso resulta em uma situação estranha em que sudo não tem acesso a npm , enquanto root e meu usuário têm acesso:

self:

$ which npm
/home/self/.nvm/versions/node/v5.9.1/bin/npm

Raiz:

$ sudo su -

root@theserver~# which npm
/root/.nvm/versions/node/v5.9.1/bin/npm

sair

$ sudo qual npm $ (isso é uma linha em branco, sudo que npm não dá resultado)

Como resolvo essa discrepância? O que estou perdendo sobre o ecossistema npm que me permitiria fazer isso de maneira diferente?

Estou executando o Ubuntu 14.04 LTS:

cat /proc/version
cat /etc/issue
uname -a
Linux version 3.13.0-44-generic (buildd@lamiak) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014
Ubuntu 14.04.4 LTS \n \l
Linux theserver 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

PATH e HOME do usuário padrão e raiz.

user@server:~$ cat ~/.profile 
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
user@server:~$ sudo echo $PATH $HOME
/home/user/.nvm/versions/node/v5.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games /home/user
user@server:~$ echo $PATH $HOME
/home/user/.nvm/versions/node/v5.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games /home/user
user@server:~$ sudo su
root@server:/home/user# echo $PATH $HOME
/root/.nvm/versions/node/v5.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games /root
root@server:/home/user# cat ~/.profile
# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n
    
por Kzqai 29.03.2016 / 04:30

1 resposta

3

Isso provavelmente é porque você tem uma diretiva env_reset em seus sudoers (5) .

By default, the env_reset option is enabled. This causes commands to be executed with a new, minimal environment...

Esse ambiente mínimo não contém um PATH. A seção Command Environment das páginas man do sudoers (5) possui muitas informações relevantes para você ler.

    
por 29.03.2016 / 15:34

Tags