Можете ли вы использовать capistrano, если вам нужно ввести sudo su для другого пользователя?

Я пытаюсь заставить капистрано работать над моим групповым проектом. Из-за ограничений отдела мы должны войти в систему как сами, а затем sudo su в качестве общего пользователя проекта. Этот пользователь проекта, в которого мы вошли, имеет права доступа, необходимые для доступа к каталогам проектов. Мне трудно понять, как заставить это работать с капистрано. Любая помощь будет оценена по достоинству.


person JoshEmory    schedule 10.05.2013    source источник
comment
Я разговаривал с парнями из Капистрано. Видимо, это было невозможно. Мои системные администраторы изменили наш глобальный файл sudoer, чтобы разрешить sudo -u, и это исправило ситуацию. Спасибо, парни.   -  person JoshEmory    schedule 18.06.2013
comment
Надеюсь, это ответит на ваш вопрос: stackoverflow.com/questions/22054076/   -  person activars    schedule 10.05.2014


Ответы (2)


man sudo

   -u user     The -u (user) option causes sudo to run the specified command as a user other than root.  To specify a uid instead of a user name, use #uid.  When running commands as a
               uid, many shells require that the '#' be escaped with a backslash ('\').  Note that if the targetpw Defaults option is set (see sudoers(5)) it is not possible to run
               commands with a uid not listed in the password database.

   -i [command]
               The -i (simulate initial login) option runs the shell specified in the passwd(5) entry of the target user as a login shell.  This means that login-specific resource
               files such as .profile or .login will be read by the shell.  If a command is specified, it is passed to the shell for execution.  Otherwise, an interactive shell is
               executed.  sudo attempts to change to that user's home directory before running the shell.  It also initializes the environment, leaving DISPLAY and TERM unchanged,
               setting HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the contents of /etc/environment on Linux and AIX systems.  All other environment variables are removed.

Sudo уже поддерживает запуск команд от имени конкретного пользователя, а не root. Таким образом, вместо запуска sudo mkdir some_folder вы можете просто запустить sudo -u your_user mkdir some_folder, и он просто выполнит все команды от имени этого пользователя.

Кроме того, флаг -i указывает sudo запустить новую оболочку и выполнить команды. Новая оболочка будет инициализирована так же, как оболочка входа в систему (она переключится на домашний каталог пользователя, повторно инициализирует HOME и другие переменные и т. д.). Это ближе всего к запуску sudo su - your_user.

Чтобы Capistrano использовал sudo -u <your-user> -i вместо sudo, установите следующую конфигурацию в deploy.rb:

set :use_sudo, true
set :sudo, "sudo -u <your-user> -i"

И Capistrano теперь будет использовать данного пользователя для всех команд sudo с новой новой оболочкой входа в систему.

person Subhas    schedule 24.06.2013
comment
К сожалению, это не работает для многих вещей. Например, когда он пытается запустить команду rake assets:precompile, он запускает ее как пользователь, под которым вы вошли в систему. Но поскольку драгоценные камни установлены под общей учетной записью пользователя, это не удается. - person JoshEmory; 27.06.2013

Проверьте следующий ответ:

Как я могу переключить пользователя в задаче Capistrano?

Конечно, вы захотите изменить этот код, чтобы выполнить sudo su - projectuser вместо простого sudo для получения root-прав.

Я никогда не делал этого сам, но кажется, что это сработает. Вы также можете проверить это, используя cap shell. Лично я бы рекомендовал сначала поиграть с cap shell.

Кроме того, есть еще один вариант здесь, но я думаю исходная ссылка выше дает больше шансов на работу.

person CDub    schedule 19.06.2013