linuxFile permissionsمجوز فایل در لینوکس؛ مالک، گروه و دسترسی مسیر
مجوز فایل را با دسترسی پوشههای مسیر بررسی کنید؛ معنی خواندن، نوشتن و اجرا و علت ناکافیبودن chmod 777 را به زبان ساده ببینید.
مفهوم به زبان ساده
مجوزهای معمول فایل در لینوکس، دسترسی خواندن، نوشتن و اجرا را برای مالک، گروه و دیگران توصیف میکنند. معنی این بیتها برای پوشه با فایل عادی یکسان نیست: اجازهٔ جستوجوی پوشه برای عبور از آن و رسیدن به نامهای درونش اهمیت دارد. پس خطای دسترسی به یک فایل ممکن است از یکی از پوشههای بالادست مسیر بیاید، حتی اگر خود فایل خواندنی به نظر برسد.
این بیتها تمام سازوکار کنترل دسترسی سیستم نیستند؛ ACL و سیاستهایی مانند AppArmor نیز میتوانند در نتیجه مؤثر باشند. هویت و قابلیتهای #linux-process را هم باید بدانیم. فرایند دارای امتیاز root ممکن است برخی بررسیهای معمول را دور بزند، بنابراین آزمایش «مجوز را بستم ولی هنوز میخواند» زیر root، رفتار کاربر عادی را اثبات نمیکند. شمارهٔ خطا و مسیر مؤثر را کنار هویت اجرا ثبت کنید.
مثال Python یک فایل موقت متعلق به خود تمرین باز میکند، ویژگیهای همان فایلِ باز را میخواند و یک متن ساختگی در آن مینویسد و میخواند. فایل هنگام خروج از بلوک بسته و پاک میشود. حالت رایج آن فقط دسترسی مالک را دارد؛ umask محدودکنندهتر میتواند بیتهای ثبتشده را تغییر دهد. این مثال خطای EACCES تولید نمیکند و مجوز هیچ فایل واقعیِ شما را تغییر نمیدهد. برای تشخیص خطای دسترسی، باید عملیات شکستخوردهٔ واقعی را جدا بررسی کرد.
کجا به کار میآید؟
- بررسی EACCES با هویت اجرا و تمام اجزای مسیر
- خواندن تفاوت مجوز فایل عادی و اجازهٔ جستوجوی پوشه
از تعریف تا یک مثال واقعی
python3 - <<'PY'
import os
import stat
import tempfile
with tempfile.TemporaryFile(mode='w+t', encoding='utf-8') as stream:
print(stat.filemode(os.fstat(stream.fileno()).st_mode))
stream.write('practice')
stream.seek(0)
print(stream.read())
PY
نمونهٔ رایج: -rw------- practice بیتهای خط اول ممکن است با umask محدودکنندهتر فرق کنند؛ خط دوم متن خود تمرین است.
این مثال چطور کار میکند؟
فایل موقت با دسترسی محدود برای همین تمرین ساخته میشود.
fstat ویژگیِ همان فایلدسکریپتور باز را میخواند، نه یک نام حدسی را.
با خروج از بلوک، مدیریت فایل پایان مییابد و فایل موقت باقی نمیماند.
اشتباه رایج
دادن مجوز 777 بدون یافتن علت، دسترسی دیگران را بیشتر میکند و الزاماً مشکل مسیر، ACL یا سیاست امنیتی را حل نمیکند.
این را به خاطر بسپارید
عملیات، مسیر و هویت اجرا را بررسی کنید؛ مجوزها را فقط به اندازهٔ نیاز اصلاح کنید.