سؤال تشغيل البرنامج النصي كمستخدم لديه قذيفة nologin


كل ما علي فعله هو تشغيل برنامج نصي محدد كمستخدم خاص لديه غلاف nologin / false في / etc / passwd.

وأود أن تشغيل البرنامج النصي كجذر ويجب تشغيل هذا كمستخدم آخر. جري:

~# su -c "/bin/touch /tmp/test" testuser

ستعمل ولكني أحتاج إلى غلاف صالح لـ testuser. أعلم أنه يمكنني تعطيل كلمة المرور passwd -d testuser وترك shell إلى / bin / bash بهذه الطريقة من شأنه تأمين بعض الشيء ولكني بحاجة إلى nologin / shell false.

أساسا ما أحتاج إليه هو ما يفعله crontab عندما نقوم بتعيين وظائف ليتم تشغيلها كمستخدم معين ، بغض النظر عن هذا واحد لديه قذيفة nologin / كاذبة.

لقد وجدت هذا الموضوع تنفيذ أمر كمستخدم nologin ولكن ليس لدي أي فكرة عن كيفية "تسلسل" الأمر su -s /bin/sh $user على السيناريو أحتاج للتشغيل

شكر


78
2018-01-18 13:56


الأصل




الأجوبة:


يمكنك استخدام -s التبديل إلى su لتشغيل shell معين

su -s /bin/bash -c '/path/to/your/script' testuser

(إضافة البادئة sudo إلى ما سبق إذا testuser هو مستخدم بدون كلمة مرور).


110
2018-01-18 18:49



ماذا لو كانت سو root:root -rwsr-x--- ؟ - Patryk
ماذا لو لم يكن لدى المستخدم كلمة مرور؟ - CMCDragonkai
Wesley اكتشف أنك تحتاج إلى أن تكون الجذر لتشغيل هذا الأمر للمستخدم بدون كلمة مرور. - CMCDragonkai
lain ، إذا كان من المفترض أن لا يكون لدى المستخدم shell ، يجب ألا تكون العملية المرتبطة بالأمر تابعة لعملية bash. وبالتالي ، يجب أيضًا استخدام exec لاستبدال shell بالبرنامج النصي. وإذا كنت ترغب في جعل البرنامج النصي طفلاً من init ، فما عليك سوى استخدام & ، على سبيل المثال su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
منذ أن أمضيت آخر 20 دقيقة في العمل على كيفية تحقيق نفس النتيجة باستخدام runuser، أود أن أشير إلى ذلك su -s SHELL يجعل المعلمة الأمر runuser إلى حد كبير عديمة الفائدة :) شكرا يناير! - jirka


يمكنك القيام بذلك مع sudo -u إذا قمت بتثبيتها:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

7
2018-01-18 14:03



كيف يمكنك تمرير المعلمات إلى sudo -u apache whoami؟ - CMCDragonkai
@ CMCDragonkai سيتم تمرير أي معلمات بعد الأمر على طول. يمكنك التفكير في الأمر مثل "sudo [-u apache] [whoami <param1> <param2>]". - Handyman5
أعتقد باستخدام sudo -u ربما ليست فكرة جيدة لتشغيل الأوامر كمستخدم nologin ، لأنه يفضح SUDO_USER في البيئة من هو الحقيقي يستدعي الأمر. ربما أنا فقط أفكر في الأمر - Meow


من خلال توفير البرنامج النصي كوسيطة لتنفيذ / bin / sh:

su -s "/bin/sh /your/script/location" username

4
2018-01-18 14:01





أدركت للتو :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

ربما هناك طريقة أفضل ؟!


2
2018-02-16 07:18





في الواقع ، أفضل طريقة للقيام بذلك هي عبر runuser

انظر صفحة الرجل لمزيد من التفاصيل

يتم استخدام هذه الأداة للتعامل مع الوضع كما قال المطور في بولج له

كلما يتم تشغيل خدمة كجذر ويريد تغيير UID باستخدام shell ، يجب استخدام runuser.

http://danwalsh.livejournal.com/55588.html

لقد قمت بنشر هذه الإجابة في العديد من القصور ، سامحني إذا وجدت هذا مزعجًا


0
2017-12-07 19:19



يُرجى عدم نشر إجابات للرابط فقط لمنع تعفن الروابط. بدلاً من ذلك ، أضف المعلومات الأكثر صلة من الرابط إلى إجابتك أو بدلاً من ذلك ، انشر الرابط كتعليق بدلاً من إجابة. انظر الى هذا serverfault.com/help/how-to-answer مقالة مركز المساعدة لمزيد من المعلومات. - Federico Galli
FedericoGalli يتم إضافة بالفعل أكثر المعلومات ذات الصلة ، وليس هناك حاجة لنسخ ولصق الاستخدام ، توفر الصفحة رجل معلومات كافية - Z-Y00


استخدم sudo -u لتحديد المستخدم. استخدم أيضًا علامة -i لتعيين متغيرات البيئة للمستخدم المستهدف أيضًا.

sudo -i -u user command

-1



هذا يعطي This account is currently not available. - knocte