RUNUSER(1)

الاسم
runuser - يُشغّل أمراً بمعرف مستخدم ومجموعة بديل

موجز

runuser [خيارات] -u ‎مستخدم [[--] أمر [‎معامل...]]

runuser [خيارات] [-] [‎مستخدم [‎معامل...]]

الوصف

يمكن استخدام runuser لتشغيل الأوامر بمعرف مستخدم ومجموعة بديل. إذا لم يُعط الخيار -u، يعود runuser إلى دلالات متوافقة مع su وتُنفذ صدفة. الفرق بين الأمرين runuser و su هو أن runuser لا يطلب كلمة مرور (لأنه لا يُنفذ إلا بواسطة المستخدم الجذري root فقط) ويستخدم إعدادات PAM مختلفة. لا يلزم تثبيت الأمر runuser بأذونات set-user-ID.

إذا كانت جلسة PAM غير مطلوبة، فإن الحل الموصى به هو استخدام الأمر setpriv(1).

عند استدعائه دون معاملات، يعمل runuser مبدئياً على تشغيل صدفة تفاعلية كـ root.

للتوافقية مع الإصدارات السابقة، يعمل runuser مبدئياً على عدم تغيير الدليل الحالي وعلى ضبط متغيرات البيئة HOME و SHELL فقط (بالإضافة إلى USER و LOGNAME إذا لم يكن المستخدم المستهدف جذرياً root). يستخدم هذا الإصدار من runuser نظام PAM لإدارة الجلسات.

لاحظ أن runuser في جميع الحالات يستخدم PAM (عبر ‎pam_getenvlist(3)‎) لإجراء التعديل النهائي على البيئة. خيارات سطر الأوامر مثل ‎--login‎ و ‎--preserve-environment‎ تؤثر على البيئة قبل تعديلها بواسطة PAM.

منذ الإصدار 2.38، يعيد runuser ضبط حدود موارد العملية RLIMIT_NICE و RLIMIT_RTPRIO و RLIMIT_FSIZE و RLIMIT_AS و RLIMIT_NOFILE.

الخيارات

-c، --command=أمر
    يمرر الأمر command إلى الصدفة مع الخيار ‎-c‎. ينشئ جلسة جديدة عبر ‎setsid(2)‎. ارجع إلى ‎--session-command‎ للإبقاء على نفس الجلسة.

-f، --fast
    يُمَرر الخيار -f إلى الصدفة، وهو ما قد يكون مفيداً أو غير مفيد، اعتماداً على الصدفة.

-g، --group=مجموعة
    المجموعة الأساسية المراد استخدامها. يُسمح بهذا الخيار للمستخدم الجذري root فقط.

-G، --supp-group=مجموعة
    حدد مجموعة تكميلية. هذا الخيار متاح للمستخدم الجذر (root) فقط. تُستخدم أول مجموعة تكميلية محددة كمجموعة أساسية أيضًا إذا لم يُحدد الخيار --group.

-، -l، --login
    ابدأ الصدفة كصدفة ولوج ببيئة مماثلة للولوج الحقيقي:

        • يمسح جميع متغيرات البيئة باستثناء TERM، و COLORTERM، و NO_COLOR والمتغيرات المحددة بواسطة ‎--whitelist-environment‎

        • يُهيئ متغيرات البيئة HOME، و SHELL، و USER، و LOGNAME، و PATH

        • ينتقل إلى الدليل المنزلي للمستخدم المستهدف

        • يضبط argv[0] للصدفة إلى '-' لجعل الصدفة صدفة ولوج

-m، -p، --preserve-environment
    أبقِ على البيئة كاملة، أي لا تضبط HOME، أو SHELL، أو USER، أو LOGNAME. يُتجاهل هذا الخيار إذا حُدد الخيار --login.

-P، --pty
    ينشئ طرفية زائفة للجلسة. توفر الطرفية المستقلة أماناً أفضل لأن المستخدم لا يتشارك الطرفية مع الجلسة الأصلية. يرجى ملاحظة نصيحة الأمان حول ثغرة TIOCSTI أدناه.

    يمكن أيضاً نقل الجلسة بأكملها إلى الخلفية (على سبيل المثال، ‎runuser --pty -u user — command &‎). إذا تم تفعيل الطرفية الزائفة، فإن runuser يعمل كوكيل بين الجلسات (مزامنة المداخل القياسية والمخارج القياسية).

    صُممت هذه الميزة أساسًا للجلسات التفاعلية. إذا لم يكن الدخل القياسي طرفية، بل كان أنبوبًا مثلاً (مثل echo "date" | runuser --pty -u المستخدم)، فستُعطل علامة ECHO للطرفية الوهمية لتجنب المخرجات الفوضوية.

-s، --shell=صدفة
    شغّل صدفة المحددة بدلاً من المبدئية. تُختار الصدفة التي ستُشغل وفق القواعد التالية، بالترتيب:

        • الصدفة المحددة بـ --shell

        • الصدفة المحددة في متغير البيئة SHELL إذا استخدم الخيار --preserve-environment

        • الصدفة المدرجة في مدخلة passwd للمستخدم المستهدف

        • /bin/sh

        إذا كان للمستخدم المستهدف صدفة مقيدة (أي أنها غير مدرجة في /etc/shells)، فيتجاهَل خيار --shell ومتغيرات بيئة SHELL ما لم يكن المستدعِي هو root.

--session-command=أمر
    نفس عمل ‎-c‎، ولكن لا ينشئ جلسة جديدة. (غير مستحسن.) يرجى ملاحظة نصيحة الأمان حول ثغرة TIOCSTI أدناه.

-T، --no-pty
    لا ينشئ طرفية زائفة، عكس خيار ‎--pty‎ و ‎-P‎. يرجى ملاحظة نصيحة الأمان حول ثغرة TIOCSTI أدناه.

-u، --user=مستخدم
    تشغيل أمر بمعرف المستخدم ومعرف المجموعة الفعليين لاسم المستخدم مستخدم.

-w، --whitelist-environment=قائمة
    عدم تصفير متغيرات البيئة المحددة في القائمة المفصول بينها بفواصل قائمة عند مسح البيئة لخيار --login. تُتجاهل القائمة البيضاء لمتغيرات البيئة HOME و SHELL و USER و LOGNAME و PATH.

-h، --help
    اعرض نص المساعدة ثم اخرج.

-V، --version
    اعرض الإصدار واخرج.

ملفات الضبط

يقرأ runuser ملفي إعداد /etc/default/runuser و /etc/login.defs. عناصر الإعداد التالية ذات صلة بـ runuser:

ENV_PATH (string)
    يُعرف متغير بيئة PATH للمستخدم العادي. القيمة المبدئية هي /usr/local/bin:/bin:/usr/bin.

ENV_ROOTPATH (string), ENV_SUPATH (سلسلة محارف)
    يُعرف متغير بيئة PATH للمستخدم root. تكون الأولوية لـ ENV_SUPATH. القيمة المبدئية هي /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.

ALWAYS_SET_PATH (منطقي)
    إذا ضُبط على yes ولم يُحدد خياري --login و --preserve-environment، يبدأ runuser تهيئة PATH.

قد يختلف متغير البيئة PATH في الأنظمة التي دُمج فيها /bin و /sbin ضمن /usr؛ يتأثر هذا المتغير أيضًا بخيار سطر الأوامر --login وإعدادات نظام PAM (مثل (8)pam_env).

حالة الخروج

يعيد runuser عادة حالة الخروج للأمر الذي نفذه. إذا قُتل الأمر بإشارة، يعيد runuser رقم الإشارة زائد 128.

حالة الخروج التي ولّدها runuser نفسه:

1
    خطأ عام قبل تنفيذ الأمر المطلوب

126
    تعذر تنفيذ الأمر المطلوب

127
    لم يُعثر على الأمر المطلوب

الملفات

/etc/pam.d/runuser
    ملف تهيئة PAM المبدئي

/etc/pam.d/runuser-l
    ملف تهيئة PAM في حال تحديد --login

/etc/default/runuser
    ملف تهيئة logindef الخاص بـ runuser

/etc/login.defs
    ملف تهيئة logindef العام

ملاحظات الأمان

إذا كان runuser يتشارك طرفية مع الجلسة الأصلية، فإنه يكون عرضة لثغرة تصعيد الامتيازات عبر حقن أوامر ioctl من نوع TIOCSTI/TIOCLINUX. توجد طريقتان مدمجتان لمنع ذلك: إما باستخدام runuser مع الخيار ‎-c‎، والذي يبدأ جلسة جديدة عبر ‎setsid(2)‎ بدون طرفية تحكم. أو، إذا كانت حالة الاستخدام تتطلب طرفية تحكم، مثل الجلسة التفاعلية، يمكنك توجيه runuser لاستخدام طرفية زائفة عبر الخيار ‎--pty‎ أو ‎-P‎.

تاريخ

اشتُقّ الأمر runuser هذا من su التابع لـ coreutils، والذي استند إلى تنفيذ بواسطة David MacKenzie، وأمر runuser الخاص بـ Fedora بواسطة Dan Walsh.

انظر أيضاً

setpriv(1)، su(1)، login.defs(5)، shells(5)، pam(8)

التبليغ عن الأخطاء

لتقارير العِلل، استخدم

التوفر

الأمر runuser جزء من حزمة util-linux التي يمكن تنزيلها من