SETPRIV(1)

الاسم
setpriv - شغّل برنامجاً بإعدادات امتيازات لينكس مختلفة

موجز

setpriv [خيارات] برنامج وسائط]

الوصف

يضبط أو يستعلم عن إعدادات امتيازات لينكس المتنوعة التي تُورّث عبر execve(2).

بالمقارنة مع su(1) و runuser(1)، لا يستخدم setpriv الاستيثاق عبر PAM، ولا يطلب كلمة سر. هو غلاف بسيط، ليس من فئة set-user-ID، حول execve(2)، ويمكن استخدامه للتخلي عن الامتيازات بنفس طريقة setuidgid(8) من daemontools، أو chpst(8) من runit، أو أدوات مماثلة تُشحن مع مديري الخدمات الآخرين.

الخيارات

--clear-groups
    امسح المجموعات التكميلية.

-d، --dump
    تفريغ حالة الامتيازات الحالية. يمكن تحديد هذا الخيار أكثر من مرة لإظهار معلومات إضافية، أغلبها غير مفيد. لا يتوافق مع جميع الخيارات الأخرى.

--groups group...
    اضبط المجموعات التكميلية. المعطى هو قائمة مفصولة بفاصلة من معرفات GID أو الأسماء.

--inh-caps (+|-)cap..., --ambient-caps (+|-)cap..., --bounding-set (+|-)cap...
    اضبط الإمكانيات المورّثة، أو الإمكانيات المحيطة، أو مجموعة حدود الإمكانيات. انظر capabilities(7). المعطى هو قائمة مفصولة بفاصلة من مدخلات +cap و -cap، والتي تضيف مدخلاً أو تزيله على التوالي. يمكن لـ cap أن يكون اسماً مقروءاً للبشر كما هو موضح في capabilities(7) دون البادئة cap_ أو بصيغة cap_N، حيث رقم هو فهرس الإمكانية الداخلي المستخدم في لينكس. يمكن استخدام +all و -all لإضافة أو إزالة جميع الإمكانيات.

    تبدأ مجموعة الإمكانيات بالمجموعة المورّثة الحالية لـ --inh-caps، والمجموعة المحيطة الحالية لـ --ambient-caps، ومجموعة الحدود الحالية لـ --bounding-set.

    لاحظ القيود التالية (المفصلة في capabilities(7)) بخصوص تعديل مجموعات الإمكانيات هذه:

        • لا يمكن إضافة إمكانية إلى المجموعة المورّثة إلا إذا كانت موجودة حالياً في مجموعة الحدود.

        • لا يمكن إضافة إمكانية إلى المجموعة المحيطة إلا إذا كانت موجودة حالياً في كل من مجموعتي الإمكانيات المسموح بها والمورّثة.

        • بغض النظر عن الصيغة التي يوفرها setpriv، فإن النواة لا تسمح بإضافة إمكانيات إلى مجموعة الحدود.

    إذا حذفت قدرة من مجموعة الحدود دون حذفها أيضاً من المجموعة الموروثة، فمن المرجح أن يحدث ارتباك. لا تفعل ذلك.

--keep-groups
    احفظ المجموعات الإضافية. مفيد فقط بالتزامن مع --rgid، أو --egid، أو --regid.

--init-groups
    بدء المجموعات التكميلية باستخدام initgroups3. مفيد فقط بالاقتران مع --ruid أو --reuid.

--list-caps
    اسرد جميع القدرات المعروفة. يجب تحديد هذا الخيار بمفرده.

--nnp, --no-new-privs
    ضبط بت no_new_privs. عند ضبط هذا البت، لن يمنح execve(2) امتيازات جديدة. على سبيل المثال، ستُعطل بتات set-user-ID و set-group-ID بالإضافة إلى قدرات الملفات. (تنفيذ الملفات الثنائية مع ضبط هذه البتات سيظل يعمل، لكنها لن تكتسب امتيازات. بعض أنظمة LSM، وخاصة AppArmor، قد تؤدي إلى فشل تنفيذ برامج معينة.) يُورث هذا البت بواسطة العمليات التابعة ولا يمكن إلغاء ضبطه. انظر prctl(2) و Documentation/prctl/no_new_privs.txt في مصدر نواة لينكس.

    بت no_new_privs متاح منذ لينكس 3.5.

--rgid gid، --egid gid، --regid gid
    اضبط معرفات المجموعات (GIDs) الحقيقية أو الفعالة أو كلتيهما. يمكن إعطاء المعامل gid كاسم نصي للمجموعة.

    للأمان، يجب تحديد أحد الخيارات --clear-groups أو --groups أو --keep-groups أو --init-groups إذا ضُبط أي معرف مجموعة (gid) أساسي.

--ruid uid، --euid uid، --reuid uid
    اضبط معرفات المستخدمين (UIDs) الحقيقية أو الفعالة أو كلتيهما. يمكن إعطاء المعامل uid كاسم نصي للولوج.

    إن ضبط uid أو gid لا يغير القدرات، رغم أن استدعاء exec في النهاية قد يغيرها. هذا يعني أنك إذا كنت مستخدمًا جذرًا (root)، فستحتاج على الأرجح للقيام بشيء مثل:

    setpriv --reuid=1000 --regid=1000 --inh-caps=-all

--securebits (+|-)securebit...
    اضبط بتات الأمان (securebits) أو امسحها. المعامل عبارة عن قائمة مفصولة بفاصلة. بتات الأمان الصالحة هي noroot و noroot_locked و no_setuid_fixup و no_setuid_fixup_locked و keep_caps_locked. يُمسح keep_caps بواسطة execve(2) ولذلك لا يُسمح به.

--pdeathsig keep|clear|<إشارة>
    أبقِ على إشارة موت العملية الأب أو امسحها أو اضبطها. تقوم بعض وحدات أمان لينكس (LSMs)، وأبرزها SELinux و AppArmor، بمسح الإشارة عندما تتغير بيانات استيثاق العملية. سيؤدي استخدام --pdeathsig keep إلى استعادة إشارة موت العملية الأب بعد تغيير بيانات الاستيثاق لمعالجة تلك الحالة.

--ptracer معرّف-العملية|any|none
    عندما يكون وضع ptrace المقيد الخاص بـ Yama فعالًا (أي عندما يُضبط /proc/sys/kernel/yama/ptrace_scope على 1)، اسمح بتتبع العملية عبر ptrace(2) بواسطة العملية ذات معرف PID المحدد، أو أي عملية، أو لا عملية. انظر PR_SET_PTRACER(2const). (لاحظ أن هذا لا يورث للعمليات الابنة، رغم أنه يُحفظ عبر execve(2).) ليس لهذا الخيار أي تأثير عندما لا يكون Yama مفعلًا أو يكون في وضع آخر غير ptrace المقيد.

--selinux-label لصيقة
    اطلب انتقال SELinux محددًا (باستخدام انتقال عند التنفيذ exec، وليس dyntrans). سيفشل هذا ويؤدي إلى إنهاء setpriv إذا لم يكن SELinux قيد الاستخدام، وقد يُتجاهل الانتقال أو يتسبب في فشل execve(2) وفقًا لتقدير SELinux. (على وجه الخصوص، من غير المرجح أن يعمل هذا بالتزامن مع no_new_privs). هذا مشابه لـ runcon(1).

--apparmor-profile تشكيلة
    اطلب تشكيلة AppArmor محددة (باستخدام انتقال عند التنفيذ exec). سيفشل هذا ويؤدي إلى إنهاء setpriv إذا لم يكن AppArmor قيد الاستخدام، وقد يُتجاهل الانتقال أو يتسبب في فشل execve(2) وفقًا لتقدير AppArmor.

--landlock-access وصول
    فعل قيود landlock لمجموعة محددة من عمليات وصول النظام. للسماح لمجموعات فرعية محددة من الوصول، استخدم --landlock-rule.

    احظر كل وصول لنظام الملفات:

    setpriv --landlock-access fs

    احظر كل عمليات حذف الملفات وإنشاء الأدلة:

    setpriv --landlock-access fs:remove-file,make-dir

    للحصول على مجموعة كاملة من فئات الوصول المتاحة، استخدم setpriv --help.

    العنصر النائب العام "fs" عرضة للتغيير وقد يمتد في الإصدارات المستقبلية لدعم أنواع وصول جديدة.

--landlock-rule دور
    اسمح بوصول واحد محدد من الفئات المحظورة بواسطة --landlock-access.

    الصيغة كالتالي:

    --landlock-rule $ruletype:$access:$rulearg

    على سبيل المثال، امنح وصول قراءة الملفات لكل شيء تحت /boot:

    --landlock-rule path-beneath:read-file:/boot

--seccomp-filter ملف
    حمّل كود مرشح BPF seccomp الخام من ملف.

    يمكن إنشاء المرشحات على سبيل المثال باستخدام enosys.

--reset-env

        • يمسح جميع متغيرات البيئة باستثناء متغير البيئة TERM

        • يهيئ متغيرات البيئة HOME، و SHELL، و USER، و LOGNAME وفقاً لمدخلة passwd الخاصة بالمستخدم

        • متغير البيئة SHELL يكون /bin/sh مبدئياً إذا لم يُعطَ أي منها في مدخلة passwd الخاصة بالمستخدم.

        • يعيد ضبط متغير البيئة PATH وفقاً للإعداد في /etc/login.defs (المتغيرات ENV_PATH، أو ENV_SUPATH، أو ENV_ROOTPATH)، أو يكون /usr/local/bin:/bin:/usr/bin مبدئياً للمستخدم العادي و /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin للمستخدم الخارق.

        قد يختلف متغير البيئة PATH في الحواسيب التي دُمج فيها /bin و /sbin داخل /usr.

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

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

ملاحظات

إذا فشل تطبيق أي خيار محدد، فلن يُشغل برنامج وسيعود setpriv بحالة خروج 127.

كن حذرًا مع هذه الأداة — فقد يكون لها تبعات أمنية غير متوقعة. على سبيل المثال، قد يؤدي ضبط no_new_privs ثم تنفيذ برنامج مقيد بواسطة SELinux (كما تفعل هذه الأداة) إلى منع قيود SELinux من العمل.

أمثلة

Note that setpriv is not a 1:1 replacement for su(1), runuser(1), or sudo(8). Unlike those tools, setpriv does not use PAM, does not prompt for a password, and does not perform session or accounting setup. The examples below provide a starting point for common privilege-dropping scenarios.

If you want to switch UIDs/GIDs similarly to runuser(1) (without --login), try:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all --init-groups

To also reset the environment (as sudo(8) does by default), add --reset-env:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all --init-groups --reset-env

For a more restrictive setup that also limits the bounding set and prevents gaining new privileges (more restrictive than runuser or sudo):

setpriv --reuid=1000 --regid=1000 --init-groups --inh-caps=-all --bounding-set=-all --no-new-privs --reset-env

إذا كنت تريد محاكاة setuid(8) الخاصة بـ daemontools، جرب:

setpriv --reuid=1000 --regid=1000 --clear-groups

المؤلفين

انظر أيضاً

runuser(1)، su(1)، prctl(2)، capabilities(7)، landlock(7)

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

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

التوفر

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