SU(1)

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

موجز

su [خيارات] [-] [user|UID [argument...]]

الوصف

يسمح su بتشغيل الأوامر بمعرّف مستخدم ومعرّف مجموعة بديلين.

عند استدعائه دون تحديد مستخدم، يشغل su صدفة تفاعلية كـ root مبدئياً. وعند تحديد المستخدم، يمكن توفير معطىات إضافية، وفي هذه الحالة تُمرّر إلى الصدفة.

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

يستخدم هذا الإصدار من su نظام PAM للاستيثاق وإدارة الحسابات والجلسات. وبعض خيارات التهيئة الموجودة في عمليات تنفيذ su الأخرى، مثل دعم مجموعة wheel، يجب تهيئتها عبر PAM.

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

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

منذ الإصدار 2.38، يعيد su ضبط حدود موارد العملية 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
    ابدأ الصدفة كصدفة ولوج ببيئة مشابهة للولوج الحقيقي.

    لاحظ أنه في الأنظمة المعتمدة على systemd(1)، قد تُعرف الجلسة الجديدة كنقطة دخول حقيقية للنظام. ومع ذلك، فإن su لا ينشئ جلسة حقيقية (عبر PAM) من وجهة النظر هذه. ستحتاج لاستخدام أدوات مثل ‎systemd-run(1)‎ أو ‎machinectl(1)‎ لبدء جلسة حقيقية كاملة.

    يقوم su بـ:

        • clear all the environment variables except TERM, COLORTERM, NO_COLOR and variables specified by --whitelist-environment

        • initialize the environment variables HOME, SHELL, USER, LOGNAME, and PATH

        • change to the target user’s home directory

        • set argv[0] of the shell to '-' in order to make the shell a login shell

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

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

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

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

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

    تُختار الصدفة المراد تشغيلها وفقاً للقواعد التالية، بالترتيب:

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

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

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

        • /bin/sh

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

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

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

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

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

إشارات

عند تلقي إما SIGINT أو SIGQUIT أو SIGTERM، ينهي su تابعه وبعد ذلك ينهي نفسه بالإشارة المتلقاة. يُنهى التابع بواسطة SIGTERM، وبعد محاولة غير ناجحة وتأخير مدته ثانيتان يُقتل التابع بواسطة SIGKILL.

ملفات الضبط

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

FAIL_DELAY (number)
    التأخير بالثواني في حالة فشل الاستيثاق. يجب أن يكون الرقم صحيحاً غير سالب.

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، فإن su يجهز PATH.

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

حالة الخروج

يعيد su عادةً حالة الخروج للأمر الذي نفذه. إذا قُتل الأمر بواسطة إشارة، يعيد su رقم الإشارة + 128.

حالة الخروج المولّدة بواسطة su نفسه:

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

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

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

الملفات

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

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

/etc/default/su
    ملف إعداد logindef الخاص بالأمر

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

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

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

لأسباب أمنية، يسجل su دائماً محاولات الولوج الفاشلة في ملف btmp، لكنه لا يكتب في ملف lastlog على الإطلاق. يمكن استخدام هذا الحل للتحكم في سلوك su عبر إعداد PAM. إذا كنت تريد استخدام ملحق pam_lastlog(8) لطباعة رسالة تحذير حول محاولات الولوج الفاشلة، فيجب ضبط pam_lastlog(8) لتحديث ملف lastlog أيضاً. على سبيل المثال عبر:

    session required pam_lastlog.so nowtmp

تاريخ

اشتق أمر su هذا من su الخاص بـ coreutils، والذي اعتمد على تنفيذ بواسطة David MacKenzie. نُقّحت نسخة util-linux بواسطة Karel Zak.

انظر أيضاً

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

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

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

التوفر

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