سؤال تشغيل وظائف مغرور كمستخدمين محرومين


ما هي الطريقة الأساسية للحصول على وظيفة مغردة تغيير المستخدم الخاص به وتشغيل البرنامج النصي كمستخدم بلا حروب؟

من الواضح أنه يمكن للمرء استخدامها su أو sudo، ولكن هذا يبدو هاك (ويمكن أن تولد خطوط سجل لا داعي لها).


139
2018-03-11 14:26


الأصل




الأجوبة:


مع مغرور v1.4 ، setuid و setgid يتم دعمها أصلاً في ملف config.


108
2017-09-09 11:26



انظر كتاب الطبخ للحصول على تفاصيل حول هذا: upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user - Jason Navarrete
بمعنى آخر ، إنه مدعوم في Precise (12.04) وأحدث. - Edward Anderson
وبعبارة أخرى ، غير معتمد في centos 6 - socketpair
للسجل ، initctl --version للعثور على نسختك الحالية من مغرور. - Mahn
مزعج ، توزيعة الأمازون لينكس على AWS يستخدم إصدار RHEL 6 المبتدئ (0.6.5 !!!!) لذلك أي شخص يستخدم ذلك سيكون عليه استخدام الحل "سو". - Asfand Qazi


يسأل على القناة #upstart على freenode ، مسؤول يأخذ على الأمر:

إصدار مستقبلي من Upstart سيكون   الدعم الأصلي لذلك ، ولكن في الوقت الراهن ،   يمكنك استخدام شيء مثل:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

85
2018-01-18 01:41



هذه هي الإجابة الوحيدة التي عملت على Amazon Linue EC2 (جربت كل أشكال sudo و su ، بما في ذلك - command-command ، -c ، nauseum ad) ؛ لم يسمح أي منهم بتوقف العملية بمجرد البدء ؛ شكرا جزيلا على هذا. - Kato
هذا هو بعض سحر قذيفة الهوى ، +1. - Steve Kehlet
هذا لم يعمل بالنسبة لي على CentOS 6 (Upstart 0.6.5). هناك سلسلة من الشوك (4 أعماق أعتقد) بدأت من قبل su هذا يعني أن expect fork وحتى expect daemon لا تصطاد PID النهائي. - Mark Lakata
لقد استخدمت هذا على Amazon Linux (Upstart 0.6.5) لتشغيل عملية جنكينز (التي لا تخفي نفسها ، ولله الحمد) وقد نجحت! اضطررت إلى تغييره قليلاً لإعادة توجيه الإخراج القياسي إلى ملف سجل وتعيين بعض متغيرات البيئة ، ولكنه نجح! تبدو إصداري مثل: exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...] - Asfand Qazi


ماذا عن استخدام start-stop-daemon؟

exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd

من عند كتاب الطبخ مغرور:

الطريقة الموصى بها لأنظمة Debian و Ubuntu هي استخدام الأداة المساعدة المساعدة start-stop-daemon. [...] start-stop-daemon لا يفرض حدود PAM ("وحدة المصادقة القابلة للتوصيل") على العملية التي تبدأ.

ملحوظة: start-stop-daemon غير مدعوم في RHEL.


17
2017-12-23 15:11



يمكنك أيضًا استخدام المجموعة ، إذا كنت بحاجة إليها. مع - shuid daemonuser: daemongroup - Evgeny


هناك عدة طرق للقيام بذلك ، كل ذلك مع دلالات مختلفة قليلاً ، خاصة فيما يتعلق بعضوية المجموعة:

  • setuidgid سوف يضعك في المجموعة التي تحددها.

    • daemontools الأصلية setuidgid سوف يضعك فقط في هذه المجموعة ، لذلك لن تتمكن من الوصول إلى الملفات التي تنتمي إلى مجموعات أخرى أنت عضو فيها.
    • ال setuidgid من daemontools-encore و ال setuidgid من مجموعة أدوات nosh كلاهما له -s (المعروف أيضا باسم --supplementaryالخيار الذي سيضعك في هذه المجموعة ، وكذلك وضعك في كل من المجموعات التكميلية للمستخدم الذي تحدده.
  • عن طريق newgrp بمجرد أن يصبح المستخدم الأقل امتيازًا ، سيضيف مجموعة واحدة إلى المجموعة الخاصة بك ، ولكنه أيضًا ينشئ كلمة فرعية جديدة ، مما يجعل من الصعب استخدام البرامج النصية الداخلية.

  • start-stop-daemon يحافظ على عضوية مجموعتك ، ويفعل أكثر من مجرد setuid / setgid.

  • chpst -u username:group1:group2:group3... commandname سيتيح لك تحديد ما هي عضوية المجموعات التي يجب اعتمادها بالضبط ، ولكن (في أوبونتو) فقط يأتي مع runit الحزمة ، وهو بديل ل upstart.

  • su -c commandname username يلتقط جميع عضويات مجموعات اسم المستخدم ، كما يفعل sudo -u username commandname، لذلك هم على الأرجح الطريق لأقل دهشة.


13
2017-12-24 00:00





استعمال setuidgid من الحزمة daemontools.

وثائق هنا: http://cr.yp.to/daemontools/setuidgid.html


8
2018-03-11 15:50



daemontools ليس شرطا مسبقا من مغرور ، لذلك هذا لا يبدو وكأنه الجواب "الكنسي" - Adam Nelson
وعلاوة على ذلك ، فإن daemontools في الكون (أوبنتو 10.04) ، والمبتدئ هو في المقام الأول. - jtimberman


على سبيل المثال 10.10 أوبونتو على الأمازون EC2 ، كان حظي أفضل مع start-stop-daemon أمر.

أنا أيضا ناضلت مع بعض من مغرور الآخر موشحات. أنا أتصل بطلب python مع محدد virtualenv وبعض المعلمات لبرنامجي المنفذة.

ما يلي هو ما نجح بالنسبة لي.

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

ال PYTHONPATH هو الحصول على بعض الحزم المثبتة من المصدر إلى PYTHON مسار الوحدة النمطية عند تشغيل هذه المهمة المبتدئة. كان علي أن أفعل كل شيء في مسارات مطلقة لأن chdir مقطع لا يبدو للقيام بالعمل.


4
2018-01-06 19:52



لدي أيضا مشاكل مع الحياة الفطرية المتغيرات المستخدمة مع exec start-stop-daemon. - Thomas Bratt


كنت أستخدم CentOS 6 ، ولم أستطع الحصول على الاختراق الموصى به (لـ Upstart 0.6.5) للعمل بالنسبة لي ، ولا الخدعة لأن عدد الشوكات المعنية (4 على ما أظن) لم يتم تتبعه من قبل 'توقع الشوكة "أو" نتوقع الشيطان ".

أنا في النهاية فعلت للتو

chown user:group executable
chmod +s executable

(أي تعيين بت setuid وتغيير الملكية).

قد لا تكون الطريقة الأكثر أمانًا ، ولكن بالنسبة لمشروع بحث وتطوير داخلي ، لا يهم في حالتنا.


3
2017-08-27 21:56



إذا كنت ستفعل chmod 1700 أو على الأقل chmod u+sx,go-x هناك بدلا من مجرد +s، سيكون مؤهلاً كـ "آمن بما فيه الكفاية". :) - dannysauer


هناك احتمال ثالث يعتمد على ما تحاول تحقيقه. قد تكون قادرا على قم بفك عناصر التحكم في الوصول إلى الملفات / الأجهزة المعنية. يمكن أن يسمح هذا للمستخدم غير المحظور بتركيب أو الوصول إلى العناصر التي لا يُسمح لها عادةً بذلك. فقط تأكد من أنك لا تعطي مفاتيح المملكة في هذه العملية.

بامكانك ايضا تغيير مهلة ذاكرة التخزين المؤقت لكلمة sudo. لكنني لا أوصي به إلا إذا كان جهازك آمنًا ماديًا (بمعنى أنك تعتقد أنه من غير المحتمل أن يحاول أحد المارة الحصول على وصول sudo).

هناك سبب وجيه لوجود عدد قليل جدًا من الطرق لتنفيذ الإجراءات المميزة وتنفيذها لا داعي  ضروري تسجيل. القيود الفضفاضة قد تشكل خطرًا أمنيًا على النظام الخاص بك ، وسيعني عدم وجود قطع الأشجار أنه لا توجد طريقة لمعرفة ما حدث عندما تعرضت للاختراق.

إذا كان بحجم ملفات السجل الخاص بك هو مصدر قلق ثم شيء من المحتمل أن يكون خطأ. سودو يولد خط واحد فقط لكل استخدام في ظل الظروف العادية.


0
2018-03-11 17:07