.\" -*- coding: UTF-8 -*- .\" Copyright 1992, Drew Eckhardt .\" Copyright 1993, Ian Jackson .\" Copyright 2004-2014, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH access 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم access, faccessat, faccessat2 \- التحقق من أذونات المستخدم لملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint access(const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB);\fP .P \fB#include \fP /* Definition of \fBAT_*\fP constants */ \fB#include \fP .P \fBint faccessat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP /* But see C library/kernel differences, below */ .P \fB#include \fP /* Definition of \fBAT_*\fP constants */ \fB#include \fP /* Definition of \fBSYS_*\fP constants */ \fB#include \fP .P \fBint syscall(SYS_faccessat2,\fP \fB int \fP\fIdirfd\fP\fB, const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBfaccessat\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _ATFILE_SOURCE .fi .SH الوصف \fBaccess\fP() يتحقق مما إذا كانت العملية المستدعية يمكنها الوصول إلى الملف \fIpath\fP. إذا كان \fIpath\fP رابطًا رمزيًا، فسيتم متابعته. .P .\" F_OK is defined as 0 on every system that I know of. يحدد \fImode\fP فحص (فحوصات) الوصول التي سيتم تنفيذها، وهو إما القيمة \fBF_OK\fP، أو قناع يتكون من OR على مستوى البت لواحد أو أكثر من \fBR_OK\fP و \fBW_OK\fP و \fBX_OK\fP. يختبر \fBF_OK\fP وجود الملف. يختبر \fBR_OK\fP و \fBW_OK\fP و \fBX_OK\fP ما إذا كان الملف موجودًا ويمنح أذونات القراءة والكتابة والتنفيذ، على التوالي. .P يتم الفحص باستخدام UID و GID \fIالحقيقيين\fP للعملية المستدعية، بدلاً من المعرفات الفعالة كما يحدث عند محاولة تنفيذ عملية (مثل \fBopen\fP(2)) على الملف. وبالمثل، بالنسبة للمستخدم الجذر، يستخدم الفحص مجموعة الصلاحيات المسموح بها بدلاً من مجموعة الصلاحيات الفعالة؛ وبالنسبة للمستخدمين غير الجذر، يستخدم الفحص مجموعة فارغة من الصلاحيات. .P يسمح هذا للبرامج ذات set\-user\-ID والبرامج المزودة بالصلاحيات بتحديد سلطة المستخدم المستدعي بسهولة. بعبارة أخرى، لا يجيب \fBaccess\fP() على سؤال "هل يمكنني قراءة/كتابة/تنفيذ هذا الملف؟". إنه يجيب على سؤال مختلف قليلاً: "(بافتراض أنني ثنائي setuid) هل يمكن لـ \fIالمستخدم الذي استدعاني\fP قراءة/كتابة/تنفيذ هذا الملف؟"، مما يعطي برامج set\-user\-ID إمكانية منع المستخدمين الخبيثين من جعلها تقرأ ملفات لا ينبغي للمستخدمين قراءتها. .P إذا كانت العملية المستدعية مميزة (أي أن UID الحقيقي لها هو صفر)، فإن فحص \fBX_OK\fP يكون ناجحًا لملف عادي إذا كان إذن التنفيذ مفعلًا لأي من مالك الملف أو المجموعة أو الآخرين. .SS faccessat() يعمل \fBfaccessat\fP() بنفس طريقة \fBaccess\fP() تمامًا، باستثناء الاختلافات الموصوفة هنا. .P إذا كان \fIpath\fP نسبيًا، فسيتم تفسيره بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف \fIdirfd\fP (بدلاً من دليل العمل الحالي للعملية المستدعية، كما يفعل \fBaccess\fP() لاسم مسار نسبي). .P إذا كان \fIpath\fP نسبيًا وكان \fIdirfd\fP هو القيمة الخاصة \fBAT_FDCWD\fP، فسيتم تفسير \fIpath\fP بالنسبة إلى دليل العمل الحالي للعملية المستدعية (مثل \fBaccess\fP()). .P إذا كان المسار \fIpath\fP مطلقاً، فُيتجاهل \fIdirfd\fP. .P يتم إنشاء \fIflags\fP بواسطة OR معًا لصفر أو أكثر من القيم التالية: .TP \fBAT_EACCESS\fP قم بإجراء فحوصات الوصول باستخدام معرفات المستخدم والمجموعة الفعالة. بشكل مبدئي، يستخدم \fBfaccessat\fP() المعرفات الحقيقية (مثل \fBaccess\fP()). .TP \fBAT_EMPTY_PATH\fP (منذ لينكس 5.8) إذا كان \fIpath\fP سلسلة فارغة، فسيُعمل على الملف الذي يشير إليه \fIdirfd\fP (والذي ربما تم الحصول عليه باستخدام الراية \fBO_PATH\fP في \fBopen\fP(2)). في هذه الحالة، يمكن لـ \fIdirfd\fP أن يشير إلى أي نوع من الملفات، وليس فقط المجلدات. وإذا كان \fIdirfd\fP هو \fBAT_FDCWD\fP، فسيُنادى على مجلد العمل الحالي. هذه الراية خاصة بلينكس؛ عرّف \fB_GNU_SOURCE\fP للحصول على تعريفها. .TP \fBAT_SYMLINK_NOFOLLOW\fP إذا كان \fIpath\fP رابطًا رمزيًا، فلا تتبعه: بدلاً من ذلك، أعد معلومات حول الرابط نفسه. .P .\" انظر \fBopenat\fP(2) لشرح الحاجة إلى \fBfaccessat\fP(). .SS faccessat2() يتوافق وصف \fBfaccessat\fP() المذكور أعلاه مع POSIX.1 ومع التنفيذ المقدم من glibc. ومع ذلك، كان تنفيذ glibc محاكاة غير كاملة (انظر الأخطاء) التي أخفت حقيقة أن استدعاء النظام الخام \fBfaccessat\fP() في Linux لا يحتوي على وسيطة \fIflags\fP. للسماح بتنفيذ صحيح، أضاف Linux 5.8 استدعاء النظام \fBfaccessat2\fP() الذي يدعم وسيطة \fIflags\fP ويسمح بتنفيذ صحيح لدالة الغلاف \fBfaccessat\fP(). .SH "قيمة الإرجاع" عند النجاح (تم منح جميع الأذونات المطلوبة، أو \fImode\fP هو \fBF_OK\fP والملف موجود)، يتم إرجاع صفر. عند الخطأ (طلب بت واحد على الأقل في \fImode\fP إذنًا مرفوضًا، أو \fImode\fP هو \fBF_OK\fP والملف غير موجود، أو حدث خطأ آخر)، يتم إرجاع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP سيتم رفض الوصول المطلوب إلى الملف، أو يتم رفض إذن البحث لأحد الدلائل في بادئة المسار لـ \fIpath\fP. (انظر أيضًا \fBpath_resolution\fP(7).) .TP \fBEBADF\fP (\fBfaccessat\fP()) \fIpath\fP نسبي ولكن \fIdirfd\fP ليس \fBAT_FDCWD\fP (\fBfaccessat\fP()) ولا واصف ملف صالح. .TP \fBEFAULT\fP المسار \fIpath\fP يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها. .TP \fBEINVAL\fP تم تحديد \fImode\fP بشكل غير صحيح. .TP \fBEINVAL\fP (\fBfaccessat\fP()) تم تحديد علامة غير صالحة في \fIflags\fP. .TP \fBEIO\fP حدث خطأ إدخال/إخراج. .TP \fBELOOP\fP وُجد عدد كبير جدًا من الوصلات الرمزية أثناء تحليل \fIpath\fP. .TP \fBENAMETOOLONG\fP المسار \fIpath\fP طويل جداً. .TP \fBENOENT\fP أحد مكونات \fIpath\fP غير موجود أو أنه وصلة رمزية معلقة. .TP \fBENOMEM\fP ذاكرة النواة المتوفرة غير كافية. .TP \fBENOTDIR\fP المكون المستخدم كدليل في \fIpath\fP ليس دليلاً في الواقع. .TP \fBENOTDIR\fP (\fBfaccessat\fP()) \fIpath\fP نسبي و \fIdirfd\fP هو واصف ملف يشير إلى ملف غير دليل. .TP \fBEPERM\fP طلب إذن الكتابة إلى ملف مضبوط بعلم غير قابل للتغيير. انظر أيضًا \fBFS_IOC_SETFLAGS\fP(2const). .TP \fBEROFS\fP طلب إذن الكتابة لملف على نظام ملفات للقراءة فقط. .TP \fBETXTBSY\fP طلب وصول للكتابة إلى ملف تنفيذي يجري تنفيذه. .SH الإصدارات .\" HPU-UX 11 and Tru64 5.1 do this. .\" إذا كانت العملية المستدعية تملك صلاحيات مناسبة (أي، هي مستخدم فائق)، يسمح POSIX.1\-2001 للتنفيذ بالإشارة إلى نجاح فحص \fBX_OK\fP حتى لو لم تكن أي من بتات إذن تنفيذ الملف مضبوطة. لا يفعل لينكس هذا. .SS "الاختلافات بين مكتبة C والنواة" .\" استدعاء النظام الخام \fBfaccessat\fP() يأخذ فقط الوسائط الثلاث الأولى. العلامتان \fBAT_EACCESS\fP و \fBAT_SYMLINK_NOFOLLOW\fP منفذتان فعليًا داخل دالة الغلاف glibc لـ \fBfaccessat\fP(). إذا تم تحديد أي من هاتين العلامتين، تستخدم دالة الغلاف \fBfstatat\fP(2) لتحديد أذونات الوصول، لكن انظر الأخطاء. .SS "ملاحظات glibc" على النوى القديمة حيث \fBfaccessat\fP() غير متوفر (وعندما لا يتم تحديد العلامتين \fBAT_EACCESS\fP و \fBAT_SYMLINK_NOFOLLOW\fP)، تعود دالة الغلاف glibc لاستخدام \fBaccess\fP(). عندما يكون \fIpath\fP نسبيًا، تبني glibc اسم مسار بناءً على الرابط الرمزي في \fI/proc/self/fd\fP الذي يتوافق مع وسيطة \fIdirfd\fP. .SH المعايير .TP \fBaccess\fP() .TQ \fBfaccessat\fP() POSIX.1\-2024. .TP \fBfaccessat2\fP() لينكس. .SH التاريخ .TP \fBaccess\fP() 4.3BSD، SVr4، POSIX.1\-1988. .TP \fBfaccessat\fP() لينكس 2.6.16، glibc 2.4، POSIX.1\-2008. .TP \fBfaccessat2\fP() لينكس 5.8. .SH ملاحظات \fBتحذير\fP: استخدام هذه الاستدعاءات للتحقق مما إذا كان المستخدم مخولًا، على سبيل المثال، لفتح ملف قبل القيام بذلك فعليًا باستخدام \fBopen\fP(2) يخلق ثغرة أمنية، لأن المستخدم قد يستغل الفاصل الزمني القصير بين التحقق وفتح الملف للتلاعب به. \fBلهذا السبب، يجب تجنب استخدام استدعاء النظام هذا\fP. (في المثال الموصوف للتو، البديل الأكثر أمانًا سيكون التبديل المؤقت لمعرف المستخدم الفعال للعملية إلى المعرف الحقيقي ثم استدعاء \fBopen\fP(2).) .P \fBaccess\fP() دائمًا يفك مرجعية الروابط الرمزية. إذا كنت بحاجة للتحقق من الأذونات على رابط رمزي، استخدم \fBfaccessat\fP() مع العلامة \fBAT_SYMLINK_NOFOLLOW\fP. .P ترجع هذه الاستدعاءات خطأ إذا تم رفض أي من أنواع الوصول في \fImode\fP، حتى لو كانت بعض أنواع الوصول الأخرى في \fImode\fP مسموحة. .P الملف يمكن الوصول إليه فقط إذا كانت الأذونات على كل دليل في بادئة المسار لـ \fIpath\fP تمنح وصول البحث (أي، التنفيذ). إذا كان أي دليل غير قابل للوصول، يفشل استدعاء \fBaccess\fP()، بغض النظر عن الأذونات على الملف نفسه. .P يتم فحص بتات الوصول فقط، وليس نوع الملف أو محتوياته. لذلك، إذا تم العثور على دليل قابل للكتابة، فهذا يعني غالبًا أنه يمكن إنشاء ملفات في الدليل، وليس أن الدليل يمكن كتابته كملف. بالمثل، قد يتم الإبلاغ عن ملف DOS كملف تنفيذي، لكن استدعاء \fBexecve\fP(2) سيفشل مع ذلك. .P .\" قد لا تعمل هذه الاستدعاءات بشكل صحيح على أنظمة ملفات NFSv2 مع تمكين تعيين UID، لأن تعيين UID يتم على الخادم ويكون مخفيًا عن العميل، الذي يتحقق من الأذونات. (إصدارات NFS 3 وما فوق تقوم بالفحص على الخادم.) يمكن أن تحدث مشاكل مماثلة لوصلات FUSE. .SH العلل لأن استدعاء النظام \fBfaccessat\fP() في نواة لينكس لا يدعم وسيطة \fIflags\fP، تقوم دالة الغلاف glibc \fBfaccessat\fP() المقدمة في glibc 2.32 وما قبله بمحاكاة الوظيفة المطلوبة باستخدام مزيج من استدعاء النظام \fBfaccessat\fP() و \fBfstatat\fP(2). لكن هذه المحاكاة لا تأخذ في الاعتبار قوائم التحكم بالوصول (ACLs). بدءًا من glibc 2.33، تتجنب دالة الغلاف هذا الخطأ باستخدام استدعاء النظام \fBfaccessat2\fP() حيثما كان متوفرًا من النواة الأساسية. .P .\" This behavior appears to have been an implementation accident. في لينكس 2.4 (وما قبله) هناك بعض الغرابة في معالجة اختبارات \fBX_OK\fP للمستخدم الفائق. إذا تم تعطيل جميع فئات إذن التنفيذ لملف غير دليل، فإن اختبار \fBaccess\fP() الوحيد الذي يرجع \-1 هو عندما يتم تحديد \fImode\fP كـ \fBX_OK\fP فقط؛ إذا تم تحديد \fBR_OK\fP أو \fBW_OK\fP أيضًا في \fImode\fP، فإن \fBaccess\fP() يرجع 0 لمثل هذه الملفات. لينكس المبكر 2.6 (حتى لينكس 2.6.3) تصرف أيضًا بنفس طريقة لينكس 2.4. .P قبل لينكس 2.6.20، تجاهلت هذه الاستدعاءات تأثير العلامة \fBMS_NOEXEC\fP إذا تم استخدامها لـ \fBmount\fP(2) نظام الملفات الأساسي. منذ لينكس 2.6.20، يتم احترام العلامة \fBMS_NOEXEC\fP. .SH "انظر أيضًا" \fBchmod\fP(2), \fBchown\fP(2), \fBopen\fP(2), \fBsetgid\fP(2), \fBsetuid\fP(2), \fBstat\fP(2), \fBeuidaccess\fP(3), \fBcredentials\fP(7), \fBpath_resolution\fP(7), \fBsymlink\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 .