Опитвам се да накарам capistrano да работи върху моя групов проект. Поради ограниченията на отдела трябва да влезем като себе си, след което да направим sudo su в потребител на споделен проект. Този потребител на проекта, към който sudo su - projectuser
влизаме, има разрешенията, необходими за достъп до директориите на проекти. Трудно ми е да разбера как да направя това да работи с capistrano. Всяка помощ ще бъде оценена.
Можете ли да използвате capistrano, ако трябва да sudo su в друг потребител?
Отговори (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 команди, с нова обвивка за влизане.
Вижте следния отговор:
Как мога да превключа потребител в задача на Capistrano?
Разбира се, бихте искали да модифицирате този код, за да изпълните sudo su - projectuser
вместо просто sudo за root.
Никога не съм правил това сам, но изглежда, че ще работи. Можете също да тествате това, като използвате cap shell
. Лично аз бих препоръчал първо да си поиграете с cap shell
.
Освен това има друга опция тук, но мисля оригиналната връзка по-горе предоставя по-добър шанс за работа.
sudo -u
и това го поправи. Благодаря момчета. - person JoshEmory   schedule 18.06.2013