Можете ли да използвате capistrano, ако трябва да sudo su в друг потребител?

Опитвам се да накарам capistrano да работи върху моя групов проект. Поради ограниченията на отдела трябва да влезем като себе си, след което да направим sudo su в потребител на споделен проект. Този потребител на проекта, към който sudo su - projectuser влизаме, има разрешенията, необходими за достъп до директориите на проекти. Трудно ми е да разбера как да направя това да работи с capistrano. Всяка помощ ще бъде оценена.


person JoshEmory    schedule 10.05.2013    source източник
comment
Говорих с момчетата от Capistrano. Явно беше невъзможно. Накарах моите системни администратори да променят нашия глобален 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