Fabric: كيف يتم تنفيذ استدعاء sudo su -؟

تم إنشاؤها على ٢٩ أكتوبر ٢٠١٣  ·  9تعليقات  ·  مصدر: fabric/fabric

هل هي طريقة لتقليد أمر "sudo su - user_name" ثم تنفيذ الأوامر التي أحتاجها؟

حاولت run و sudo وللأسف لا توجد طريقة لتحقيق ذلك. الرجاء المساعدة

التعليق الأكثر فائدة

polusokkusnier أعمل مع قيود مماثلة. يمكنك محاولة تمرير أوامرك بهذه الطريقة.

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'")

نعم - مهم بالنسبة لي. أحتاج إلى التنفيذ

  • قم بتسجيل الدخول إلى الخادم باستخدام بيانات الاعتماد الخاصة بي
  • في shell login كمستخدم آخر بإذن محدد وبيئة مهيأة
  • تنفيذ الأوامر

يرجى ملاحظة أن لدي كلمة مرور حسابي فقط وليس لدي كلمة مرور لهؤلاء المستخدمين في الخطوة 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.

polusokkusnier أعمل مع قيود مماثلة. يمكنك محاولة تمرير أوامرك بهذه الطريقة.

run ('echo "whoami" | sudo su - اسم المستخدم ")

npalrecha ، يبدو أن هذا يعمل ولكنه يطالب بكلمة المرور في كل أمر. ألا توجد طريقة فعلاً لمجرد sudo su - مستخدم وتشغيل جميع الأوامر اللاحقة بصفته هذا المستخدم؟

لدي نفس المشكلة ... إذا كان بإمكانك تغيير الملف /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 ، كان لدي آمال كبيرة لكن ذلك لم ينجح بالنسبة لي. أنا في الأساس أتلقى نفس الخطأ الذي كان النسيج وحده يسببه. أنا على الإصدار 5.4 من Red Hat Enterprise Linux Server (تيكانجا). يعمل حل Npalrecha ، فهو ليس أنيقًا بالطبع.

خطأ:
عذرًا ، المستخدم xxxx غير مسموح له بتنفيذ '/ bin / su - yyyy -c -u
yyyy / bin / bash -l -c whoami 'كجذر على myserver.com.

تم التنفيذ: sudo -S -p 'sudo password:' su - yyyy -c -u "yyyy" / bin / bash -l -c "whoami"

يبدو كما لو أنه لا يزال يحاول تمرير -u yyyy إلى sudo. أعتقد أنك عندما تجري مكالمتك sudo() ، فإنك لا تزال تقوم بتمرير user كـ kwarg.

لكن رسالة الخطأ مثيرة للاهتمام ، حيث يبدو أنه قد لا يُسمح لك في sudo بتنفيذ su باستخدام وسيطات معينة ، esp لأنه يُسمح لك باستخدام sudo su - yyyy بشكل طبيعي.

FWIW ، لا يبدو أن الحجج منطقية بالنسبة لي ، لكنني اكتشفت ما هو غريب.
يبدو أن Sudo حاول تنفيذ الأمر su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami" . يبدو أن Su تحاول تنفيذ -u "achuser" /bin/bash -l -c "whoami" ، لكنها تعمل فقط whoami لأنها تعتقد أن -c قد تم تمريرها عدة مرات ، وتستغرق الأخيرة فقط. ربما سأحاول تجنب حدوث ذلك.

هذا هو علف قائمة بريدية أكثر من كونه مشكلة فعلية مع القماش - سيتم إغلاقها على هذا النحو.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات