RUN0(1)

الاسم
run0 - رفع الصلاحيات

موجز

run0 [خيارات...] [أمر...]

الوصف

يمكن استخدام run0 للحصول مؤقتًا وتفاعليًا على صلاحيات مرتفعة أو مختلفة. يخدم غرضًا مشابهًا لـ sudo(8)، لكنه يعمل بشكل مختلف في عدة مجالات رئيسية:

    • لا تُورث أي بيانات اعتماد سياق تنفيذ أو أمان من المستدعي إلى الأوامر المستدعاة، حيث تُستدعى من خدمة جديدة ومعزولة تفرعها مدير الخدمة.

    • يتم الاستيثاق عبر polkit[1]، مما يعزل موجه الاستيثاق عن الطرفية (إن أمكن).

    • يُخصص طرفية زائفة مستقلة للأمر المستدعى، لفصل دورة حياته وعزله للأمان.

    • لا تُستخدم وظيفة بتات الوصول للملفات SetUID/SetGID في التنفيذ.

يجب أن يوفر هذا مجتمعًا بديلًا أكثر أمانًا ومتانة لآلية sudo، خاصة في بيئات أنظمة التشغيل حيث دعم SetUID/SetGID غير متوفر (مثلًا بتعيين المتغير NoNewPrivileges= في systemd-system.conf(5)).

أي جلسة تُستدعى عبر run0 ستعمل عبر مكدس PAM "systemd-run0".

لاحظ أن run0 مُنفذ كاستدعاء متعدد بديل لـ systemd-run(1). أي أن run0 رابط رمزي للملف التنفيذي systemd-run، ويتصرف كـ run0 إذا استُدعي عبر الرابط الرمزي، وإلا يتصرف كـ systemd-run.

الخيارات

الخيارات التالية مفهومة:

--unit=
    استخدم اسم الوحدة هذا بدلاً من اسم مولد آلياً.

    أُضيف في الإصدار 256.

--property=
    يضبط خاصية لوحدة الخدمة المنشأة. يأخذ هذا الخيار تعيينًا بنفس تنسيق أمر set-property في systemctl(1).

    أُضيف في الإصدار 256.

--description=
    يوفر وصفًا لوحدة الخدمة المستدعاة. إذا لم يُحدد، سيُستخدم الأمر نفسه كوصف. انظر Description= في systemd.unit(5).

    أُضيف في الإصدار 256.

--slice=
    يجعل وحدة .service الجديدة جزءًا من الشريحة المحددة، بدلًا من user.slice.

    أُضيف في الإصدار 256.

--slice-inherit
    يجعل وحدة .service الجديدة جزءًا من الشريحة التي استُدعي فيها run0 نفسه. يمكن دمج هذا الخيار مع --slice=، وفي هذه الحالة توضع الشريحة المحددة عبر --slice= داخل الشريحة التي استُدعي فيها أمر run0.

    مثال: اعتبر run0 يُستدعى في الشريحة foo.slice، ووسيطة --slice= هي bar. ستوضع الوحدة بعدها تحت foo-bar.slice.

    أُضيف في الإصدار 256.

--user=, -u, --group=, -g
    يتبدل إلى المستخدم/المجموعة المحددة. إذا لم يُحدد، المبدئي هو "root"، ما لم يُستخدم --area= أو --empower (انظر أدناه)، وفي هذه الحالة المبدئي هو المستخدم المستدعي.

    أُضيف في الإصدار 256.

--nice=
    يشغل الجلسة المستدعاة بمستوى nice المحدد.

    أُضيف في الإصدار 256.

--chdir=, -D
    يشغل الجلسة المستدعاة بدليل العمل المحدد. إذا لم يُحدد، المبدئي هو دليل العمل الحالي للعميل إذا كان التبديل للمستخدم root، أو دليل المنزل للمستخدم الهدف خلاف ذلك.

    أُضيف في الإصدار 256.

--via-shell
    يستدعي شاشة الدخول للمستخدم الهدف ويشغل الأمر المحدد (إن وجد) عبره.

    أُضيف في الإصدار 258.

-i
    Shortcut for --via-shell --chdir='~'.

    أُضيف في الإصدار 258.

--setenv=NAME[=VALUE]
    يشغل الجلسة المستدعاة مع تعيين متغير البيئة المحدد. يمكن استخدام هذه الوسيطة أكثر من مرة لتعيين متغيرات متعددة. عند حذف "=" وVALUE، ستُستخدم قيمة المتغير بنفس الاسم في بيئة الاستدعاء.

    أُضيف في الإصدار 256.

--background=COLOR
    يغير لون خلفية الطرفية إلى لون ANSI المحدد طالما استمرت الجلسة. إذا لم يُحدد، ستُصبغ الخلفية بدرجة حمراء عند التشغيل كـ root، ودرجة صفراء عند التشغيل تحت UID آخر، كتذكير بالصلاحيات المتغيرة. يجب أن يكون اللون المحدد لون خلفية ANSI X3.64 SGR، أي سلاسل مثل "40"، "41"، ...، "47"، "48;2;..."، "48;5;...". انظر ANSI Escape Code (Wikipedia)[2] للتفاصيل. اضبط على سلسلة فارغة لتعطيل.

    مثال: "--background=44" لخلفية زرقاء.

    أُضيف في الإصدار 256.

--pty, --pty-late, --pipe
    يطلب تخصيص طرفية زائفة لجلسة run0 (في حالة --pty أو --pty-late)، أو يطلب تمرير واصفات ملفات STDIO للمستدعي مباشرة (في حالة --pipe). --pty-late مشابه جدًا لـ --pty لكنه يبدأ معالجة الطرفية فقط بعد اكتمال بدء الوحدة، تاركًا الإدخال لأي كلمات مرور/وكلاء polkit حتى ذلك الوقت. إذا لم يُحدد أي مفتاح، أو إذا حُدد كل من --pipe وأحد --pty/--pty-late، سيُختار الوضع آليًا: إذا كان الإدخال القياسي والإخراج القياسي وإخراج الخطأ القياسي جميعها متصلة بطرفية، فتُخصص طرفية زائفة (في وضع --pty-late ما لم يُحدد --no-ask-password وفي هذه الحالة يُختار --pty)، وإلا تُمرر واصفات الملفات ذات الصلة مباشرة.

    أُضيف --pty و--pipe في الإصدار v257.

    أُضيف --pty-late في الإصدار v258.

--shell-prompt-prefix=سلسلة
    يضبط سلسلة بادئة موجه الصدفة. يتحكم هذا في النهاية بمتغير البيئة $SHELL_PROMPT_PREFIX للبرنامج المستدعى، والذي يُستورد عادة في موجه الصدفة. مبدئيًا – إذا كانت الرموز التعبيرية مدعومة –، يُظهر رمز بطل خارق (🦸). يمكن أيضًا تغيير هذا المبدئي (أو إيقافه) بتمرير متغير البيئة $SYSTEMD_RUN_SHELL_PROMPT_PREFIX إلى run0، انظر أدناه. اضبط على سلسلة فارغة لتعطيل بادئة موجه الصدفة.

    أُضيف في الإصدار 257.

--lightweight=منطقي
    يتحكم في تفعيل مدير الخدمة لكل مستخدم للمستخدم الهدف. مبدئيًا (غير مضبوط أو مضبوط على auto)، إذا كان المستخدم الهدف هو "root" أو مستخدم نظام، لا يُفعل مدير الخدمة لكل مستخدم كتأثير لاستدعاء run0، وإلا يُفعل.

    يتحكم هذا في النهاية بمتغير البيئة $XDG_SESSION_CLASS الذي يحترمه pam_systemd(8).

    أُضيف في الإصدار 258.

--area=AREA
    تتحكم في "المنطقة" للحساب الهدف لتسجيل الدخول إليها. المناطق هي أدلة منزلية ثانوية داخل الدليل المنزلي الرئيسي للمستخدم الهدف، أي تسجيل الدخول إلى منطقة "foobar" لحساب يترجم إلى تعيين $HOME إلى ~/Areas/foobar عند تسجيل الدخول.

    إذا استُخدم هذا الخيار، يتغير المستخدم المبدئي للانتقال إليه من root إلى المستخدم المتصل (لكن --user= له الأولوية، انظر أعلاه). أو بعبارة أخرى، مجرد تحديد منطقة بدون مستخدم هو آلية لإنشاء جلسة جديدة للمستخدم المتصل، فقط بمنطقة مختلفة.

    هذا يتحكم في النهاية بمتغير البيئة $XDG_AREA الذي يحترمه pam_systemd(8).

    للمزيد من التفاصيل حول مفهوم المنطقة، راجع pam_systemd_home(8).

    أُضيف في الإصدار 258.

--empower
    إذا حُدد، سيرفع run0 صلاحيات المستخدم المختار (باستخدام --user=) أو المستخدم الحالي إذا لم يُحدد مستخدم صراحة. حالياً هذا يعني أننا نعطي العملية المستدعاة جميع الإمكانيات المتاحة ونضيف مجموعة "empower" كمجموعة تكميلية (التي يُسمح فيها بجميع إجراءات polkit مبدئياً)، لكن قد تُمنح صلاحيات أخرى في المستقبل أيضًا عند استخدام هذا الخيار.

    لاحظ أن العمليات الأخرى (غير المميزة) للمستخدم المختار سيكون لها صلاحيات على العملية المستدعاة. فكر في عدم استخدام هذا الخيار في بيئة قد تكون فيها عمليات ضارة تعمل كمستخدم مختار.

    أُضيف في الإصدار 259.

--same-root-dir
    نفذ جلسة run0 في نفس الدليل الجذر الذي نُفذ فيه أمر run0.

    أُضيف في الإصدار 259.

--machine=
    نفذ العملية في حاوية محلية. حدد اسم حاوية للاتصال بها.

    أُضيف في الإصدار 256.

--no-ask-password
    لا تسأل المستخدم عن الاستيثاق للعمليات ذات الامتيازات.

-h، --help
    اطبع نص مساعدة قصير واخرج.

--version
    اطبع سلسلة إصدار قصيرة واخرج.

جميع وسائط سطر الأوامر بعد أول وسيطة غير خيار تصبح جزءاً من سطر أوامر العملية المُطلقة. إذا لم يُحدد سطر أوامر، تُستدعى صدفة تفاعلية. يمكن التحكم في الصدفة المستدعاة عبر --via-shell - عند تحديده تُستخدم صدفة المستخدم الهدف - أو --setenv=SHELL=.... مبدئياً، تُنفذ صدفة المستخدم الأصلي إذا كان التشغيل محلياً، أو /bin/sh عند التشغيل مع --machine=.

لاحظ أنه على عكس sudo، يُنشئ run0 دوماً شلات بدلالات صدفة تسجيل دخول، بغض النظر عن -i.

حالة الخروج

عند النجاح، يُعاد 0. إذا فشل run0 في بدء الجلسة أو فشل الأمر المحدد، يُعاد قيمة إرجاع غير صفرية.

متغيرات البيئة

كما في systemd-run، ترث الجلسة بيئة النظام من مدير الخدمة. بالإضافة إلى ذلك، تُضبط متغيرات البيئة التالية:

$TERM
    مُنسوخ من $TERM للمتصل. يمكن تجاوزه باستخدام --setenv=

    أُضيف في الإصدار 256.

$SUDO_USER
    مضبوط على اسم المستخدم الأصلي.

    أُضيف في الإصدار 256.

$SUDO_UID
    مضبوط على معرف المستخدم UNIX الرقمي للمستخدم الأصلي.

    أُضيف في الإصدار 256.

$SUDO_GID
    مضبوط على معرف المجموعة UNIX الرقمي الرئيسي للجلسة الأصلية.

    أُضيف في الإصدار 256.

$SHELL_PROMPT_PREFIX
    مبدئياً، مضبوط على رمز البطل الخارق (إذا كان مدعوماً)، لكن يمكن تجاوزه بمتغير البيئة $SYSTEMD_RUN_SHELL_PROMPT_PREFIX (انظر أدناه)، أو بمفتاح --shell-prompt-prefix= (انظر أعلاه).

    أُضيف في الإصدار 257.

يمكن تمرير المتغيرات التالية إلى run0:

$SYSTEMD_RUN_SHELL_PROMPT_PREFIX
    إذا ضُبط، يتجاوز بادئة موجه الصدفة المبدئية التي يضبطها run0 للصدفة المستدعاة (رمز البطل الخارق). اضبطه على سلسلة فارغة لتعطيل بادئة موجه الصدفة.

    أُضيف في الإصدار 257.

انظر أيضًا

systemd(1), systemd-run(1), sudo(8), machinectl(1), pam_systemd(8)

ملاحظات

1.  polkit
    https://www.freedesktop.org/wiki/Software/polkit

2.  رمز هروب ANSI (ويكيبيديا)
    https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.