Да, существует очень законная причина. Обратите внимание, что другие пользователи могут читать, но не записать в Ваши файлы. Это очень полезно в профессиональных сетях, потому что можно легко совместно использовать файлы с коллегами.
Например, в лаборатории я раньше работал в, у всех нас был доступ к друг друга $HOME
каталоги, таким образом, мы могли легко совместно использовать наши данные или наши сценарии друг с другом. Если бы у моей подруги Alice был хороший сценарий для того, чтобы сделать X, то я просто выполнил бы его:
~alice/bin/scriptX.pl mydata
Как другие упомянули, для изменения этого необходимо будет установить umask. Например, для создания новых файлов и папок читаемыми только Вами добавьте это к Вашему ~/.bashrc
:
umask 0077
Как говорится в документации NGINX:
По умолчанию nginx удаляет из родительского процесса все переменные окружения, унаследованные от него, за исключением переменной TZ.
Обходной путь к моей конкретной проблеме может быть достигнут несколькими различными способами.
Редактируя файл config.ru
, мы можем просто определить PATH
, если он еще не определен:
if not ENV['PATH']
ENV['PATH'] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
end
Это достаточно просто и решает проблему, но похоронен в конфигурации, на которую вы, вероятно, никогда больше не посмотрите.
Установив переменную PATH
в конфигурации вашего сайта NGINX, мы получим более "немедленно видимое" решение проблемы:
server {
listen 8140 ssl default_server;
# ...
# manually set PATH for Passenger; see PUP-3000
env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
passenger_enabled on;
# ...
}
В общем случае linux устанавливает переменную окружения PATH
, считывая файлы точек. При входе в систему считывается /etc/профиль
. После установки переменных окружения по умолчанию считывается .shell_profile
, например .bash_profile
. Если этот файл точек не существует, то он пытается прочитать .bash_login
, а если он тоже не существует, то ищет .profile
.
Вернемся к вопросу. У пользователя puppet
нет оболочки или не вмещаются вышеупомянутые файлы. Вы можете просто проверить его, выполнив echo "$SHELL" && echo "$PATH"
.
Вы можете установить PATH
вручную, используя один из файлов с точками, или посмотреть на следующее: http://www.puppetcookbook.com/posts/set-global-exec-path.html