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

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

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

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

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

خدمات

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

کاوش

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

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

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

شرکت

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

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

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

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

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

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

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

فرمان chown در لینوکس؛ تغییر مالک و گروه فایل

آموزش chown و chgrp: نحو user:group، بازگشتی -R، ریسک روی درخت سیستم، و هماهنگی با کاربر سرویس — بر اساس man chown.

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

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

·۲۹ شهریور ۱۴۰۵·11 دقیقه مطالعه
chownchgrpfile ownergroup ownershipchown -Rservice user
ترمینال و استیکی user و group

chown مخفف change owner است و مالک کاربر و در صورت نیاز گروه یک فایل یا دایرکتوری را عوض می‌کند. وقتی سرویس با کاربر myapp اجرا می‌شود ولی داده مال root است، chmod به‌تنهایی کافی نیست؛ باید مالکیت را درست کنید. برعکس، chown بی‌برنامه روی درخت سیستم می‌تواند بسته و سرویس را بشکند.

صفحهٔ راهنمای chown نحو user، user:group و گزینه‌هایی مثل -R را شرح می‌دهد. chgrp فقط گروه را عوض می‌کند. این مقاله الگوهای امن برای اپ، ریسک بازگشتی، تعامل با کانتینر، و مسیر عیب‌یابی را می‌دهد. مدل rwx در ۱۴۷ و chmod در ۱۴۸ مکمل این‌اند.

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

وایت‌برد chown به Owner و Group

پاسخ کوتاه

برای دادن درخت داده به کاربر سرویس: chown -R myapp:myapp /var/lib/myapp با دامنهٔ دقیق. نحو user:group هر دو را یکجا ست می‌کند. قبل از -R دامنه را با find ببینید. chown را روی /usr یا /etc کور اجرا نکنید. بعد از تغییر، با sudo -u myapp تست خواندن/نوشتن انجام دهید.

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

نحو رایج

bash

# فقط مالک کاربر sudo chown myapp /var/lib/myapp # مالک و گروه sudo chown myapp:myapp /var/lib/myapp # فقط گروه (یا chgrp) sudo chown :deploy /opt/myapp sudo chgrp deploy /opt/myapp ls -ld /var/lib/myapp

اگر گروه را خالی بگذارید و فقط user: بدهید، رفتار به نسخه و گزینه وابسته است؛ صریح نوشتن user:group خواناتر و کم‌ریسک‌تر است. نام‌ها از passwd و group حل می‌شوند؛ uid عددی هم مجاز است و در کانتینر گاهی لازم.

چرا مالکیت غلط می‌شود؟

  • استخراج آرشیو یا کپی با sudo که فایل را root می‌کند.
  • اجرای اولیهٔ سرویس با root و ساخت فایل در مسیر داده.
  • volume کانتینر با uid متفاوت از کاربر داخل Image.
  • اسکریپت deploy که با کاربر دیگر از CI می‌آید.

پیشگیری: کاربر سرویس جدا، دایرکتوری داده از قبل با chown درست، و عدم اجرای روزمره با root. اگر مجبور به sudo شدید، بعدش مالکیت آرتیفکت را برگردانید.

chown -R و محدودهٔ امن

بازگشتی روی /var/lib/myapp معقول است اگر همان درخت فقط مال همان اپ باشد. بازگشتی روی / یا /var فاجعه‌خیز است. بعضی سیستم‌ها از chown -R روی پیوندهای نمادین رفتار خاصی دارند؛ man همان نسخه را بخوانید و از --dereference یا نبود آن آگاه باشید.

bash

# دامنه find /var/lib/myapp -maxdepth 2 -printf '%u:%g %p\n' | head sudo chown -R myapp:myapp /var/lib/myapp

هماهنگی با گروه و مجوز

گاهی به‌جای عوض کردن مالک به یک نفر، گروه مشترک deploy می‌گذارید و با chmod گروهی نوشتن می‌دهید. این برای چند انسان مفید است؛ برای سرویس runtime معمولاً مالک همان کاربر سرویس تمیزتر است. ترکیب اشتباه: مالک root، گروه root، و others باز — یعنی همه می‌توانند بخوانند بدون ردپای هویت.

کانتینر و uid عددی

داخل کانتینر کاربر myapp ممکن است uid ۷۰۰۱ باشد؛ روی میزبان همان عدد مال کس دیگری است. وقتی bind mount می‌کنید، آنچه روی دیسک میزبان دیده می‌شود همان uid عددی است. راه‌حل‌ها: یکسان‌سازی uid، یا chown در entrypoint با آگاهی، یا volumeهای named با کاربر سازگار. نادیده گرفتن این موضوع منبع کلاسیک denied در Docker است.

جدول تصمیم

علائماقدام محتملهشدار
فایل مال root؛ سرویس non-rootchown به کاربر سرویسدامنه را محدود کنید
چند انسان روی یک درختگروه مشترک + chmod گروهیothers را باز نکنید
denied بعد از chownchmod و x والد را چک کنیدفقط مالکیت کافی نیست
کانتینر + volumeهم‌ترازی uidنام کاربر گمراه‌کننده است

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

  • chown -R root:root روی خانهٔ کاربر برای «درست شدن».
  • تغییر مالکیت کلیدهای SSH و شکستن دسترسی.
  • فراموش کردن گروه بعد از عوض کردن فقط user.
  • اجرای chown به‌جای درست کردن umask و کاربر سازنده.
  • تغییر مالکیت فایل‌های بسته به‌جای نصب مجدد.

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

تفاوت chown و chmod چیست؟

chown هویت مالک/گروه را عوض می‌کند؛ chmod بیت‌های rwx را.

آیا کاربر عادی می‌تواند فایلش را به دیگری ببخشد؟

روی لینوکس معمولی معمولاً خیر؛ فقط root مالک کاربر را عوض می‌کند.

chown روی لینک نمادین چه می‌کند؟

بسته به گزینه‌ها ممکن است خود لینک یا هدف را تغییر دهد؛ قبل از -R روی درخت دارای لینک، man را چک کنید.

چرا بعد از chown هنوز خطای مجوز دارم؟

بیت‌ها، والدها، یا MAC. ls -l و namei را ببینید.

chgrp چه زمانی کافی است؟

وقتی مالک کاربر درست است و فقط گروه باید عوض شود.

تمرین

bash

sudo useradd -r -s /usr/sbin/nologin labapp || true sudo mkdir -p /var/tmp/labapp-data sudo chown labapp:labapp /var/tmp/labapp-data sudo -u labapp touch /var/tmp/labapp-data/ok ls -l /var/tmp/labapp-data

اگر touch با labapp موفق شد، مالکیت درست کار کرده است.

جمع‌بندی عملیاتی و هشدارهای میدانی (1)

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

بسیاری از حوادث از ترکیب عجله و sudo می‌آیند. وقتی denied می‌بینید، سه دقیقه برای namei و id و خواندن مستند همان سرویس سرمایه‌گذاری کنید. کوتاه‌کردن این سه دقیقه با ۷۷۷ یا chown -R روی درخت بزرگ، ساعت‌ها بازیابی می‌سازد. فرهنگ تیم باید پاداش عجلهٔ بی‌مدل را قطع کند.

در کانتینر و ابر، هویت عددی کاربر و نقشهٔ volume را در کنار مجوز کلاسیک ببینید. درست کردن فقط یک لایه و نادیده گرفتن لایهٔ دیگر، باگهای «گاهی کار می‌کند» می‌سازد که فقط در Production با دادهٔ واقعی دیده می‌شوند. محیط staging باید حداقل از نظر uid و مسیر volume شبیه باشد.

مستند کوتاه داخلی بهتر از حافظهٔ فردی است: کدام کاربر سرویس، کدام مسیر داده، کدام mode مطلوب، کدام Secret کجا می‌نشیند. این چهار خط را کنار واحد systemd نگه دارید تا onboarding و پاسخ حادثه سریع‌تر شود.

جمع‌بندی عملیاتی و هشدارهای میدانی (2)

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

بسیاری از حوادث از ترکیب عجله و sudo می‌آیند. وقتی denied می‌بینید، سه دقیقه برای namei و id و خواندن مستند همان سرویس سرمایه‌گذاری کنید. کوتاه‌کردن این سه دقیقه با ۷۷۷ یا chown -R روی درخت بزرگ، ساعت‌ها بازیابی می‌سازد. فرهنگ تیم باید پاداش عجلهٔ بی‌مدل را قطع کند.

در کانتینر و ابر، هویت عددی کاربر و نقشهٔ volume را در کنار مجوز کلاسیک ببینید. درست کردن فقط یک لایه و نادیده گرفتن لایهٔ دیگر، باگهای «گاهی کار می‌کند» می‌سازد که فقط در Production با دادهٔ واقعی دیده می‌شوند. محیط staging باید حداقل از نظر uid و مسیر volume شبیه باشد.

مستند کوتاه داخلی بهتر از حافظهٔ فردی است: کدام کاربر سرویس، کدام مسیر داده، کدام mode مطلوب، کدام Secret کجا می‌نشیند. این چهار خط را کنار واحد systemd نگه دارید تا onboarding و پاسخ حادثه سریع‌تر شود.

جمع‌بندی عملیاتی و هشدارهای میدانی (3)

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

بسیاری از حوادث از ترکیب عجله و sudo می‌آیند. وقتی denied می‌بینید، سه دقیقه برای namei و id و خواندن مستند همان سرویس سرمایه‌گذاری کنید. کوتاه‌کردن این سه دقیقه با ۷۷۷ یا chown -R روی درخت بزرگ، ساعت‌ها بازیابی می‌سازد. فرهنگ تیم باید پاداش عجلهٔ بی‌مدل را قطع کند.

در کانتینر و ابر، هویت عددی کاربر و نقشهٔ volume را در کنار مجوز کلاسیک ببینید. درست کردن فقط یک لایه و نادیده گرفتن لایهٔ دیگر، باگهای «گاهی کار می‌کند» می‌سازد که فقط در Production با دادهٔ واقعی دیده می‌شوند. محیط staging باید حداقل از نظر uid و مسیر volume شبیه باشد.

مستند کوتاه داخلی بهتر از حافظهٔ فردی است: کدام کاربر سرویس، کدام مسیر داده، کدام mode مطلوب، کدام Secret کجا می‌نشیند. این چهار خط را کنار واحد systemd نگه دارید تا onboarding و پاسخ حادثه سریع‌تر شود.

جمع‌بندی عملیاتی و هشدارهای میدانی (4)

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

بسیاری از حوادث از ترکیب عجله و sudo می‌آیند. وقتی denied می‌بینید، سه دقیقه برای namei و id و خواندن مستند همان سرویس سرمایه‌گذاری کنید. کوتاه‌کردن این سه دقیقه با ۷۷۷ یا chown -R روی درخت بزرگ، ساعت‌ها بازیابی می‌سازد. فرهنگ تیم باید پاداش عجلهٔ بی‌مدل را قطع کند.

در کانتینر و ابر، هویت عددی کاربر و نقشهٔ volume را در کنار مجوز کلاسیک ببینید. درست کردن فقط یک لایه و نادیده گرفتن لایهٔ دیگر، باگهای «گاهی کار می‌کند» می‌سازد که فقط در Production با دادهٔ واقعی دیده می‌شوند. محیط staging باید حداقل از نظر uid و مسیر volume شبیه باشد.

مستند کوتاه داخلی بهتر از حافظهٔ فردی است: کدام کاربر سرویس، کدام مسیر داده، کدام mode مطلوب، کدام Secret کجا می‌نشیند. این چهار خط را کنار واحد systemd نگه دارید تا onboarding و پاسخ حادثه سریع‌تر شود.

جمع‌بندی عملیاتی و هشدارهای میدانی (5)

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

بسیاری از حوادث از ترکیب عجله و sudo می‌آیند. وقتی denied می‌بینید، سه دقیقه برای namei و id و خواندن مستند همان سرویس سرمایه‌گذاری کنید. کوتاه‌کردن این سه دقیقه با ۷۷۷ یا chown -R روی درخت بزرگ، ساعت‌ها بازیابی می‌سازد. فرهنگ تیم باید پاداش عجلهٔ بی‌مدل را قطع کند.

در کانتینر و ابر، هویت عددی کاربر و نقشهٔ volume را در کنار مجوز کلاسیک ببینید. درست کردن فقط یک لایه و نادیده گرفتن لایهٔ دیگر، باگهای «گاهی کار می‌کند» می‌سازد که فقط در Production با دادهٔ واقعی دیده می‌شوند. محیط staging باید حداقل از نظر uid و مسیر volume شبیه باشد.

مستند کوتاه داخلی بهتر از حافظهٔ فردی است: کدام کاربر سرویس، کدام مسیر داده، کدام mode مطلوب، کدام Secret کجا می‌نشیند. این چهار خط را کنار واحد systemd نگه دارید تا onboarding و پاسخ حادثه سریع‌تر شود.

خلاصه

chown مالکیت را با هویت سرویس هم‌تراز می‌کند. دامنه را محدود کنید، با گروه و chmod هماهنگ کنید، و در کانتینر uid را جدی بگیرید. قدم بعد: دسترسی ممتاز را با sudo محدود و قابل‌حسابرسی کنید.

منابع و مراجع

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

نویسنده

سا

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

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

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

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

خدمات مرتبط

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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