SETPRIV(1) أوامر المستخدم 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 من العمل.

أمثلة

إذا كنت تبحث عن سلوك مشابه لـ su(1)/runuser(1)، أو sudo(8) (دون الخيار -g)، جرب شيئاً مثل:

setpriv --reuid=1000 --regid=1000 --init-groups

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

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

المؤلفين

Andy Lutomirski <luto@amacapital.net>

انظر أيضاً

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

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

لتقارير العِلل، استخدم مُتتبع المشكلات https://github.com/util-linux/util-linux/issues.

التوفر

الأمر setpriv جزء من حزمة util-linux التي يمكن تنزيلها من أرشيف نواة لينكس https://www.kernel.org/pub/linux/utils/util-linux/.

2026-05-18 util-linux 2.42.1