"sudo su - user_name" λͺ λ Ήμ λͺ¨λ°©ν λ€μ νμν λͺ λ Ήμ μ€ννλ λ°©λ²μ΄ μμ΅λκΉ?
run
λ° sudo
λ₯Ό μλνμ§λ§ λΆννλ λ§λ€ μ μλ λ°©λ²μ΄ μμ΅λλ€. λμμ£ΌμΈμ
λΉμ μ΄νλ €λ μΌμμ '-'κ° μ€μν©λκΉ? (μ: λ‘κ·ΈμΈ νΈμΆ) μλλ©΄ νμ¬ μ¬μ©μμ 루νΈκ° μλ λ€λ₯Έ μ¬μ©μλ‘ λͺ λ Ήμ μ€ννλ €κ³ ν©λκΉ?
λ‘κ·ΈμΈμ μν₯μ΄ μ€μνμ§ μμ κ²½μ° λ€μμ μνν μ μμ΅λλ€.
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
λ§ μ€ννκ³ μμ΅λλ€. μλ§ μ΄λ° μΌμ΄ μΌμ΄λμ§ μλλ‘ λ
Έλ ₯ν κ²μ
λλ€.
μ΄κ²μ ν¨λΈλ¦μ μ€μ λ¬Έμ λΌκΈ°λ³΄λ€ λ©μΌλ§ 리μ€νΈμ λ κ°κΉμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
@polusok @kusnier λΉμ·ν μ ν μ¬νμΌλ‘ μμ νκ³ μμ΅λλ€. μ΄ λ°©λ²μΌλ‘ λͺ λ Ήμ μ λ¬ν μ μμ΅λλ€.
run('echo "whoami" | sudo su - μ¬μ©μ μ΄λ¦')