دستور chmod دسترسی فایلها و پوشهها را تعیین میکند (چه کسی بخواند، بنویسد یا اجرا کند) و chown مالک و گروه آنها را عوض میکند. هر فایل در لینوکس سه دسته دسترسی دارد: مالک (u)، گروه (g) و بقیه (o)، و هر دسته سه حق خواندن (r)، نوشتن (w) و اجرا (x). مقدارهای رایج 644 برای فایلها و 755 برای پوشهها و برنامههاست.
درک درست دسترسیها پایه امنیت و عیبیابی سرور است. بسیاری از خطاهای 403 و 500 وبسرور، آپلود نشدن فایل در وردپرس و خطای «Permission denied» به همین موضوع برمیگردند. دیگر ابزارهای مدیریت کاربر و دسترسی در مدیریت دسترسی در لینوکس آمده و این راهنما روی chmod و chown تمرکز دارد.
خواندن خروجی ls -l
ls -l
-rwxr-xr-- 1 deploy www-data 1240 Oct 5 10:00 script.sh
drwxr-x--- 2 deploy www-data 4096 Oct 5 10:00 privateدر ستون اول، حرف اول نوع است (خط تیره برای فایل و d برای پوشه). نه حرف بعدی سه دسته سهتاییاند: مالک rwx، گروه r-x و بقیه r--. بعد از آن شماره لینک، نام مالک (deploy)، نام گروه (www-data)، اندازه و تاریخ و نام میآید. در خط اول، مالک میتواند بخواند، بنویسد و اجرا کند، گروه بخواند و اجرا کند، و بقیه فقط بخوانند.
معنی r، w و x
| حرف | روی فایل | روی پوشه |
|---|---|---|
| r | خواندن محتوا | دیدن فهرست نام فایلها |
| w | تغییر محتوا | ساخت، حذف و تغییر نام فایلهای داخل پوشه |
| x | اجرای فایل بهعنوان برنامه | وارد شدن به پوشه (cd) و دسترسی به فایلهای داخل آن |
برای وارد شدن به پوشه به x نیاز دارید. حذف یک فایل هم به دسترسی نوشتن روی پوشه بستگی دارد و دسترسی خود فایل در آن نقشی ندارد.
دستور chmod با عدد
هر حق یک مقدار دارد: r برابر 4، w برابر 2 و x برابر 1. با جمع آنها، هر دسته یک رقم میشود و سه رقم برای مالک، گروه و بقیه نوشته میشود:
| عدد | معنی | کاربرد |
|---|---|---|
| 7 | rwx | همه حقها |
| 6 | rw- | خواندن و نوشتن |
| 5 | r-x | خواندن و اجرا |
| 4 | r– | فقط خواندن |
| 0 | — | هیچ |
حالتهای رایج:
chmod 644 file.txt # مالک بخواند و بنویسد، بقیه فقط بخوانند
chmod 755 script.sh # مالک همه، بقیه بخوانند و اجرا کنند
chmod 600 secret.key # فقط مالک؛ برای کلید و فایل رمز
chmod 700 private/ # فقط مالک؛ برای پوشه خصوصیدستور chmod با حرف
بهجای عدد میتوانید تغییر را با حرف بنویسید. دستهها u (مالک)، g (گروه)، o (بقیه) و a (همه) هستند و عملگرها + (افزودن)، - (حذف) و = (تعیین دقیق):
chmod u+x script.sh # مالک اجرا هم بتواند
chmod g-w file.txt # گروه نتواند بنویسد
chmod o-rwx private/ # بقیه هیچ دسترسی نداشته باشند
chmod a+r readme.txt # همه بتوانند بخواننداین روش وقتی فقط یک حق را عوض میکنید سادهتر و ایمنتر است، چون بقیه حقها دست نمیخورند.
تغییر بازگشتی
گزینه -R تغییر را روی همه فایلها و زیرپوشهها اعمال میکند. دقت کنید که chmod -R 755 روی کل پوشه سایت، همه فایلها را اجرایی میکند که لازم و درست نیست. بهتر است پوشهها و فایلها را جدا تنظیم کنید:
find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;اولی فقط پوشهها و دومی فقط فایلها را تغییر میدهد. این کار برای سایتهای وردپرسی و PHP روش معمول است.
chown: تغییر مالک و گروه
sudo chown deploy file.txt # فقط مالک
sudo chown deploy:www-data file.txt # مالک و گروه
sudo chown :www-data file.txt # فقط گروه
sudo chown -R www-data:www-data /var/www/example.comفقط root میتواند مالک فایل را عوض کند. نام کاربر و گروه وبسرور بسته به توزیع فرق دارد: در Debian و Ubuntu برابر www-data و در AlmaLinux و Rocky برای Apache برابر apache و برای Nginx برابر nginx است. نام درست را با ps aux | grep nginx یا grep ^user /etc/nginx/nginx.conf پیدا کنید.
دسترسی مناسب برای سایت و وردپرس
روی وبسروری که با کاربر خودش اجرا میشود، قاعده معمول این است که فایلها را کاربر دیگری (کاربر دیپلوی) داشته باشد، تا برنامه نتواند کد خودش را عوض کند، و فقط پوشههایی که باید در آنها نوشته شود برای وبسرور قابل نوشتن باشند. در وردپرس، پوشه wp-content/uploads باید برای کاربر وبسرور قابل نوشتن باشد. فایل wp-config.php را فقط برای مالک و گروه قابل خواندن کنید:
chmod 640 wp-config.phpهرگز سایت یا پوشهای را با 777 رها نکنید. این مقدار به همه کاربران سیستم اجازه نوشتن میدهد و در سرور مشترک یا هنگام آسیبپذیری یک افزونه، راه آلوده شدن فایلهاست. روش پاکسازی بعد از آلودگی در رفع هک و پاکسازی مالور آمده است. نصب کامل وردپرس همراه با دسترسیهای درست در راهنمای نصب وردپرس روی اوبونتو هم هست.
بیتهای ویژه: setuid، setgid و sticky
| بیت | عدد | اثر |
|---|---|---|
| setuid | 4000 | برنامه با دسترسی مالک فایل اجرا میشود (مثل passwd) |
| setgid | 2000 | فایلهای جدید داخل پوشه، گروه همان پوشه را میگیرند |
| sticky | 1000 | فقط مالک فایل میتواند آن را در پوشه حذف کند (مثل /tmp) |
مثال: chmod 2775 /srv/shared پوشه مشترک تیمی میسازد که فایلهای جدید گروه آن را میگیرند. بیت setuid روی برنامهها خطرناک است؛ فهرست فایلهایی که آن را دارند را گاهی بررسی کنید: find / -perm -4000 -type f 2>/dev/null. فایل ناشناسی که setuid دارد نشانهای است که باید جدی گرفته شود.
umask: دسترسی پیشفرض فایلهای جدید
umask تعیین میکند فایلها و پوشههای تازه با چه دسترسی ساخته شوند. مقدار رایج 022 به فایل جدید 644 و به پوشه 755 میدهد. برای سختگیری بیشتر 027 بگذارید تا بقیه هیچ دسترسی نداشته باشند. مقدار فعلی را umask نشان میدهد.
ACL: دسترسی دقیقتر
اگر باید به یک کاربر خاص دسترسی دهید و نمیخواهید مالک یا گروه را عوض کنید، فهرست کنترل دسترسی (ACL) کمک میکند:
sudo apt install acl
sudo setfacl -m u:alice:rx /srv/reports
getfacl /srv/reportsبا ACL هر کاربر یا گروه دسترسی جداگانه میگیرد. در ls -l وجود ACL با علامت + آخر ستون دسترسی دیده میشود.
خطاهای رایج
| نشانه | علت و راه حل |
|---|---|
Permission denied هنگام اجرای اسکریپت | بیت اجرا نیست؛ chmod +x script.sh |
Permission denied هنگام ورود به پوشه | دسترسی x روی پوشه یا یکی از پوشههای بالاتر نیست |
| 403 Forbidden در وبسرور | کاربر وبسرور به فایل یا یکی از پوشههای مسیر دسترسی ندارد |
| وردپرس نمیتواند آپلود یا بهروزرسانی کند | پوشه برای کاربر وبسرور قابل نوشتن نیست؛ مالکیت را بررسی کنید |
chown: changing ownership ... Operation not permitted | بدون sudo اجرا شده |
| فایل را حذف نمیتوانم | حق نوشتن روی پوشه ندارید یا sticky bit مانع است |
سوالات متداول
فرق 644 و 755 چیست؟
هر دو مالک را مجاز به خواندن و نوشتن میکنند، ولی 755 بیت اجرا را هم برای همه میگذارد. برای پوشهها و برنامهها 755 و برای فایلهای معمولی 644 به کار میرود.
777 چه خطری دارد؟
همه کاربران سیستم میتوانند فایل را بخوانند، بنویسند و اجرا کنند. روی وبسرور، آسیبپذیری یک افزونه یا کاربر دیگر میتواند کد سایت را عوض کند.
چطور بفهمم یک فایل مالکش کیست؟
با ls -l مالک و گروه را میبینید و با stat file جزئیات بیشتر.
رمز و کلید خصوصی چه دسترسی داشته باشند؟
فقط مالک: 600 برای فایل و 700 برای پوشه. SSH کلید خصوصی با دسترسی بازتر را اصلاً قبول نمیکند.





