Fabric: "рд╕реБрдбреЛ рд╕реБ -" рдХреЙрд▓ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЕрдХреНрддреВре░ 2013  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: fabric/fabric

рдХреНрдпрд╛ рдпрд╣ "sudo su - user_name" рдХрдорд╛рдВрдб рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

run рдФрд░ sudo рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреАрдЬрд┐рдП

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@polusok @kusnier рдореИрдВ рд╕рдорд╛рди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рди ('рдЗрдХреЛ "рд╡реНрд╣рд╛рдореА" | рд╕реБрдбреЛ рд╕реБ - рдпреВрдЬрд░рдиреЗрдо')

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ '-' рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧрд┐рди рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ) рдпрд╛ рдЖрдк рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд░реВрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдпрджрд┐ рд▓реЙрдЧрд┐рди рдХрд╛ рдкреНрд░рднрд╛рд╡ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ...

sudo("mkdir /var/www/new_docroot", user="www-data")

рдпрд╛

   with settings(sudo_user='mysql'):
            sudo("whoami") # prints 'mysql'

рдпрд╛ рдпрджрд┐ рд▓реЙрдЧрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рд╣реИрдХреА рддрд░реАрдХрд╛) рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ ...

   sudo("su - usernaeme -c 'command to be run'")

рд╣рд╛рдБ - рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореБрдЭреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

  • рдореЗрд░реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ
  • рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдорддрд┐ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЗрд▓ рд▓реЙрдЧрд┐рди рдореЗрдВ
  • рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдореЗрд░рд╛ рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЪрд░рдг 2 рдореЗрдВ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

sudo su - user_name

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ

sudo("su - usernaeme -c 'command to be run'")
Sorry, user user_name is not allowed to execute '/usr/bin/su - another_user -c pwd' as root on server.

рдХреЛрдИ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡?

@polusok : рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдХрд╛рдордХрд╛рдЬ рдорд┐рд▓рд╛ рд╣реИ? рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ jboss рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ sudo su - jboss рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@polusok @kusnier рдореИрдВ рд╕рдорд╛рди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рди ('рдЗрдХреЛ "рд╡реНрд╣рд╛рдореА" | рд╕реБрдбреЛ рд╕реБ - рдпреВрдЬрд░рдиреЗрдо')

npalrecha, рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл sudo su - user рдФрд░ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдж рдХреЗ рд╕рднреА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА ... рдпрджрд┐ рдЖрдк /etc/sudoers рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИред рдЖрдкрдХреА рд▓рд╛рдЗрди рд╢рд╛рдпрдж username host = ALL рдкрдврд╝рддреА рд╣реИ рд▓реЗрдХрд┐рди username host = (ALL) ALL рдкрдврд╝рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде sudo(command, user="otheruser") рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред

class Sudosu:
    def __init__(self, user):
        self.user = user

    def __enter__(self):
        self.old_sudo_prefix = env.sudo_prefix
        self.old_sudo_user, env.sudo_user = env.sudo_user, self.user
        env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"

    def __exit__(self, a, b, c):
        env.sudo_prefix = self.old_sudo_prefix
        env.sudo_user = self.old_sudo_user

рдРрд╕реЗ рдХрд░реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓...

<strong i="17">@task</strong>
def test():
    with Sudosu(user=username):
        sudo("whoami")

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ...

def sudosu(user):                                                                        
    def wrap(f):                                                                         
        def inner(*args, **kwargs):                                                      
            old_sudo_prefix = env.sudo_prefix                                            
            old_sudo_user, env.sudo_user = env.sudo_user, user                           
            env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"       

            f(*args, **kwargs)                                                           

            env.sudo_prefix = old_sudo_prefix                                            
            env.sudo_user = old_sudo_user                                                
        inner.__name__ = f.__name__                                                      
        return inner                                                                     
    return wrap                                                                          

рдРрд╕реЗ рдХрд░реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓...

<strong i="24">@task</strong>
@sudosu("username")
def whoami():
    sudo("whoami")

рдпрд╛...

sudo = sudosu("username")(sudo)

<strong i="28">@task</strong>
def whoami():  
    sudo("whoami")

рдЖрдкрдХреЛ рдЬреИрд╕рд╛ рднреА рд▓рдЧреЗред рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред

рдмреЗрд╢рдХ, рдЖрдк рдмрд╕ env.sudo_prefix рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдбреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЬреБрдЪрд┐рдЙ, рдореБрдЭреЗ рдмрд╣реБрдд рдЙрдореНрдореАрджреЗрдВ рдереАрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЕрдХреЗрд▓реЗ рдХрдкрдбрд╝реЗ рджреЗ рд░рд╣рд╛ рдерд╛ред рдореИрдВ Red Hat Enterprise Linux рд╕рд░реНрд╡рд░ рд░рд┐рд▓реАрдЬ 5.4 (рдЯрд┐рдХрдВрдЧрд╛) рдкрд░ рд╣реВрдВред Npalrecha рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рддреНрд░реБрдЯрд┐:
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ xxxx рдХреЛ '/bin/su - yyyy -c -u . рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
yyyy /bin/bash -l -c whoami' myserver.com.com рдкрд░ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВред

рдирд┐рд╖реНрдкрд╛рджрд┐рдд: sudo -S -p 'sudo password:' su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami"

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЕрднреА рднреА рд╕реВрдбреЛ рдХреЛ -u yyyy рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЕрдкрдирд╛ sudo() рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдк user рдХреЛ kwarg рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ sudo рдореЗрдВ рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, esp рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ sudo su - yyyy рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рддрд░реНрдХ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдЬреАрдм рдерд╛ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдбреЛ рдиреЗ su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami" рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рд╕реБ рддрдм -u "achuser" /bin/bash -l -c "whoami" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ whoami рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ -c рдХрдИ рдмрд╛рд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд▓реЗрддрд╛ рд╣реИред рдореИрдВ рд╢рд╛рдпрдж рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рдХрдкрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдЪрд╛рд░рд╛ рд╣реИ - рдЗрд╕ рддрд░рд╣ рдмрдВрдж рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

supriyopaul picture supriyopaul  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TimotheeJeannin picture TimotheeJeannin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zhaoguixu picture zhaoguixu  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omzev picture omzev  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

neemxyang picture neemxyang  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ