.\" -*- coding: UTF-8 -*- .\" Copyright 2006, Janak Desai .\" Copyright 2006-2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\" Patch Justification: .\" unshare system call is needed to implement, using PAM, .\" per-security_context and/or per-user namespace to provide .\" polyinstantiated directories. Using unshare and bind mounts, a .\" PAM module can create private namespace with appropriate .\" directories(based on user's security context) bind mounted on .\" public directories such as /tmp, thus providing an instance of .\" /tmp that is based on user's security context. Without the .\" unshare system call, namespace separation can only be achieved .\" by clone, which would require porting and maintaining all commands .\" such as login, and su, that establish a user session. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH unshare 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم unshare \- فصل أجزاء من سياق تنفيذ العملية .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#define _GNU_SOURCE\fP \fB#include \fP .P \fBint unshare(int \fP\fIflags\fP\fB);\fP .fi .SH الوصف تسمح \fBunshare\fP() لعملية (أو خيط) بفصل أجزاء من سياق تنفيذها المشترك حالياً مع عمليات (أو خيوط) أخرى. يُشارك جزء من سياق التنفيذ، مثل مساحة أسماء الوصل، ضمنياً عند إنشاء عملية جديدة باستخدام \fBfork\fP(2) أو \fBvfork\fP(2)، بينما قد تُشارك أجزاء أخرى، مثل الذاكرة الافتراضية، بطلب صريح عند إنشاء عملية أو خيط باستخدام \fBclone\fP(2). .P الاستخدام الرئيسي لـ \fBunshare\fP() هو السماح لعملية بالتحكم في سياق تنفيذها المشترك دون إنشاء عملية جديدة. .P وسيطة \fIflags\fP هي قناع بتات يحدد أي أجزاء من سياق التنفيذ يجب فصلها. تُحدد هذه الوسيطة بجمع (OR) صفر أو أكثر من الثوابت التالية: .TP \fBCLONE_FILES\fP يعكس تأثير علم \fBclone\fP(2) \fBCLONE_FILES\fP. يفصل جدول واصفات الملفات، بحيث لم تعد العملية المستدعية تشارك واصفات ملفاتها مع أي عملية أخرى. .TP \fBCLONE_FS\fP يعكس تأثير علم \fBclone\fP(2) \fBCLONE_FS\fP. يفصل سمات نظام الملفات، بحيث لم تعد العملية المستدعية تشارك دليلها الجذر (\fBchroot\fP(2))، أو دليلها الحالي (\fBchdir\fP(2))، أو سمات umask (\fBumask\fP(2)) مع أي عملية أخرى. .TP \fBCLONE_NEWCGROUP\fP (منذ لينكس 4.6) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWCGROUP\fP. يفصل مساحة أسماء cgroup. يتطلب استخدام \fBCLONE_NEWCGROUP\fP القدرة \fBCAP_SYS_ADMIN\fP. .TP \fBCLONE_NEWIPC\fP (منذ لينكس 2.6.19) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWIPC\fP. يفصل مساحة أسماء IPC، بحيث تحصل العملية المستدعية على نسخة خاصة من مساحة أسماء IPC لا تشاركها مع أي عملية أخرى. يستلزم تحديد هذا العلم آلياً \fBCLONE_SYSVSEM\fP أيضًا. يتطلب استخدام \fBCLONE_NEWIPC\fP القدرة \fBCAP_SYS_ADMIN\fP. .TP \fBCLONE_NEWNET\fP (منذ لينكس 2.6.24) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWNET\fP. يفصل مساحة أسماء الشبكة، بحيث تُنقل العملية المستدعية إلى مساحة أسماء شبكة جديدة لا تشاركها أي عملية موجودة سابقاً. يتطلب استخدام \fBCLONE_NEWNET\fP القدرة \fBCAP_SYS_ADMIN\fP. .TP \fBCLONE_NEWNS\fP .\" These flag name are inconsistent: .\" CLONE_NEWNS does the same thing in clone(), but CLONE_VM, .\" CLONE_FS, and CLONE_FILES reverse the action of the clone() .\" flags of the same name. لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWNS\fP. يفصل مساحة أسماء الوصل، بحيث تحصل العملية المستدعية على نسخة خاصة من مساحة أسمائها لا تشاركها مع أي عملية أخرى. يستلزم تحديد هذا العلم آلياً \fBCLONE_FS\fP أيضًا. يتطلب استخدام \fBCLONE_NEWNS\fP القدرة \fBCAP_SYS_ADMIN\fP. لمزيد من المعلومات، انظر \fBmount_namespaces\fP(7). .TP \fBCLONE_NEWPID\fP (منذ لينكس 3.8) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWPID\fP. يفصل مساحة أسماء PID، بحيث تحصل العملية المستدعية على مساحة أسماء PID جديدة لأطفالها لا تشاركها أي عملية موجودة سابقاً. العملية المستدعية \fIلا\fP تُنقل إلى المساحة الجديدة. سيكون للطفل الأول الذي أنشأته العملية المستدعية معرف العملية 1 وسيتولى دور \fBinit\fP(1) في المساحة الجديدة. يستلزم \fBCLONE_NEWPID\fP آلياً \fBCLONE_THREAD\fP أيضًا. يتطلب استخدام \fBCLONE_NEWPID\fP القدرة \fBCAP_SYS_ADMIN\fP. لمزيد من المعلومات، انظر \fBpid_namespaces\fP(7). .TP \fBCLONE_NEWTIME\fP (منذ Linux 5.6) يفصل مساحة أسماء الوقت، بحيث تحصل العملية المستدعية على مساحة أسماء وقت جديدة لأطفالها لا تشاركها أي عملية موجودة سابقاً. العملية المستدعية \fIلا\fP تُنقل إلى المساحة الجديدة. يتطلب استخدام \fBCLONE_NEWTIME\fP القدرة \fBCAP_SYS_ADMIN\fP. لمزيد من المعلومات، انظر \fBtime_namespaces\fP(7). .TP \fBCLONE_NEWUSER\fP (منذ لينكس 3.8) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWUSER\fP. يفصل مساحة أسماء المستخدم، بحيث تُنقل العملية المستدعية إلى مساحة أسماء مستخدم جديدة لا تشاركها أي عملية موجودة سابقاً. كما هو الحال مع العملية الطفل التي أنشأتها \fBclone\fP(2) مع علم \fBCLONE_NEWUSER\fP، يحصل المستدعي على مجموعة كاملة من القدرات في المساحة الجديدة. .IP .\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 .\" https://lwn.net/Articles/543273/ يتطلب \fBCLONE_NEWUSER\fP ألا تكون العملية المستدعية مُخيطة؛ يستلزم تحديد \fBCLONE_NEWUSER\fP آلياً \fBCLONE_THREAD\fP. منذ Linux 3.9، يستلزم \fBCLONE_NEWUSER\fP أيضًا آلياً \fBCLONE_FS\fP. يتطلب \fBCLONE_NEWUSER\fP أن يكون معرف المستخدم ومعرف المجموعة للعملية المستدعية مُعيّنين إلى معرفات مستخدمين ومعرفات مجموعات في مساحة أسماء المستخدم للعملية المستدعية وقت الاستدعاء. .IP لمزيد من المعلومات حول مساحات أسماء المستخدم، انظر \fBuser_namespaces\fP(7). .TP \fBCLONE_NEWUTS\fP (منذ لينكس 2.6.19) لهذا العلم نفس تأثير علم \fBclone\fP(2) \fBCLONE_NEWUTS\fP. يفصل مساحة أسماء UTS IPC، بحيث تحصل العملية المستدعية على نسخة خاصة من مساحة أسماء UTS لا تشاركها مع أي عملية أخرى. يتطلب استخدام \fBCLONE_NEWUTS\fP القدرة \fBCAP_SYS_ADMIN\fP. .TP \fBCLONE_SYSVSEM\fP (منذ Linux 2.6.26) .\" commit 9edff4ab1f8d82675277a04e359d0ed8bf14a7b7 .\" CLONE_NEWNS If CLONE_SIGHAND is set and signals are also being shared .\" (i.e., current->signal->count > 1), force CLONE_THREAD. يعكس هذا العلم تأثير علم \fBclone\fP(2) \fBCLONE_SYSVSEM\fP. يفصل قيم ضبط سيمافور System\ V (\fIsemadj\fP)، بحيث تحصل العملية المستدعية على قائمة \fIsemadj\fP جديدة فارغة لا تشاركها مع أي عملية أخرى. إذا كانت هذه آخر عملية لديها مرجع إلى قائمة \fIsemadj\fP الحالية للعملية، فتُطبق التعديلات في تلك القائمة على السيمافورات المقابلة، كما هو موصوف في \fBsemop\fP(2). .P .\" As at 3.9, the following forced implications also apply, .\" although the relevant flags are not yet implemented. .\" If CLONE_THREAD is set force CLONE_VM. .\" If CLONE_VM is set, force CLONE_SIGHAND. .\" .\" See kernel/fork.c::check_unshare_flags() بالإضافة إلى ذلك، يمكن تحديد \fBCLONE_THREAD\fP و \fBCLONE_SIGHAND\fP و \fBCLONE_VM\fP في \fIflags\fP إذا كان المستدعي أحادي الخيط (أي لا يشارك مساحة عنوانه مع عملية أو خيط آخر). في هذه الحالة، ليس لهذه الأعلام أي تأثير. (لاحظ أيضًا أن تحديد \fBCLONE_THREAD\fP يستلزم آلياً \fBCLONE_VM\fP، وتحديد \fBCLONE_VM\fP يستلزم آلياً \fBCLONE_SIGHAND\fP.) إذا كانت العملية متعددة الخيوط، فإن استخدام هذه الأعلام يؤدي إلى خطأ. .P إذا حُددت \fIflags\fP بصفر، فإن \fBunshare\fP() تكون عملية عدمية؛ لا تُجرى أي تغييرات على سياق تنفيذ العملية المستدعية. .SH "قيمة الإرجاع" يُعاد صفر عند النجاح. ويُعاد \-1 عند الفشل وتُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEINVAL\fP حُدد بت غير صالح في \fIflags\fP. .TP \fBEINVAL\fP حُدد \fBCLONE_THREAD\fP أو \fBCLONE_SIGHAND\fP أو \fBCLONE_VM\fP في \fIflags\fP، والمستدعي متعدد الخيوط. .TP \fBEINVAL\fP حُدد \fBCLONE_NEWIPC\fP في \fIflags\fP، لكن النواة لم تُهيأ بخياري \fBCONFIG_SYSVIPC\fP و \fBCONFIG_IPC_NS\fP. .TP \fBEINVAL\fP حُدد \fBCLONE_NEWNET\fP في \fIflags\fP، لكن النواة لم تُهيأ بخيار \fBCONFIG_NET_NS\fP. .TP \fBEINVAL\fP حُدد \fBCLONE_NEWPID\fP في \fIflags\fP، لكن النواة لم تُهيأ بخيار \fBCONFIG_PID_NS\fP. .TP \fBEINVAL\fP تم تحديد \fBCLONE_NEWUSER\fP في \fIflags\fP، لكن النواة لم تُهيأ بخيار \fBCONFIG_USER_NS\fP. .TP \fBEINVAL\fP تم تحديد \fBCLONE_NEWUTS\fP في \fIflags\fP، لكن النواة لم تُهيأ بخيار \fBCONFIG_UTS_NS\fP. .TP \fBEINVAL\fP تم تحديد \fBCLONE_NEWPID\fP في \fIflags\fP، لكن العملية استدعت سابقًا \fBunshare\fP() مع علم \fBCLONE_NEWPID\fP. .TP \fBENOMEM\fP لا يمكن تخصيص ذاكرة كافية لنسخ أجزاء من سياق المستدعي التي تحتاج إلى إلغاء المشاركة. .TP \fBENOSPC\fP (منذ لينكس 3.7) .\" commit f2302505775fd13ba93f034206f1e2a587017929 تم تحديد \fBCLONE_NEWPID\fP في الأعلام، لكن الحد الأقصى لعمق تداخل مساحات أسماء PID كان سيتجاوز؛ انظر \fBpid_namespaces\fP(7). .TP \fBENOSPC\fP (منذ لينكس 4.9؛ قبله \fBEUSERS\fP) تم تحديد \fBCLONE_NEWUSER\fP في \fIflags\fP، وكان الاستدعاء سيتسبب في تجاوز الحد الأقصى لعدد مساحات أسماء المستخدم المتداخلة. انظر \fBuser_namespaces\fP(7). .IP من لينكس 3.11 إلى لينكس 4.8، كان الخطأ الذي يُشخص في هذه الحالة هو \fBEUSERS\fP. .TP \fBENOSPC\fP (منذ لينكس 4.9) أحد القيم في \fIflags\fP حدد إنشاء مساحة اسم مستخدم جديدة، لكن فعل ذلك كان سيتسبب في تجاوز الحد المحدد بواسطة الملف المقابل في \fI/proc/sys/user\fP. لمزيد من التفاصيل، انظر \fBnamespaces\fP(7). .TP \fBEPERM\fP لم تمتلك العملية المستدعية الامتيازات المطلوبة لهذه العملية. .TP \fBEPERM\fP تم تحديد \fBCLONE_NEWUSER\fP في \fIflags\fP، لكن إما معرف المستخدم الفعال أو معرف المجموعة الفعال للمستدعي ليس له تعيين في مساحة الاسم الأصلية (انظر \fBuser_namespaces\fP(7)). .TP \fBEPERM\fP (منذ لينكس 3.9) .\" commit 3151527ee007b73a0ebd296010f1c0454a919c7d .\" FIXME What is the rationale for this restriction? تم تحديد \fBCLONE_NEWUSER\fP في \fIflags\fP والمستدعي في بيئة chroot (أي، دليل الجذر للمستدعي لا يطابق دليل الجذر لمساحة اسم التثبيت التي يوجد فيها). .TP \fBEUSERS\fP (من لينكس 3.11 إلى لينكس 4.8) تم تحديد \fBCLONE_NEWUSER\fP في \fIflags\fP، وكان الحد الأقصى لعدد مساحات أسماء المستخدم المتداخلة سيتجاوز. انظر مناقشة خطأ \fBENOSPC\fP أعلاه. .SH المعايير لينكس. .SH التاريخ لينكس 2.6.16. .SH ملاحظات .\" FIXME all of the following needs to be reviewed for the current kernel .\" However, we can do unshare(CLONE_SIGHAND) if CLONE_SIGHAND .\" was not specified when doing clone(); i.e., unsharing .\" signal handlers is permitted if we are not actually .\" sharing signal handlers. mtk .\" However, we can do unshare(CLONE_VM) if CLONE_VM .\" was not specified when doing clone(); i.e., unsharing .\" virtual memory is permitted if we are not actually .\" sharing virtual memory. mtk .\" .\"9) Future Work .\"-------------- .\"The current implementation of unshare does not allow unsharing of .\"signals and signal handlers. Signals are complex to begin with and .\"to unshare signals and/or signal handlers of a currently running .\"process is even more complex. If in the future there is a specific .\"need to allow unsharing of signals and/or signal handlers, it can .\"be incrementally added to unshare without affecting legacy .\"applications using unshare. .\" ليست كل سمات العملية التي يمكن مشاركتها عند إنشاء عملية جديدة باستخدام \fBclone\fP(2) يمكن إلغاء مشاركتها باستخدام \fBunshare\fP(). على وجه الخصوص، اعتبارًا من النواة 3.8، لا تنفذ \fBunshare\fP() أعلامًا تعكس تأثيرات \fBCLONE_SIGHAND\fP أو \fBCLONE_THREAD\fP أو \fBCLONE_VM\fP. قد تُضاف هذه الوظيفة في المستقبل، إذا لزم الأمر. .P يتطلب إنشاء جميع أنواع مساحات الأسماء، باستثناء مساحات أسماء المستخدم، القدرة \fBCAP_SYS_ADMIN\fP. ومع ذلك، نظرًا لأن إنشاء مساحة اسم مستخدم يمنح آليًا مجموعة كاملة من القدرات، فإن إنشاء كل من مساحة اسم مستخدم وأي نوع آخر من مساحات الأسماء في نفس استدعاء \fBunshare\fP() لا يتطلب القدرة \fBCAP_SYS_ADMIN\fP في مساحة الاسم الأصلية. .SH أمثلة البرنامج أدناه يوفر تنفيذًا بسيطًا لأمر \fBunshare\fP(1)، الذي يلغي مشاركة مساحة اسم واحدة أو أكثر وينفذ الأمر المقدم في وسائط سطر الأوامر. إليك مثال على استخدام هذا البرنامج، تشغيل شل في مساحة اسم تثبيت جديدة، والتحقق من أن الشل الأصلية والشل الجديدة في مساحات اسم تثبيت منفصلة: .P .in +4n .EX $\fB readlink /proc/$$/ns/mnt\fP; mnt:[4026531840] $\fB sudo ./unshare \-m /bin/bash\fP; #\fB readlink /proc/$$/ns/mnt\fP; mnt:[4026532325] .EE .in .P المخرجات المختلفة لأمرَي \fBreadlink\fP(1) تظهر أن الشلّين في مساحتي اسم تثبيت مختلفتين. .SS "مصدر البرنامج" .\" SRC BEGIN (unshare.c) \& .EX /* unshare.c \& A simple implementation of the unshare(1) command: unshare namespaces and execute a command. */ #define _GNU_SOURCE #include #include #include #include #include \& static void usage(char *pname) { fprintf(stderr, "Usage: %s [options] program [arg...]\[rs]n", pname); fprintf(stderr, "Options can be:\[rs]n"); fprintf(stderr, " \-C unshare cgroup namespace\[rs]n"); fprintf(stderr, " \-i unshare IPC namespace\[rs]n"); fprintf(stderr, " \-m unshare mount namespace\[rs]n"); fprintf(stderr, " \-n unshare network namespace\[rs]n"); fprintf(stderr, " \-p unshare PID namespace\[rs]n"); fprintf(stderr, " \-t unshare time namespace\[rs]n"); fprintf(stderr, " \-u unshare UTS namespace\[rs]n"); fprintf(stderr, " \-U unshare user namespace\[rs]n"); exit(EXIT_FAILURE); } \& int main(int argc, char *argv[]) { int flags, opt; \& flags = 0; \& while ((opt = getopt(argc, argv, "CimnptuU")) != \-1) { switch (opt) { case \[aq]C\[aq]: flags |= CLONE_NEWCGROUP; break; case \[aq]i\[aq]: flags |= CLONE_NEWIPC; break; case \[aq]m\[aq]: flags |= CLONE_NEWNS; break; case \[aq]n\[aq]: flags |= CLONE_NEWNET; break; case \[aq]p\[aq]: flags |= CLONE_NEWPID; break; case \[aq]t\[aq]: flags |= CLONE_NEWTIME; break; case \[aq]u\[aq]: flags |= CLONE_NEWUTS; break; case \[aq]U\[aq]: flags |= CLONE_NEWUSER; break; default: usage(argv[0]); } } \& if (optind >= argc) usage(argv[0]); \& if (unshare(flags) == \-1) err(EXIT_FAILURE, "unshare"); \& execvp(argv[optind], &argv[optind]); err(EXIT_FAILURE, "execvp"); } .EE .\" SRC END .SH "انظر أيضًا" \fBunshare\fP(1), \fBclone\fP(2), \fBfork\fP(2), \fBkcmp\fP(2), \fBsetns\fP(2), \fBvfork\fP(2), \fBnamespaces\fP(7) .P \fIDocumentation/userspace\-api/unshare.rst\fP في شجرة مصدر نواة لينكس .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .