Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی و ساخت محصولتوسعه فول‌استکممیزی مهندسیمشاوره معماریزیرساخت و استقرارهوش مصنوعی در محصول

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. همه حقوق محفوظ است.

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

فرمان chmod در لینوکس؛ تغییر مجوز فایل و دایرکتوری

آموزش chmod: اکتال ۶۴۴/۷۵۵، شکل u+x g-w، بازگشتی -R، و اشتباه ۷۷۷ — بر اساس man chmod و مدل rwx.

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

·۲۹ شهریور ۱۴۰۵·11 دقیقه مطالعه
chmodchmod 755chmod 644chmod -Rsymbolic modeumaskexecute bit
ترمینال chmod 755 و استیکی chmod

chmod مخفف change mode است: بیت‌های rwx و در صورت نیاز بیت‌های خاص را روی فایل یا دایرکتوری عوض می‌کند. مالک فایل معمولاً می‌تواند chmod بزند؛ root تقریباً همیشه. اگر مدل مقالهٔ ۱۴۷ را نخوانده‌اید، اول معنی r و w و x روی دایرکتوری در برابر فایل را بفهمید — وگرنه اعداد جادویی حفظ می‌کنید و در Production بدهی امنیتی می‌کارید.

دو شیوهٔ رایج وجود دارد: عددی اکتال (مثل ۷۵۵) و نمادین (مثل u+x یا g-w). هر دو در صفحهٔ راهنمای chmod مستند شده‌اند. این مقاله الگوهای امن روزمره، تفاوت فایل و دایرکتوری، بازگشتی خطرناک، تعامل با umask، و تلهٔ ۷۷۷ را پوشش می‌دهد تا به‌جای کپی از اولین نتیجهٔ جستجو، تصمیم آگاهانه بگیرید.

chmod مالکیت را عوض نمی‌کند. اگر گروه یا کاربر اشتباه است، chown یا chgrp لازم دارید. قاطی کردن این دو ابزار یکی از پرتکرارترین سردرگمی‌های تازه‌واردهاست.

استیکی‌نوت 644 755 600 روی وایت‌برد

پاسخ کوتاه

برای فایل متنی یا کانفیگ معمولاً ۶۴۴، برای اسکریپت یا باینری کاربر ۷۵۵، برای Secret خصوصی ۶۰۰، برای دایرکتوری‌های عادی ۷۵۵ یا ۷۵۰. با شکل نمادین می‌توانید فقط یک بیت را روشن یا خاموش کنید بدون بازنویسی بقیه. chmod -R قدرتمند و خطرناک است؛ روی / یا خانه بدون فیلتر و بدون درک درخت نزنید. همیشه بعد از تغییر، با همان کاربر سرویس تست کنید نه با root.

chmod مشکل مالکیت را حل نمی‌کند. اگر گروه اشتباه است، chown یا chgrp لازم دارید نه فقط ۷۷۵.

شکل عددی (اکتال)

سه رقم رایج به ترتیب owner، group، others هستند. هر رقم جمع ۴ (r) + ۲ (w) + ۱ (x) است. رقم چهارم اختیاری برای بیت‌های خاص (setuid/setgid/sticky) هم وجود دارد که کمتر در کار روزمرهٔ اپ می‌آید ولی برای /tmp مهم است.

modeمعنیکاربرد رایج
644rw-r--r--فایل‌های عادی، بسیاری کانفیگ‌ها
664rw-rw-r--همکاری گروهی روی فایل
600rw-------کلید خصوصی، Secret
755rwxr-xr-xاجراپذیر یا دایرکتوری عادی
750rwxr-x---دایرکتوری تیمی محدودتر
700rwx------خانهٔ خصوصی، .ssh
711rwx--x--xپیمایش بدون لیست برای others
1777rwxrwxrwtالگوی /tmp با sticky

bash

chmod 644 README.md chmod 755 deploy.sh chmod 600 ~/.ssh/id_ed25519 chmod 700 ~/.ssh

حفظ کردن چند الگوی پرتکرار بهتر از improvise کردن هر بار است. جدول بالا را در یادداشت تیم بگذارید و انحراف‌ها را توضیح دهید.

شکل نمادین

چه کسانی: u (owner)، g (group)، o (others)، a (all). عمل: + اضافه، - حذف، = تنظیم دقیق آن دسته. مجوزها: r و w و x و برای خاص‌ها s و t.

bash

chmod u+x deploy.sh chmod go-w settings.ini chmod a-x script.sh chmod u=rw,g=r,o= notes.txt chmod g+s shared_dir chmod +t upload_dir

نمادین وقتی مفید است که نخواهید سه رقم را از حفظ حساب کنید، یا در اسکریپت فقط یک فلگ را تغییر دهید و بقیه را دست نزنید. برای آموزش تیم، نمادین خواناتر است؛ برای چیت‌شیت سریع، اکتال کوتاه‌تر است.

دایرکتوری و بیت اجرا

دایرکتوری بدون x برای شما قابل cd نیست و دسترسی به فایل داخلی با مسیر مستقیم هم ممکن است شکست بخورد. الگوی امن برای درخت وب:

bash

mkdir -p /var/www/myapp chmod 755 /var/www/myapp find /var/www/myapp -type f -exec chmod 644 {} \; find /var/www/myapp -type d -exec chmod 755 {} \;

جدا کردن type f و type d بهتر از chmod -R 755 روی مخلوط فایل و پوشه است؛ وگرنه به فایل‌های غیراجرایی هم x می‌دهید. گاهی بی‌ضرر است، گاهی سیاست امنیتی یا ابزار اسکَن را گیج می‌کند.

chmod -R؛ قدرت و پشیمانی

  • روی درخت پروژهٔ خودتان با مسیر مطلق دقیق و بکاپ ذهنی OK است.
  • روی /، /etc، /var بدون خشک‌کردن فکر و بدون پنجرهٔ نگهداری نزنید.
  • ترکیب با sudo خطر را چندبرابر می‌کند چون محدودیت مالک را برمی‌دارد.
  • قبل از -R، یک find خشک برای دیدن دامنه اجرا کنید.

bash

# دامنه را ببینید find /var/www/myapp -maxdepth 2 -print # سپس هدفمند find /var/www/myapp -type d -exec chmod 755 {} \;

داستان‌های واقعی Ops پر است از یک chmod -R اشتباه که SSH را شکست یا بسته را غیرقابل‌خواندن کرد. اگر مجبور به بازگشتی شدید، مسیر را دو بار بخوانید و از history بدون فکر بالا نیاورید.

رابطه با umask و فایل‌های جدید

chmod وضعیت فعلی را عوض می‌کند؛ umask روی فایل‌هایی که از این به بعد ساخته می‌شوند اثر می‌گذارد. اگر سرویس مدام فایل با مجوز گشاد می‌سازد، فقط chmod روی فایل‌های قدیمی کافی نیست — umask یا تنظیمات خود سرویس را درست کنید. در واحد systemd می‌توان UMask= گذاشت.

نمونه‌های عملی استقرار

کلید SSH کاربر: دایرکتوری .ssh باید ۷۰۰ و کلید خصوصی ۶۰۰ باشد؛ در غیر این صورت ssh ممکن است کلید را نادیده بگیرد. فایل env حاوی راز: ۶۰۰ با مالک کاربر سرویس. اسکریپت deploy که توسط همان کاربر اجرا می‌شود: ۷۵۰ اگر گروه عملیاتی باید اجرا کند، وگرنه ۷۰۰.

برای پوشهٔ آپلود کاربر نهایی: نه ۷۷۷. بهتر است مالک سرویس، گروه محدود، و در صورت نیاز sticky تا کاربران همدیگر را پاک نکنند. اگر وب‌سرور و اپ کاربر جدا دارند، گروه مشترک و ۶۴۰/۷۵۰ غالباً از باز کردن others تمیزتر است.

اشتباه‌های رایج

  • chmod 777 -R به‌عنوان اولین واکنش به denied.
  • اعمال ۷۵۵ بازگشتی روی فایل‌های داده.
  • فراموش کردن که w روی دایرکتوری اجازهٔ حذف فایل دیگران را می‌دهد.
  • chmod روی لینک بدون فهم اینکه معمولاً هدف مهم است.
  • تغییر مجوز فایل‌های بسته زیر /usr به‌جای اصلاح نصب.
  • تست موفقیت با کاربر root بعد از chmod.

سوالات متداول

تفاوت ۶۷۵۵ و ۷۵۵ چیست؟

رقم چهارم بیت‌های خاص را می‌گذارد. برای کار روزمرهٔ اپ معمولاً همان سه رقم کافی است؛ setuid را بدون دلیل روشن نکنید.

چرا بعد از chmod هنوز denied دارم؟

مالکیت اشتباه، نبود x روی والد، یا MAC. namei -l و id را ببینید؛ chown را در ۱۴۹.

آیا chmod روی فایل باز اثر فوری دارد؟

مجوز روی عملیات بعدی چک می‌شود؛ جزئیات به نوع دسترسی باز بستگی دارد. سرویس را در صورت نیاز reload کنید و با کاربر سرویس دوباره تست کنید.

symbolic بهتر است یا numeric؟

هر دو رسمی‌اند. برای تغییر جزئی symbolic؛ برای اعمال سیاست مشخص numeric خوانایی خوبی در مستند دارد.

چطور بیت اجرا را فقط برای مالک بگذارم؟

chmod u+x file یا با اکتال مناسب مثل ۷۰۰/۷۵۰/۷۵۵ بسته به گروه و others.

چه زمانی chmod نکنید؟

وقتی مشکل از مسیر اشتباه، بستهٔ خراب، یا سیاست SELinux است، chmod فقط رد گمراه‌کننده می‌سازد. وقتی مالکیت غلط است، اول هویت را درست کنید. وقتی فایل باید از بسته بیاید، با مدیر بسته نصب کنید نه کپی دستی با مجوز تصادفی.

تمرین کوتاه

در مسیر آزمایشی، فایلی بسازید، با نمادین u+x بدهید، با اکتال ۶۴۴ برگردانید، بعد یک دایرکتوری بسازید و x را از others بردارید و اثر را با کاربر دوم ببینید. این تمرین را قبل از اولین chmod روی Production انجام دهید.

bash

cd /tmp && mkdir chmod-lab && cd chmod-lab echo ok > f.txt chmod u+x f.txt; ls -l f.txt chmod 644 f.txt mkdir d && chmod 751 d ls -ld d

سیاست مجوز در مخزن Infrastructure as Code

chmodهای دستی روی سرور زنده بدون ثبت در Ansible یا اسکریپت deploy، در بازسازی بعدی محو می‌شوند و تیم را به باستان‌شناسی نیمه‌شب وادار می‌کنند. بهتر است حالت مطلوب مسیرها را در کد زیرساخت بنویسید: مالک، گروه، mode. همان کد روی staging و production یکسان اجرا شود.

در review قالب‌های IaC، به دنبال modeهای ۷۷۷ و ۶۶۶ بگردید. گاهی برای «راه‌افتادن تست» وارد می‌شوند و همان‌طور به main می‌رسند. سیاست ساده: هر mode گشاد باید کامنت توجیه داشته باشد یا در چک خودکار رد شود.

برای درخت‌هایی که هم فایل و هم دایرکتوری دارند، دو وظیفهٔ جدا در IaC بهتر از یک chmod بازگشتی همه‌کاره است؛ همان الگوی find type را بازتاب می‌دهد و خوانایی را بالا می‌برد.

chmod و فایل‌های نسخه‌شده در Git

Git بیت اجرا را تا حدی نگه می‌دارد ولی مدل کامل مجوز یونیکسی را بازتولید نمی‌کند. فرض نکنید clone روی سرور همان ۶۰۰ لازم برای Secret را می‌دهد. Secret را در Git نگذارید؛ برای اسکریپت‌های اجرایی، در pipeline یک گام صریح chmod +x بگذارید تا وابسته به umask توسعه‌دهنده نباشید.

روی ویندوز و بعضی سیستم‌های فایل شبکه‌ای، بیت اجرا رفتار متفاوتی دارد. اگر تیم مختلط است، گام CI که مجوز را نرمال می‌کند جلوی «روی مک من اجرا می‌شد» را می‌گیرد.

هوک‌های Git و اسکریپت‌های local که به +x نیاز دارند باید در README مسیر آماده‌سازی داشته باشند، نه اینکه هر تازه‌وارد یک ساعت روی Permission denied بماند.

نکتهٔ تکمیلی عملی (1)

در کار واقعی، تغییر مجوز بدون مشاهدهٔ اثر ناقص است. بعد از هر chmod مهم، همان عملیات شکست‌خورده را با هویت درست تکرار کنید و خروجی را ثبت کنید. اگر در محیط تیمی کار می‌کنید، فرمان و نتیجه را در تیکت بنویسید تا نفر بعدی همان مسیر را دوباره اختراع نکند. این عادت ساده بیش از حفظ جدول اکتال از تکرار حادثه جلوگیری می‌کند و به مرور الگوهای امن تیم را شکل می‌دهد.

ابزارهای مانیتورینگ پیکربندی و اسکن آسیب‌پذیری گاهی modeهای مشکوک را گزارش می‌کنند. به‌جای نادیده گرفتن هشدار، تصمیم بگیرید: یا mode را درست کنید، یا استثنا را مستند کنید. استثناهای بی‌مستند در ممیزی بعدی هزینه می‌سازند. برای مسیرهای موقت آزمایشی، تاریخ انقضا بگذارید تا درخت ۷۷۷ آزمایشی تا ابد روی سرور نماند.

به خاطر بسپارید که کپی فایل با cp ممکن است مجوز را از منبع یا از umask بگیرد بسته به گزینه‌ها و سیستم. بعد از کپی Secret یا اسکریپت، ls -l را چک کنید. در انتقال با scp و rsync هم همین حساسیت وجود دارد؛ flagهای حفظ مجوز را فقط وقتی می‌فهمید چه می‌کنند فعال کنید.

نکتهٔ تکمیلی عملی (2)

در کار واقعی، تغییر مجوز بدون مشاهدهٔ اثر ناقص است. بعد از هر chmod مهم، همان عملیات شکست‌خورده را با هویت درست تکرار کنید و خروجی را ثبت کنید. اگر در محیط تیمی کار می‌کنید، فرمان و نتیجه را در تیکت بنویسید تا نفر بعدی همان مسیر را دوباره اختراع نکند. این عادت ساده بیش از حفظ جدول اکتال از تکرار حادثه جلوگیری می‌کند و به مرور الگوهای امن تیم را شکل می‌دهد.

ابزارهای مانیتورینگ پیکربندی و اسکن آسیب‌پذیری گاهی modeهای مشکوک را گزارش می‌کنند. به‌جای نادیده گرفتن هشدار، تصمیم بگیرید: یا mode را درست کنید، یا استثنا را مستند کنید. استثناهای بی‌مستند در ممیزی بعدی هزینه می‌سازند. برای مسیرهای موقت آزمایشی، تاریخ انقضا بگذارید تا درخت ۷۷۷ آزمایشی تا ابد روی سرور نماند.

به خاطر بسپارید که کپی فایل با cp ممکن است مجوز را از منبع یا از umask بگیرد بسته به گزینه‌ها و سیستم. بعد از کپی Secret یا اسکریپت، ls -l را چک کنید. در انتقال با scp و rsync هم همین حساسیت وجود دارد؛ flagهای حفظ مجوز را فقط وقتی می‌فهمید چه می‌کنند فعال کنید.

خلاصه

chmod ابزار تغییر بیت‌های مجوز است، نه درمان همهٔ deniedها. اکتال برای سیاست‌های ثابت، نمادین برای تغییر دقیق، و find جدا برای فایل و دایرکتوری امن‌تر از -R کور است. حداقل دسترسی را حفظ کنید و با کاربر واقعی سرویس تست کنید.

قدم بعد: مالکیت را با chown درست کنید، سپس sudo را طوری تنظیم کنید که برای chmodهای سیستمی ردپا بماند.

منابع و مراجع

  • man7.org — chmod(1) — https://man7.org/linux/man-pages/man1/chmod.1.html
  • man7.org — inode(7) — https://man7.org/linux/man-pages/man7/inode.7.html
  • Ubuntu manpages — chmod(1) — https://manpages.ubuntu.com/manpages/noble/en/man1/chmod.1.html
  • man7.org — credentials(7) — https://man7.org/linux/man-pages/man7/credentials.7.html
  • POSIX chmod (opengroup) — https://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر موضوع این مقاله به سیستم یا محصول شما نزدیک است، می‌توانیم درباره دامنه واقعی صحبت کنیم.

اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، می‌توانید درباره پروژه صحبت کنیم.

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
مجوزهای فایل در لینوکس؛ خواندن، نوشتن و اجرا
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار
چرا همیشه به Kubernetes نیاز ندارید؟

عملیات و استقرار

مجوزهای فایل در لینوکس؛ خواندن، نوشتن و اجرا

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

چرا همیشه به Kubernetes نیاز ندارید؟

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید