su - قم بتشغيل أمر باستخدام معرّف مستخدم ومجموعة بديلين.
ملخص
su [خيارات] [-] [مستخدم [وسائط...]]
الوصف
su يسمح بتشغيل الأوامر بمعرّف مستخدم ومجموعة بديلين.
عند استدعائه بدون تحديد مستخدم، يقوم su افتراضيًا بتشغيل оболочка تفاعلي كـ root. عند تحديد المستخدم، يمكن توفير وسائط إضافية، وفي هذه الحالة يتم تمريرها إلى оболочка.
من أجل التوافق مع الإصدارات السابقة، يقوم su افتراضيًا بعدم تغيير الدليل الحالي وتعيين متغيرات البيئة HOME و SHELL فقط (بالإضافة إلى USER و LOGNAME إذا لم يكن المستخدم المستهدف هو root). يوصى دائمًا باستخدام خيار --login (بدلاً من اختصاره -) لتجنب الآثار الجانبية الناتجة عن مزج البيئات.
يستخدم هذا الإصدار من su نظام PAM للمصادقة وإدارة الحسابات والجلسات. بعض خيارات التهيئة الموجودة في تطبيقات su الأخرى، مثل دعم مجموعة "wheel"، يجب تهيئتها عبر PAM.
تم تصميم su في الغالب للمستخدمين غير المتميزين، الحل الموصى به للمستخدمين المتميزين
(مثل البرامج النصية التي يتم تشغيلها بواسطة root) هو استخدام الأمر غير المعرّف بالمستخدم 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 أمر
يمرر الأمر إلى оболочка باستخدام الخيار -c.
-f، --fast
يمرر -f إلى оболочка، والتي قد تكون مفيدة أو لا، اعتمادًا على оболочка.
-g، --group مجموعة
حدد المجموعة الأساسية. هذا الخيار متاح لمستخدم root فقط.
-G، --supp-group مجموعة
حدد مجموعة تكميلية. هذا الخيار متاح لمستخدم root فقط. المجموعة التكميلية الأولى المحددة تستخدم أيضًا كمجموعة أساسية إذا لم يتم تحديد الخيار --group.
-، -l، --login
ابدأ оболочка كـ оболочка تسجيل دخول مع بيئة مماثلة لتسجيل دخول حقيقي.
لاحظ أنه في الأنظمة القائمة على systemd، قد يتم تعريف جلسة جديدة كنقطة دخول حقيقية للنظام. ومع ذلك، لا يقوم su بإنشاء جلسة حقيقية (من وجهة نظر PAM) من هذه النقطة. تحتاج إلى استخدام أدوات مثل systemd-run أو machinectl لبدء جلسة حقيقية كاملة.
su يقوم بما يلي:
يمسح جميع متغيرات البيئة باستثناء TERM والمتغيرات المحددة بواسطة
--whitelist-environment
يهيئ متغيرات البيئة HOME و SHELL و USER و LOGNAME و PATH
تغييرات على الدليل الرئيسي للمستخدم المستهدف
يقوم بتعيين argv[0] للصدفة إلى '-' لجعل الصدفة بمثابة صدفة تسجيل دخول
-m, -p, --preserve-environment
حفظ البيئة بأكملها، أي عدم تعيين HOME أو SHELL أو USER أو LOGNAME. يتم تجاهل هذا الخيار إذا تم تحديد الخيار --login.
-P, --pty
إنشاء طرفية افتراضية للجلسة. توفر الطرفية المستقلة أمانًا أفضل حيث لا يشارك المستخدم طرفية مع الجلسة الأصلية. يمكن استخدام هذا لتجنب هجمات حقن الطرفية باستخدام الأمر TIOCSTI ioctl وهجمات أمنية أخرى على واصفات ملفات الطرفية. يمكن أيضًا نقل الجلسة بأكملها إلى الخلفية (على سبيل المثال، su --pty - user -c application &). إذا تم تمكين الطرفية الافتراضية، فإن su يعمل كوسيط بين الجلسات (يقوم بمزامنة الإدخال القياسي والإخراج القياسي).
تم تصميم هذه الميزة في الغالب للجلسات التفاعلية. إذا لم يكن الإدخال القياسي عبارة عن طرفية، ولكن على سبيل المثال عبارة عن قناة (على سبيل المثال، echo "date" | su --pty)، فسيتم تعطيل علامة ECHO للطرفية الافتراضية لتجنب الإخراج غير المرتب.
-s, --shell shell
تشغيل الصدفة المحددة بدلاً من الصدفة الافتراضية. إذا كان لدى المستخدم المستهدف صدفة مقيدة (أي، ليست مدرجة في /etc/shells)، فسيتم تجاهل خيار --shell ومتغير بيئة SHELL ما لم يكن المستخدم المتصل هو المستخدم الجذر.
يتم تحديد الصدفة المراد تشغيلها وفقًا للقواعد التالية، بالترتيب:
الصدفة المحددة باستخدام --shell
الصدفة المحددة في متغير البيئة SHELL، إذا تم استخدام خيار --preserve-environment
الصدفة المدرجة في إدخال كلمة مرور المستخدم المستهدف
/bin/sh
--session-command=command
نفس وظيفة -c، ولكن لا يتم إنشاء جلسة جديدة. (غير مستحسن).
-T, --no-pty
لا تقم بإنشاء طرفية افتراضية، وهو عكس --pty و -P. لاحظ أن التشغيل بدون طرفية افتراضية يفتح خطر التصعيد في الامتيازات من خلال حقن الأوامر باستخدام TIOCSTI/TIOCLINUX ioctl.
-w, --whitelist-environment list
لا تقم بإعادة تعيين متغيرات البيئة المحددة في القائمة المفصولة بفواصل عند مسح البيئة من أجل --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 (رقم)
التأخير بالثواني في حالة فشل المصادقة. يجب أن يكون الرقم عددًا صحيحًا غير سالب.
ENV_PATH (سلسلة)
يحدد متغير بيئة PATH لمستخدم عادي. القيمة الافتراضية هي /usr/local/bin:/bin:/usr/bin.
ENV_ROOTPATH (سلسلة)، ENV_SUPATH (سلسلة)
يحدد متغير بيئة PATH للمستخدم الجذر. ENV_SUPATH له الأسبقية. القيمة الافتراضية هي /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.
ALWAYS_SET_PATH (منطقي)
إذا تم تعيينه على "نعم" ولم يتم تحديد الخيارات --login و --preserve-environment، يقوم الأمر su بتهيئة متغير PATH.
قد يكون متغير البيئة PATH مختلفًا في الأنظمة التي تم فيها دمج /bin و /sbin في /usr. يتأثر هذا المتغير أيضًا بخيار سطر الأوامر --login وإعداد نظام PAM (على سبيل المثال، pam_env(8)).
حالة الخروج
عادةً ما يُرجع الأمر 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 دائمًا محاولات تسجيل الدخول الفاشلة في ملف btmp، ولكنه لا يكتب في ملف lastlog على الإطلاق. يمكن استخدام هذا الحل للتحكم في سلوك الأمر su من خلال تكوين PAM. إذا كنت تريد استخدام وحدة pam_lastlog(8) لطباعة رسالة تحذير حول محاولات تسجيل الدخول الفاشلة، فيجب تكوين pam_lastlog(8) لتحديث ملف lastlog أيضًا. على سبيل المثال عن طريق:
session required pam_lastlog.so nowtmp
التاريخ
تم اشتقاق أمر su هذا من أمر su الخاص بـ coreutils، والذي استند إلى تطبيق من تأليف ديفيد ماكنزي. تم إعادة هيكلة إصدار util-linux بواسطة كاريل زاك.
انظر أيضًا
setpriv(1)، login.defs(5)، shells(5)، pam(8)، runuser(1)
الإبلاغ عن الأخطاء
للإبلاغ عن الأخطاء، استخدم نظام تتبع المشكلات [https://github.com/util-linux/util-linux/issues].
التوفر
الأمر su هو جزء من حزمة util-linux والتي يمكن تنزيلها من أرشيف نواة Linux [https://www.kernel.org/pub/linux/utils/util-linux/].