Установите umask для удаленных команд

Как я могу направить процессы, запущенные на удаленных машинах через ssh, для запуска с определенным umask? Я хочу, чтобы это также относилось к командам, выполняемым как часть стандартных рецептов Capistrano, поэтому я не могу просто сделать явный вызов части команды "umask".

Похоже, что ~/.bash_profile на удаленном компьютере не читается, так как Capistrano вызывает удаленные команды.

4 ответа

Решение

Я столкнулся с той же проблемой и обошел ее, используя недокументированные документы. SSHKit.config.umask в config/deploy.rb, Обратите внимание, что это установит umask для каждой команды SSH.

Поместите umask 0002 в .bashrc учетной записи пользователя, которую вы используете для развертывания.

Ответ @beauby с использованием SSHKit хорош, но он работает только для Capistrano 3, так как Capistrano 2 не использует SSHKit.

Общая проблема по отношению к umask и Капистрано это то, что bundle install устанавливает драгоценные камни с разрешениями, которые являются слишком ограничительными. Для этой конкретной проблемы я нашел решение для Capistrano 2:

namespace :bundle do
  task :postinstall do
    run "chmod -R u=rwX,go=rX #{bundle_dir}"
  end
end

after 'bundle:install', 'bundle:postinstall'

Договорились с Аленом - установите маску в свой .bashrc вместо .bash_profile, При развертывании с Capistrano в типичной настройке ваш .bash_profile не загружается по умолчанию. Ознакомление с разницей между.bashrc и.bash_profile поможет понять цели обоих. У меня есть переменные среды, установленные в моем .bashrc файл, и они, безусловно, используются при развертывании или для запуска любых других команд с capistrano.

Другой вариант - создать задачу для установки значения umask перед началом создания файлов при развертывании. Например, в Cap 3 вы можете использовать это:

task :set_umask do
  on roles(:all) do |host|
    execute "umask 0002"
  end
end
before "deploy:starting", "set_umask"
Другие вопросы по тегам