.\" -*- coding: UTF-8 -*- .\" Copyright 2011, Eric W. Biederman .\" Copyright 2011-2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-only .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH setns 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم setns \- إعادة ربط خيط مع نطاق .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#define _GNU_SOURCE\fP /* انظر feature_test_macros(7) */ \fB#include \fP .P \fBint setns(int \fP\fIfd\fP\fB, int \fP\fInstype\fP\fB);\fP .fi .SH الوصف استدعاء النظام \fBsetns\fP() يسمح للخيط المستدعي بالانتقال إلى نطاقات مختلفة. الوسيط \fIfd\fP هو أحد التالي: .IP \[bu] 3 واصف ملف يشير إلى أحد الروابط السحرية في دليل \fI/proc/\fPpid\fI/ns/\fP (أو ربط وصل لمثل هذا الرابط); .IP \[bu] واصف ملف PID (انظر \fBpidfd_open\fP(2)). .P .\" يُفسر الوسيط \fInstype\fP بشكل مختلف في كل حالة. .SS "fd يشير إلى رابط \f[I]/proc/\fBpid\f[I]/ns/\fB" إذا كان \fIfd\fP يشير إلى رابط \fI/proc/\fPpid\fI/ns/\fP، فإن \fBsetns\fP() يعيد ربط الخيط المستدعي بالنطاق المرتبط بذلك الرابط، مع مراعاة أي قيود يفرضها الوسيط \fInstype\fP. في هذا الاستخدام، كل استدعاء لـ \fBsetns\fP() يغير عضوية نطاق واحدة فقط من عضوية المستدعي. .P يحدد الوسيط \fInstype\fP نوع النطاق الذي يمكن إعادة ربط الخيط المستدعي به. يمكن أن يأخذ هذا الوسيط \fIقيمة\fP واحدة من التالي: .TP \fB0\fP السماح بالانضمام إلى أي نوع من النطاقات. .TP \fBCLONE_NEWCGROUP\fP (منذ لينكس 4.6) يجب أن يشير \fIfd\fP إلى نطاق cgroup. .TP \fBCLONE_NEWIPC\fP (منذ Linux 3.0) يجب أن يشير \fIfd\fP إلى نطاق IPC. .TP \fBCLONE_NEWNET\fP (منذ Linux 3.0) يجب أن يشير \fIfd\fP إلى نطاق شبكة. .TP \fBCLONE_NEWNS\fP (منذ Linux 3.8) يجب أن يشير \fIfd\fP إلى نطاق وصل. .TP \fBCLONE_NEWPID\fP (منذ لينكس 3.8) يجب أن يشير \fIfd\fP إلى نطاق PID سليل. .TP \fBCLONE_NEWTIME\fP (منذ Linux 5.8) .\" commit 76c12881a38aaa83e1eb4ce2fada36c3a732bad4 يجب أن يشير \fIfd\fP إلى نطاق زمن. .TP \fBCLONE_NEWUSER\fP (منذ لينكس 3.8) يجب أن يشير \fIfd\fP إلى نطاق مستخدم. .TP \fBCLONE_NEWUTS\fP (منذ Linux 3.0) يجب أن يشير \fIfd\fP إلى نطاق UTS. .P .\" يكفي تحديد \fInstype\fP كـ 0 إذا كان المستدعي يعرف (أو لا يهتم) بنوع النطاق الذي يشير إليه \fIfd\fP. تحديد قيمة غير صفرية لـ \fInstype\fP مفيد إذا كان المستدعي لا يعرف نوع النطاق الذي يشير إليه \fIfd\fP ويريد التأكد من أن النطاق من نوع معين. (قد لا يعرف المستدعي نوع النطاق الذي يشير إليه \fIfd\fP إذا تم فتح واصف الملف بواسطة عملية أخرى و، على سبيل المثال، تم تمريره إلى المستدعي عبر مقبس نطاق UNIX.) .SS "fd هو واصف ملف PID" منذ Linux 5.8، يمكن أن يشير \fIfd\fP إلى واصف ملف PID تم الحصول عليه من \fBpidfd_open\fP(2) أو \fBclone\fP(2). في هذا الاستخدام، ينقل \fBsetns\fP() الخيط المستدعي بشكل ذري إلى واحد أو أكثر من نفس النطاقات مثل الخيط المشار إليه بواسطة \fIfd\fP. .P الوسيط \fInstype\fP هو قناع بت يتم تحديده عن طريق الجمع بـ OR لـ \fIواحد أو أكثر\fP من ثوابت النطاق \fBCLONE_NEW*\fP المذكورة أعلاه. يتم نقل المستدعي إلى كل نطاق من نطاقات الخيط الهدف المحددة في \fInstype\fP؛ تبقى عضويات المستدعي في النطاقات المتبقية دون تغيير. .P على سبيل المثال، الكود التالي سينقل المستدعي إلى نفس نطاقات المستخدم والشبكة وUTS مثل PID 1234، لكنه سيترك عضويات المستدعي الأخرى في النطاقات دون تغيير: .P .in +4n .EX int fd = pidfd_open(1234, 0); setns(fd, CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWUTS); .EE .in .\" .SS "تفاصيل لأنواع مساحات الأسماء المحددة" لاحظ التفاصيل والقيود التالية عند إعادة الارتباط بأنواع مساحات أسماء محددة: .TP مساحات أسماء المستخدم .\" See kernel/user_namespace.c:userns_install() [3.8 source] يجب أن تمتلك عملية تعيد ربط نفسها بمساحة اسم مستخدم القدرة \fBCAP_SYS_ADMIN\fP في مساحة اسم المستخدم الهدف. (هذا يعني بالضرورة أنه من الممكن فقط الانضمام إلى مساحة اسم مستخدم سليلة.) عند الانضمام بنجاح إلى مساحة اسم مستخدم، تُمنح العملية جميع القدرات في تلك المساحة، بغض النظر عن معرفات المستخدم والمجموعة الخاصة بها. .IP لا يجوز لعملية متعددة الخيوط تغيير مساحة اسم المستخدم باستخدام \fBsetns\fP(). .IP لا يُسمح باستخدام \fBsetns\fP() لإعادة الدخول إلى مساحة اسم المستخدم الحالية للمتصل. هذا يمنع المتصل الذي أسقط القدرات من استعادة تلك القدرات عبر استدعاء \fBsetns\fP(). .IP .\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 .\" https://lwn.net/Articles/543273/ لأسباب أمنية، لا يمكن لعملية الانضمام إلى مساحة اسم مستخدم جديدة إذا كانت تشارك سمات متعلقة بنظام الملفات (السمات التي يتحكم في مشاركتها علم \fBclone\fP(2) \fBCLONE_FS\fP) مع عملية أخرى. .IP لمزيد من التفاصيل حول مساحات أسماء المستخدم، انظر \fBuser_namespaces\fP(7). .TP فضاءات أسماء الوصل يتطلب تغيير مساحة اسم التثبيت أن يمتلك المتصل كلاً من القدرتين \fBCAP_SYS_CHROOT\fP و \fBCAP_SYS_ADMIN\fP في مساحة اسم المستخدم الخاصة به و \fBCAP_SYS_ADMIN\fP في مساحة اسم المستخدم التي تمتلك مساحة اسم التثبيت الهدف. .IP .\" Above check is in fs/namespace.c:mntns_install() [3.8 source] لا يمكن لعملية الانضمام إلى مساحة اسم تثبيت جديدة إذا كانت تشارك سمات متعلقة بنظام الملفات (السمات التي يتحكم في مشاركتها علم \fBclone\fP(2) \fBCLONE_FS\fP) مع عملية أخرى. .IP انظر \fBuser_namespaces\fP(7) للحصول على تفاصيل حول تفاعل مساحات أسماء المستخدم ومساحات أسماء التثبيت. .TP مساحات أسماء PID من أجل إعادة ربط نفسها بمساحة اسم PID جديدة، يجب أن يمتلك المتصل القدرة \fBCAP_SYS_ADMIN\fP في كل من مساحة اسم المستخدم الخاصة به وفي مساحة اسم المستخدم التي تمتلك مساحة اسم PID الهدف. .IP إعادة ربط مساحة اسم PID يختلف نوعًا ما عن أنواع مساحات الأسماء الأخرى. إعادة ربط خيط الاستدعاء بمساحة اسم PID يغير فقط مساحة اسم PID التي ستوضع فيها العمليات التابعة التي تم إنشاؤها لاحقًا للمتصل؛ لا يغير مساحة اسم PID للمتصل نفسه. .IP يُسمح بإعادة الارتباط بمساحة اسم PID فقط إذا كانت مساحة اسم PID الهدف سليلة (تابعة، حفيدة، إلخ) لمساحة اسم PID الحالية للمتصل، أو مطابقة لها. .IP لمزيد من التفاصيل حول مساحات أسماء PID، انظر \fBpid_namespaces\fP(7). .TP مساحات أسماء Cgroup من أجل إعادة ربط نفسها بمساحة اسم cgroup جديدة، يجب أن يمتلك المتصل القدرة \fBCAP_SYS_ADMIN\fP في كل من مساحة اسم المستخدم الخاصة به وفي مساحة اسم المستخدم التي تمتلك مساحة اسم cgroup الهدف. .IP استخدام \fBsetns\fP() لتغيير مساحة اسم cgroup للمتصل لا يغير عضويات cgroup الخاصة بالمتصل. .TP مساحات أسماء الوقت من أجل إعادة ربط نفسها بمساحة اسم وقت جديدة، يجب أن يمتلك المتصل القدرة \fBCAP_SYS_ADMIN\fP في كل من مساحة اسم المستخدم الخاصة به وفي مساحة اسم المستخدم التي تمتلك مساحة الاسم الهدف. .IP لا يجوز لعملية متعددة الخيوط تغيير مساحة اسم الوقت باستخدام \fBsetns\fP(). .TP مساحات أسماء الشبكة و IPC و UTS من أجل إعادة ربط نفسها بمساحة اسم شبكة أو IPC أو وقت أو UTS جديدة، يجب أن يمتلك المتصل القدرة \fBCAP_SYS_ADMIN\fP في كل من مساحة اسم المستخدم الخاصة به وفي مساحة اسم المستخدم التي تمتلك مساحة الاسم الهدف. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fBsetns\fP() 0. عند الفشل، تُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEBADF\fP \fIfd\fP ليس واصف ملف صالح. .TP \fBEINVAL\fP يشير \fIfd\fP إلى مساحة اسم لا يتطابق نوعها مع النوع المحدد في \fInstype\fP. .TP \fBEINVAL\fP توجد مشكلة في إعادة ربط الخيط بمساحة الاسم المحددة. .TP .\" See kernel/pid_namespace.c::pidns_install() [kernel 3.18 sources] \fBEINVAL\fP حاول المتصل الانضمام إلى مساحة اسم PID سلف (أصل، جد، وهكذا). .TP \fBEINVAL\fP حاول المتصل الانضمام إلى مساحة اسم المستخدم التي هو بالفعل عضو فيها. .TP \fBEINVAL\fP .\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 يشارك المتصل حالة نظام الملفات (\fBCLONE_FS\fP) (على وجه الخصوص، الدليل الجذر) مع عمليات أخرى وحاول الانضمام إلى مساحة اسم مستخدم جديدة. .TP \fBEINVAL\fP .\" See kernel/user_namespace.c::userns_install() [kernel 3.15 sources] المستدعي متعدد الخيوط وحاول الانضمام إلى فضاء مستخدم جديد. .TP \fBEINVAL\fP \fIfd\fP هو واصف ملف PID و \fInstype\fP غير صالح (مثلاً، قيمته 0). .TP \fBENOMEM\fP لا يمكن تخصيص ذاكرة كافية لتغيير فضاء الأسماء المحدد. .TP \fBEPERM\fP لم تمتلك الخيط المستدعي الصلاحية المطلوبة لهذه العملية. .TP \fBESRCH\fP \fIfd\fP هو واصف ملف PID ولكن العملية التي يشير إليها لم تعد موجودة (أي، أنها أنهيت وانتظر عليها). .SH المعايير لينكس. .SH الإصدارات لينكس 3.0، glibc 2.14. .SH ملاحظات لمزيد من المعلومات حول الروابط السحرية \fI/proc/\fPpid\fI/ns/\fP، انظر \fBnamespaces\fP(7). .P لا يمكن تغيير جميع السمات التي يمكن مشاركتها عند إنشاء خيط جديد باستخدام \fBclone\fP(2) باستخدام \fBsetns\fP(). .SH أمثلة البرنامج أدناه يأخذ وسيطين أو أكثر. تحدد الوسيطة الأولى مسار ملف فضاء أسماء في دليل \fI/proc/\fPpid\fI/ns/\fP موجود. تحدد الوسائط المتبقية أمراً ووسائطه. يفتح البرنامج ملف فضاء الأسماء، وينضم إلى ذلك الفضاء باستخدام \fBsetns\fP()، وينفذ الأمر المحدد داخل ذلك الفضاء. .P توضح جلسة الصدفة التالية استخدام هذا البرنامج (المُجمّع كملف ثنائي باسم \fIns_exec\fP) بالتزامن مع برنامج المثال \fBCLONE_NEWUTS\fP في صفحة الدليل \fBclone\fP(2) (المُجمّع كملف ثنائي باسم \fInewuts\fP). .P نبدأ بتنفيذ البرنامج النموذجي الوارد في \fBclone\fP(2) في الخلفية. يقوم هذا البرنامج بإنشاء عملية فرعية في مساحة أسماء UTS منفصلة. تقوم العملية الفرعية بتغيير اسم المضيف في مساحة أسمائها، ثم تعرض كلتا العمليتين أسماء المضيفين في مساحات أسماء UTS الخاصة بهما، بحيث يمكننا ملاحظة اختلافهما. .P .in +4n .EX $\fB su\fP; # Need privilege for namespace operations Password: #\fB ./newuts bizarro &\fP [1] 3549 clone() returned 3550 uts.nodename in child: bizarro uts.nodename in parent: antero #\fB uname \-n\fP; # Verify hostname in the shell antero .EE .in .P ثم نشغل البرنامج الموضح أدناه، مستخدمين إياه لتنفيذ صدفة. داخل تلك الصدفة، نتحقق من أن اسم المضيف هو الذي حدده الطفل الذي أنشأه البرنامج الأول: .P .in +4n .EX #\fB ./ns_exec /proc/3550/ns/uts /bin/bash\fP; #\fB uname \-n\fP; # Executed in shell started by ns_exec bizarro .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (setns.c) .EX #define _GNU_SOURCE #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int fd; \& if (argc < 3) { fprintf(stderr, "%s /proc/PID/ns/FILE cmd args...\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& /* Get file descriptor for namespace; the file descriptor is opened with O_CLOEXEC so as to ensure that it is not inherited by the program that is later executed. */ \& fd = open(argv[1], O_RDONLY | O_CLOEXEC); if (fd == \-1) err(EXIT_FAILURE, "open"); \& if (setns(fd, 0) == \-1) /* Join that namespace */ err(EXIT_FAILURE, "setns"); \& execvp(argv[2], &argv[2]); /* Execute a command in namespace */ err(EXIT_FAILURE, "execvp"); } .EE .\" SRC END .SH "انظر أيضًا" \fBnsenter\fP(1), \fBclone\fP(2), \fBfork\fP(2), \fBunshare\fP(2), \fBvfork\fP(2), \fBnamespaces\fP(7), \fBunix\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .