У меня есть make-файл, который я использую для sudo make install
для тех частей моего приложения, которые обычно требуют установки root. К сожалению, это приводит к странной ситуации, когда sudo
не имеет доступа к npm
, в то время как и root
, и мой пользователь имеют доступ:
self :
$ which npm
/home/self/.nvm/versions/node/v5.9.1/bin/npm
Корень:
$ sudo su -
root@theserver~# which npm
/root/.nvm/versions/node/v5.9.1/bin/npm
$ sudo который npm $ (это пустая строка, sudo, которая не дает результата npm)
Как устранить это несоответствие? Что мне не хватает в экосистеме npm, которая позволила бы мне сделать это по-другому?
Я использую 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
ПУТЬ и ДОМАШНЯЯ СТРАНИЦА стандартного пользователя и root.
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
Вероятно, это связано с тем, что у вас есть директива env_reset
в вашем файле sudoers (5) .
По умолчанию параметр env_reset включен . Это вызывает выполнение команд в новой минимальной среде ...
Эта минимальная среда не содержит ПУТЬ. Раздел Command Environment
на страницах руководства sudoers (5) содержит множество важной информации, которую вы можете просмотреть.