Scroll to navigation

chmod(2) System Calls Manual chmod(2)

الاسم

chmod, fchmod, fchmodat - تغيير أذونات ملف

المكتبة

مكتبة سي المعيارية (libc، -lc)

موجز

#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
int fchmod(int fd, mode_t mode);
#include <fcntl.h>           /* تعريف ثوابت AT_* */
#include <sys/stat.h>
int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);

متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

fchmod():

منذ glibc 2.24:
_POSIX_C_SOURCE >= 199309L
glibc 2.19 إلى glibc 2.23
_POSIX_C_SOURCE
glibc 2.16 إلى glibc 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 إلى glibc 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
|| _POSIX_C_SOURCE >= 200809L
glibc 2.11 وما قبله:
_BSD_SOURCE || _XOPEN_SOURCE >= 500

fchmodat():


منذ glibc 2.10:
_POSIX_C_SOURCE >= 200809L
قبل glibc 2.10:
_ATFILE_SOURCE

الوصف

تغير استدعاءات النظام chmod() و fchmod() بتات وضع الملف. (يتكون وضع الملف من بتات أذونات الملف بالإضافة إلى بتات set-user-ID و set-group-ID و sticky.) تختلف استدعاءات النظام هذه فقط في كيفية تحديد الملف:

تغير chmod() وضع الملف المحدد الذي يُعطى مساره في pathname، ويُتبع الرابط الرمزي إن كان كذلك.
يغير fchmod() وضع الملف المشار إليه بواصف الملف المفتوح fd.

يُحدد وضع الملف الجديد في mode، وهو قناع بتات يُنشأ بجمع صفر أو أكثر مما يلي بعملية OR:

set-user-ID (تعيين معرف المستخدم الفعّال للعملية عند execve(2))
set-group-ID (تعيين معرف المجموعة الفعّال للعملية عند execve(2); القفل الإلزامي، كما هو موصوف في fcntl(2); أخذ مجموعة ملف جديد من الدليل الأب، كما هو موصوف في chown(2) و mkdir(2))
البت اللاصق (علم الحذف المقيد، كما هو موصوف في unlink(2))
قراءة من المالك
كتابة من المالك
تنفيذ/بحث من المالك (ينطبق "بحث" على الأدلة، ويعني أنه يمكن الوصول إلى الإدخالات داخل الدليل)
قراءة من المجموعة
كتابة من المجموعة
تنفيذ/بحث من المجموعة
قراءة من قبل الآخرين
كتابة من قبل الآخرين
تنفيذ/بحث من قبل الآخرين

يجب أن يتطابق UID الفعال للعملية المستدعية مع مالك الملف، أو يجب أن تكون العملية مميزة (لينكس: يجب أن تمتلك القدرة CAP_FOWNER).

إذا لم تكن العملية المستدعية مميزة (لينكس: لا تمتلك القدرة CAP_FSETID)، ولم تتطابق مجموعة الملف مع معرف المجموعة الفعال للعملية أو أحد معرفات مجموعاتها الإضافية، فسيتم إيقاف بت S_ISGID، لكن هذا لن يتسبب في إرجاع خطأ.

كإجراء أمني، اعتمادًا على نظام الملفات، قد يتم إيقاف بتات تنفيذ set-user-ID و set-group-ID إذا تمت كتابة ملف. (في لينكس، يحدث هذا إذا لم تمتلك عملية الكتابة القدرة CAP_FSETID.) في بعض أنظمة الملفات، يمكن للمستخدم الفائق فقط تعيين البت اللاصق، والذي قد يكون له معنى خاص. بالنسبة للبت اللاصق، وبتات set-user-ID و set-group-ID على الدلائل، انظر inode(7).

في أنظمة ملفات NFS، سيؤثر تقييد الأذونات فورًا على الملفات المفتوحة بالفعل، لأن التحكم في الوصول يتم على الخادم، لكن الملفات المفتوحة تُحتفظ بها من قبل العميل. قد يتأخر توسيع الأذونات للعملاء الآخرين إذا تم تمكين التخزين المؤقت للسمات عليهم.

fchmodat()

تعمل استدعاء النظام fchmodat() بنفس طريقة chmod() تمامًا، باستثناء الاختلافات الموصوفة هنا.

إن كان المسار المُعطى في pathname نسبيًا، فيُفسر بالنسبة للدليل المشار إليه بواصف الملف dirfd (بدلاً من التفسير بالنسبة لدليل العمل الحالي للعملية المستدعية، كما تفعل chmod() مع مسار نسبي).

إن كان pathname نسبيًا و dirfd هو القيمة الخاصة AT_FDCWD، فيُفسر pathname بالنسبة لدليل العمل الحالي للعملية المستدعية (مثل chmod()).

إذا كان اسم المسار pathname مطلقاً، فُيتجاهل dirfd.

يمكن أن يكون flags إما 0، أو يتضمن العلم التالي:

إن كان pathname رابطًا رمزيًا، فلا تتبعه: بدلاً من ذلك، تعامل مع الرابط نفسه. هذا العلم غير مطبق حاليًا.

انظر openat(2) لشرح الحاجة إلى fchmodat().

قيمة الإرجاع

عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

اعتماداً على نظام الملفات، قد تُرَد أخطاء أخرى غير تلك المذكورة أدناه.

الأخطاء الأكثر عمومية لـ chmod() مدرجة أدناه:

أُذونات البحث مرفوضة في أحد مكونات بادئة المسار. (انظر أيضًا path_resolution(7).)
(fchmod()) واصف الملف fd غير صالح.
(fchmodat()) pathname نسبي لكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
يشير pathname إلى خارج مساحة العناوين المتاحة لك.
(fchmodat()) علم غير صالح محدد في flags.
حدث خطأ إدخال/إخراج.
وُجه عدد كبير جدًا من الروابط الرمزية عند حل pathname.
مسار الملف pathname طويل جداً.
الملف غير موجود.
ذاكرة النواة المتوفرة غير كافية.
أحد مكونات بادئة المسار ليس دليلاً.
(fchmodat()) pathname نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.
(fchmodat()) flags حدد AT_SYMLINK_NOFOLLOW، وهو غير مدعوم.
لا يتطابق UID الفعال مع مالك الملف، والعملية ليست مميزة (لينكس: لا تمتلك القدرة CAP_FOWNER).
الملف معلم بأنه غير قابل للتغيير أو للإلحاق فقط. (انظر FS_IOC_SETFLAGS(2const).)
الملف المسمى يقع في نظام ملفات للقراءة فقط.

الإصدارات

الاختلافات بين مكتبة C والنواة

تنفذ دالة الغلاف fchmodat() لمكتبة GNU C الواجهة المحددة بواسطة POSIX الموصوفة في هذه الصفحة. تختلف هذه الواجهة عن استدعاء النظام الأساسي للينكس، الذي لا يحتوي على وسيطة flags.

ملاحظات glibc

على النوى القديمة حيث fchmodat() غير متوفرة، تتراجع دالة الغلاف glibc لاستخدام chmod(). عندما يكون pathname مسارًا نسبيًا، تبني glibc مسارًا بناءً على الرابط الرمزي في /proc/self/fd الذي يتوافق مع وسيط dirfd.

المعايير

POSIX.1-2008.

التاريخ

4.4BSD، SVr4، POSIX.1-2001.
POSIX.1-2008. لينكس 2.6.16،‏ glibc 2.4.

انظر أيضًا

chmod(1)، chown(2)، execve(2)، open(2)، stat(2)، inode(7)، path_resolution(7)، symlink(7)

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

13 يونيو 2024 صفحات دليل لينكس 6.9.1