هل هي طريقة لتقليد أمر "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.
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 قد تم تمريرها عدة مرات ، وتستغرق الأخيرة فقط. ربما سأحاول تجنب حدوث ذلك.
هذا هو علف قائمة بريدية أكثر من كونه مشكلة فعلية مع القماش - سيتم إغلاقها على هذا النحو.
التعليق الأكثر فائدة
polusokkusnier أعمل مع قيود مماثلة. يمكنك محاولة تمرير أوامرك بهذه الطريقة.
run ('echo "whoami" | sudo su - اسم المستخدم ")