Fabric: "sudo su -" ν˜ΈμΆœμ„ κ΅¬ν˜„ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2013λ…„ 10μ›” 29일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: fabric/fabric

"sudo su - user_name" λͺ…령을 λͺ¨λ°©ν•œ λ‹€μŒ ν•„μš”ν•œ λͺ…령을 μ‹€ν–‰ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

run 및 sudo λ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ λΆˆν–‰νžˆλ„ λ§Œλ“€ 수 μžˆλŠ” 방법이 μ—†μŠ΅λ‹ˆλ‹€. λ„μ™€μ£Όμ„Έμš”

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@polusok @kusnier λΉ„μŠ·ν•œ μ œν•œ μ‚¬ν•­μœΌλ‘œ μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 λ°©λ²•μœΌλ‘œ λͺ…령을 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

run('echo "whoami" | sudo su - μ‚¬μš©μž 이름')

λͺ¨λ“  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 : ν•΄κ²° 방법을 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 같은 문제λ₯Ό κ°€μ§€κ³ μžˆλ‹€. sudo su - jboss 만 μ‚¬μš©ν•˜μ—¬ jboss μ‚¬μš©μžκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

@polusok @kusnier λΉ„μŠ·ν•œ μ œν•œ μ‚¬ν•­μœΌλ‘œ μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 λ°©λ²•μœΌλ‘œ λͺ…령을 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

run('echo "whoami" | sudo su - μ‚¬μš©μž 이름')

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 만 μ„€μ •ν•  수 μžˆμ§€λ§Œ 일반적인 sudoλ₯Ό μˆ˜ν–‰ν•˜λ €λ©΄ μž¬μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Juchiu, λ‚˜λŠ” 큰 희망을 가지고 μžˆμ—ˆμ§€λ§Œ 그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 기본적으둜 패브릭만 μ œκ³΅ν•˜λŠ” 것과 λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ €λŠ” Red Hat Enterprise Linux Server 릴리슀 5.4(Tikanga)λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. Npalrecha의 μ†”λ£¨μ…˜μ€ μž‘λ™ν•˜μ§€λ§Œ λ¬Όλ‘  μš°μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

였λ₯˜:
μ£„μ†‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž xxxxλŠ” '/bin/su - yyyy -c -uλ₯Ό μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
yyyy /bin/bash -l -c whoami' myserver.com.comμ—μ„œ 루트둜.

싀행됨: sudo -S -p 'sudo μ•”ν˜Έ:' su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami"

μ—¬μ „νžˆ -u yyyy λ₯Ό sudo에 μ „λ‹¬ν•˜λ €κ³  ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. sudo() ν˜ΈμΆœμ„ ν•  λ•Œ μ—¬μ „νžˆ user λ₯Ό kwarg둜 μ „λ‹¬ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 였λ₯˜ λ©”μ‹œμ§€λŠ” ν₯λ―Έλ‘­μŠ΅λ‹ˆλ‹€. sudoμ—μ„œ νŠΉμ • 인수, 특히 sudo su - yyyy κ°€ μ •μƒμ μœΌλ‘œ ν—ˆμš©λ˜κΈ° λ•Œλ¬Έμ— suλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 ν—ˆμš©λ˜μ§€ μ•Šμ„ 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

FWIW, μ£Όμž₯이 λ‚˜μ—κ²Œ μ΄ν•΄κ°€λ˜μ§€ μ•ŠλŠ” 것 κ°™μ•˜μ§€λ§Œ μ΄μƒν•œ 점을 μ•Œμ•„ λƒˆμŠ΅λ‹ˆλ‹€.
SudoλŠ” su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami" λͺ…령을 μ‹€ν–‰ν•˜λ €κ³  μ‹œλ„ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ SuλŠ” -u "achuser" /bin/bash -l -c "whoami" λ₯Ό μ‹€ν–‰ν•˜λ €κ³  μ‹œλ„ν•˜μ§€λ§Œ -c κ°€ μ—¬λŸ¬ 번 μ „λ‹¬λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜κ³  λ§ˆμ§€λ§‰ ν•˜λ‚˜λ§Œ κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— whoami 만 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆ 이런 일이 μΌμ–΄λ‚˜μ§€ μ•Šλ„λ‘ λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€.

이것은 패브릭의 μ‹€μ œ λ¬Έμ œλΌκΈ°λ³΄λ‹€ 메일링 λ¦¬μŠ€νŠΈμ— 더 κ°€κΉμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰