دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
دانشنامه مارال هاست دانشنامه مارال هاست
دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
لینوکس
  • Folder icon closed Folder open iconآشنایی با لینوکس (Linux Fundamentals)
  • Folder icon closed Folder open iconتوزیع‌های مختلف لینوکس (Linux Distributions)
  • Folder icon closed Folder open iconFHS؛ آشنایی با ساختار فایل‌ و پوشه‌های لینوکسی
  • Folder icon closed Folder open iconمهم‌ترین دستورات پایه‌ای برای هر sysadmin
  • Folder icon closed Folder open iconمدیریت فایل و پوشه (file & directory management) در لینوکس
  • Folder icon closed Folder open iconآموزش ویرایش فایل‌های متنی در لینوکس با Nano و Vim
  • Folder icon closed Folder open iconآشنایی با users، groups و ساختار مدیریت کاربران در لینوکس
  • Folder icon closed Folder open iconآموزش Permission و Ownership در لینوکس
  • Folder icon closed Folder open iconآشنایی با Root و sudo
  • Folder icon closed Folder open iconآشنایی با Processها در لینوکس
  • Folder icon closed Folder open iconتغییر Hostname در لینوکس
  • Folder icon closed Folder open iconتنظیم Timezone در لینوکس
  • Folder icon closed Folder open iconتنظیم NTP در لینوکس
  • Folder icon closed Folder open iconبروزرسانی سیستم در لینوکس
  • Folder icon closed Folder open iconساخت کاربر جدید در لینوکس
  • Folder icon closed Folder open iconایجاد کاربران و گروه ها در لینوکس
  • Folder icon closed Folder open iconآموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها
  • Folder icon closed Folder open iconآموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید
  • Folder icon closed Folder open iconآموزش فایل sudoers؛ مدیریت دسترسی کاربران به دستورات مدیریتی در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chown در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chmod در لینوکس
  • Folder icon closed Folder open iconSticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی
  • Folder icon closed Folder open iconآموزش SUID در لینوکس؛ اجرای برنامه‌ها با دسترسی مالک فایل
  • Folder icon closed Folder open iconآموزش SGID در لینوکس؛ مدیریت دسترسی گروه‌ها و اجرای برنامه‌ها
لینوکس

Sticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی

Sticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی

مقدمه

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

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

پوشه /tmp یکی از شناخته‌شده‌ترین نمونه‌های استفاده از Sticky Bit در لینوکس است.

در این مقاله موارد زیر را بررسی می‌کنیم:

  • Sticky Bit چیست؟
  • Sticky Bit چگونه امنیت پوشه را افزایش می‌دهد؟
  • تفاوت آن با Permission معمولی
  • فعال‌سازی و حذف Sticky Bit
  • تفاوت t و T
  • آزمایش عملی با چند کاربر
  • ترکیب Sticky Bit با SetGID و ACL
  • کاربرد Sticky Bit در پوشه‌های اشتراکی
  • رفع خطاهای رایج

Sticky Bit چیست؟

Sticky Bit یکی از Permissionهای ویژه لینوکس است که معمولاً روی پوشه‌های اشتراکی استفاده می‌شود.

در یک پوشه معمولی که همه کاربران مجوز write و execute دارند، هر کاربر می‌تواند فایل‌های داخل پوشه را حذف یا تغییر نام دهد؛ حتی اگر مالک آن فایل نباشد.

با فعال‌شدن Sticky Bit، حذف یا تغییر نام فایل فقط توسط افراد زیر امکان‌پذیر خواهد بود:

File owner
Directory owner
root user

سایر کاربران نمی‌توانند فایل متعلق به کاربر دیگری را حذف یا Rename کنند.

Sticky Bit مانع خواندن یا ویرایش محتوای فایل نمی‌شود. این قابلیت فقط حذف و تغییر نام Entryهای داخل پوشه را محدود می‌کند.


چرا Permission فایل به‌تنهایی مانع حذف نمی‌شود؟

در لینوکس، حذف یک فایل بیشتر به Permission پوشه والد وابسته است تا Permission خود فایل.

برای مثال، ممکن است فایل دارای Permission زیر باشد:

-rw-------

یعنی فقط مالک فایل اجازه خواندن و نوشتن دارد.

اما اگر پوشه والد برای سایر کاربران دارای Permission نوشتن و اجرا باشد، کاربر دیگری ممکن است بتواند نام فایل را از پوشه حذف کند.

برای حذف فایل، سیستم معمولاً Permissionهای زیر را روی پوشه والد بررسی می‌کند:

Write permission
Execute permission

به همین دلیل، در پوشه‌های عمومی قابل‌نوشتن باید Sticky Bit فعال شود.


نمونه پوشه ناامن بدون Sticky Bit

فرض کنید پوشه‌ای با Permission زیر ایجاد شده است:

sudo mkdir /srv/shared
sudo chmod 777 /srv/shared

بررسی:

ls -ld /srv/shared

خروجی:

drwxrwxrwx 2 root root 4096 Jul 27 10:00 /srv/shared

در این پوشه:

Owner: Full access
Group: Full access
Other users: Full access

همه کاربران می‌توانند:

  • فایل ایجاد کنند.
  • پوشه ایجاد کنند.
  • فایل‌های دیگران را تغییر نام دهند.
  • فایل‌های دیگران را حذف کنند.

این وضعیت برای یک پوشه اشتراکی عمومی ناامن است.


فعال‌کردن Sticky Bit

برای فعال‌کردن Sticky Bit از دستور زیر استفاده کنید:

sudo chmod +t /srv/shared

بررسی:

ls -ld /srv/shared

خروجی:

drwxrwxrwt 2 root root 4096 Jul 27 10:00 /srv/shared

حرف t در انتهای Permission نشان می‌دهد Sticky Bit فعال است.


فعال‌سازی با روش عددی

Sticky Bit در روش Octal مقدار 1 دارد.

برای فعال‌کردن آن روی پوشه‌ای با Permission 777:

sudo chmod 1777 /srv/shared

عدد اول مربوط به Special Permission و سه رقم بعدی مربوط به Permission معمولی هستند:

1 = Sticky Bit
7 = Owner permissions
7 = Group permissions
7 = Other permissions

نتیجه:

drwxrwxrwt

بررسی Sticky Bit با stat

برای نمایش Permission عددی:

stat -c '%a %A %U %G %n' /srv/shared

خروجی:

1777 drwxrwxrwt root root /srv/shared

وجود رقم 1 در ابتدای Permission عددی نشان‌دهنده Sticky Bit است.


پوشه /tmp و Sticky Bit

پوشه /tmp برای ذخیره فایل‌های موقت برنامه‌ها و کاربران استفاده می‌شود. تقریباً همه کاربران اجازه ایجاد فایل داخل آن را دارند.

Permission آن را بررسی کنید:

ls -ld /tmp

خروجی معمول:

drwxrwxrwt 15 root root 4096 Jul 27 10:00 /tmp

Permission عددی:

stat -c '%a %A %n' /tmp

خروجی:

1777 drwxrwxrwt /tmp

این تنظیم به همه کاربران اجازه ایجاد فایل می‌دهد، اما Sticky Bit مانع حذف فایل کاربران دیگر می‌شود.

بدون Sticky Bit، هر کاربر محلی می‌توانست فایل‌های موقت کاربران یا سرویس‌های دیگر را حذف کند.


تفاوت t و T

Sticky Bit ممکن است در خروجی ls -l با حرف کوچک t یا حرف بزرگ T نمایش داده شود.

حرف کوچک t

اگر Sticky Bit فعال باشد و بخش Other دارای مجوز Execute باشد، حرف کوچک t نمایش داده می‌شود:

drwxrwxrwt

این حالت معمول و کاربردی است.


حرف بزرگ T

اگر Sticky Bit فعال باشد، اما Other مجوز Execute نداشته باشد، حرف بزرگ T نمایش داده می‌شود:

drwxrwxrwT

برای ایجاد این حالت:

sudo chmod 1766 /srv/shared

بررسی:

ls -ld /srv/shared

خروجی:

drwxrw-rwT 2 root root 4096 Jul 27 10:00 /srv/shared

در این وضعیت کاربران بخش Other مجوز ورود یا Traverse پوشه را ندارند؛ بنابراین پوشه برای استفاده عمومی معمولاً کاربردی نیست.

برای اصلاح:

sudo chmod 1777 /srv/shared

حذف Sticky Bit

برای حذف Sticky Bit:

sudo chmod -t /srv/shared

بررسی:

ls -ld /srv/shared

خروجی:

drwxrwxrwx 2 root root 4096 Jul 27 10:00 /srv/shared

با روش عددی:

sudo chmod 0777 /srv/shared

پس از حذف Sticky Bit، کاربران دارای write و execute ممکن است دوباره بتوانند فایل‌های دیگران را حذف کنند.


آزمایش عملی Sticky Bit

برای درک عملکرد Sticky Bit، دو کاربر آزمایشی ایجاد می‌کنیم.

مرحله اول: ایجاد کاربران

sudo useradd -m -s /bin/bash ali
sudo useradd -m -s /bin/bash reza

در Ubuntu می‌توان از دستور زیر نیز استفاده کرد:

sudo adduser ali
sudo adduser reza

بررسی:

id ali
id reza

مرحله دوم: ایجاد پوشه اشتراکی بدون Sticky Bit

sudo mkdir -p /srv/sticky-test
sudo chmod 777 /srv/sticky-test

بررسی:

ls -ld /srv/sticky-test

خروجی:

drwxrwxrwx 2 root root 4096 Jul 27 10:00 /srv/sticky-test

مرحله سوم: ایجاد فایل توسط کاربر ali

sudo -u ali touch /srv/sticky-test/ali-file.txt

بررسی:

ls -l /srv/sticky-test

خروجی:

-rw-r--r-- 1 ali ali 0 Jul 27 10:01 ali-file.txt

مرحله چهارم: حذف فایل ali توسط reza

sudo -u reza rm /srv/sticky-test/ali-file.txt

چون پوشه 777 است و Sticky Bit ندارد، حذف معمولاً موفق خواهد بود.

بررسی:

ls -l /srv/sticky-test

فایل دیگر وجود نخواهد داشت.


مرحله پنجم: فعال‌کردن Sticky Bit

sudo chmod 1777 /srv/sticky-test

بررسی:

ls -ld /srv/sticky-test

خروجی:

drwxrwxrwt 2 root root 4096 Jul 27 10:02 /srv/sticky-test

مرحله ششم: ایجاد دوباره فایل

sudo -u ali touch /srv/sticky-test/ali-file.txt

مرحله هفتم: تلاش reza برای حذف فایل

sudo -u reza rm /srv/sticky-test/ali-file.txt

خروجی موردانتظار:

rm: cannot remove '/srv/sticky-test/ali-file.txt': Operation not permitted

Sticky Bit مانع حذف فایل شده است.


مرحله هشتم: حذف فایل توسط مالک

کاربر ali می‌تواند فایل خودش را حذف کند:

sudo -u ali rm /srv/sticky-test/ali-file.txt

این دستور باید موفق باشد.


مرحله نهم: حذف فایل توسط root

کاربر root نیز می‌تواند فایل را حذف کند:

sudo rm /srv/sticky-test/ali-file.txt

کاربر root تحت محدودیت Sticky Bit قرار نمی‌گیرد.


Sticky Bit و تغییر نام فایل

Sticky Bit علاوه بر حذف، تغییر نام فایل‌های متعلق به دیگران را نیز محدود می‌کند.

ایجاد فایل:

sudo -u ali touch /srv/sticky-test/ali-file.txt

تلاش کاربر دیگر برای تغییر نام:

sudo -u reza \
mv /srv/sticky-test/ali-file.txt \
/srv/sticky-test/renamed.txt

خروجی موردانتظار:

mv: cannot move '/srv/sticky-test/ali-file.txt' to '/srv/sticky-test/renamed.txt': Operation not permitted

مالک فایل همچنان می‌تواند نام آن را تغییر دهد:

sudo -u ali \
mv /srv/sticky-test/ali-file.txt \
/srv/sticky-test/renamed.txt

آیا Sticky Bit مانع ویرایش فایل می‌شود؟

خیر. Sticky Bit فقط حذف یا تغییر نام فایل را کنترل می‌کند.

اگر فایل متعلق به ali دارای Permission زیر باشد:

-rw-rw-rw-

کاربر reza ممکن است همچنان بتواند محتوای آن را تغییر دهد:

sudo -u reza \
bash -c 'echo "Modified data" >> /srv/sticky-test/ali-file.txt'

برای جلوگیری از ویرایش، Permission خود فایل باید محدود شود:

sudo chmod 600 /srv/sticky-test/ali-file.txt

یا:

sudo chmod 640 /srv/sticky-test/ali-file.txt

بنابراین باید دو موضوع جداگانه مدیریت شوند:

Sticky Bit: Delete and rename protection
File permissions: Read and write protection

آیا Sticky Bit مانع خواندن فایل می‌شود؟

خیر. اگر فایل Permission خواندن برای Group یا Other داشته باشد، سایر کاربران می‌توانند آن را بخوانند.

برای مثال:

-rw-r--r--

کاربر دیگر می‌تواند اجرا کند:

sudo -u reza cat /srv/sticky-test/ali-file.txt

برای محدودکردن خواندن:

sudo chmod 600 /srv/sticky-test/ali-file.txt

Sticky Bit جایگزین Permission فایل نیست.


چه کسی می‌تواند فایل را در پوشه Sticky حذف کند؟

در یک پوشه دارای Sticky Bit، حذف یا تغییر نام فایل توسط موارد زیر مجاز است:

File owner
Directory owner
root user

برای مثال اگر پوشه متعلق به کاربر sharedadmin باشد، این کاربر می‌تواند فایل کاربران دیگر را حذف کند؛ حتی اگر مالک فایل نباشد.

بررسی مالک پوشه:

stat -c '%U %G %a %n' /srv/shared

خروجی:

sharedadmin developers 1777 /srv/shared

در این حالت sharedadmin به‌عنوان Directory Owner اجازه مدیریت فایل‌های داخل پوشه را دارد.


کاربرد Sticky Bit در پوشه‌های اشتراکی

Sticky Bit در سناریوهای زیر کاربرد دارد:

  • پوشه‌های موقت عمومی
  • Upload Directory مشترک
  • پوشه تبادل فایل کاربران
  • محیط‌های آموزشی چندکاربره
  • سرورهای Shell مشترک
  • پوشه‌های پردازش Job
  • پوشه‌های Queue عمومی
  • محیط‌های Build اشتراکی
  • پوشه‌های Drop-off
  • برخی مسیرهای Cache عمومی

Sticky Bit برای پوشه Upload

فرض کنید کاربران باید بتوانند داخل پوشه‌ای فایل آپلود کنند، اما نباید فایل‌های یکدیگر را حذف کنند.

ایجاد پوشه:

sudo mkdir -p /srv/uploads

تنظیم مالکیت:

sudo chown root:uploaders /srv/uploads

تنظیم Permission همراه Sticky Bit:

sudo chmod 1770 /srv/uploads

بررسی:

ls -ld /srv/uploads

خروجی:

drwxrwx--T 2 root uploaders 4096 Jul 27 10:00 /srv/uploads

در این مثال Other هیچ دسترسی ندارد و گروه uploaders مجوز کامل دارد. چون Execute بخش Other فعال نیست، Sticky Bit در بخش آخر با T دیده می‌شود؛ اما کاربران گروه از Permission گروه استفاده می‌کنند.

برای پوشه عمومی‌تر:

sudo chmod 1777 /srv/uploads

ترکیب Sticky Bit با SetGID

Sticky Bit و SetGID دو کاربرد متفاوت دارند.

Sticky Bit

از حذف یا تغییر نام فایل‌های دیگران جلوگیری می‌کند.

SetGID

باعث می‌شود فایل‌ها و پوشه‌های جدید، گروه پوشه والد را به ارث ببرند.

می‌توان هر دو را هم‌زمان فعال کرد.

مقدار عددی:

1 = Sticky Bit
2 = SetGID

ترکیب آن‌ها:

3 = Sticky Bit and SetGID

مثال:

sudo mkdir -p /srv/team-share
sudo chown root:developers /srv/team-share
sudo chmod 3770 /srv/team-share

بررسی:

ls -ld /srv/team-share

خروجی:

drwxrws--T 2 root developers 4096 Jul 27 10:00 /srv/team-share

در این پوشه:

  • اعضای گروه developers می‌توانند فایل ایجاد کنند.
  • فایل‌های جدید گروه developers را به ارث می‌برند.
  • کاربران نمی‌توانند فایل‌های متعلق به یکدیگر را حذف کنند.
  • سایر کاربران هیچ دسترسی ندارند.

حالت عمومی‌تر SetGID و Sticky Bit

sudo chmod 3777 /srv/team-share

خروجی:

drwxrwsrwt

این Permission بسیار باز است و فقط در سناریوهای عمومی خاص باید استفاده شود.


ترکیب Sticky Bit با umask

Sticky Bit مجوز فایل‌های جدید را تعیین نمی‌کند. Permission فایل‌های جدید همچنان تحت تأثیر umask و Mode درخواست‌شده توسط برنامه است.

برای مثال، با umask برابر 022:

umask 022
touch /srv/shared/file.txt

فایل معمولاً با Permission زیر ایجاد می‌شود:

644

با umask برابر 077:

umask 077
touch /srv/shared/private.txt

Permission معمولاً:

600

Sticky Bit فقط مانع حذف یا Rename فایل توسط سایر کاربران می‌شود.


ترکیب Sticky Bit با ACL

در پوشه‌های پیچیده می‌توان Sticky Bit را همراه ACL استفاده کرد.

فرض کنید گروه developers باید امکان ایجاد فایل داشته باشد و کاربر auditor فقط فایل‌ها را مشاهده کند.

sudo mkdir -p /srv/project-share
sudo chown root:developers /srv/project-share
sudo chmod 3770 /srv/project-share

تعریف ACL برای auditor:

sudo setfacl -m u:auditor:r-x /srv/project-share

تعریف Default ACL:

sudo setfacl -m \
d:u::rwx,\
d:g::rwx,\
d:u:auditor:r--,\
d:m::rwx,\
d:o::--- \
/srv/project-share

بررسی:

getfacl /srv/project-share

Sticky Bit همچنان حذف و Rename را کنترل می‌کند و ACL دسترسی خواندن و نوشتن را مدیریت می‌کند.


Sticky Bit روی فایل معمولی

در سیستم‌های قدیمی Unix، Sticky Bit روی فایل اجرایی کاربرد دیگری داشت و باعث نگهداری برنامه در حافظه یا Swap می‌شد.

در لینوکس مدرن، Sticky Bit روی فایل معمولی عموماً نادیده گرفته می‌شود یا کاربرد عملی متداولی ندارد.

مثال:

chmod +t application

ممکن است Bit روی فایل ثبت شود:

stat -c '%a %A %n' application

اما نباید برای امنیت فایل‌های معمولی به Sticky Bit متکی بود.

کاربرد اصلی Sticky Bit در لینوکس امروزی روی Directoryها است.


پیدا کردن پوشه‌های دارای Sticky Bit

برای جست‌وجوی پوشه‌های دارای Sticky Bit:

sudo find / -xdev -type d -perm -1000 -ls 2>/dev/null

گزینه‌ها:

-xdev = Stay on the current filesystem
-type d = Search directories
-perm -1000 = Match Sticky Bit

برای جست‌وجو در یک مسیر مشخص:

find /srv -type d -perm -1000 -ls

پیدا کردن پوشه‌های World-Writable بدون Sticky Bit

پوشه‌هایی که برای همه قابل‌نوشتن هستند اما Sticky Bit ندارند، می‌توانند خطر امنیتی ایجاد کنند.

برای پیدا کردن آن‌ها:

sudo find / \
-xdev \
-type d \
-perm -0002 \
! -perm -1000 \
-ls 2>/dev/null

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

Writable by other users
Sticky Bit is not enabled

قبل از تغییر هر مسیر، کاربرد آن را بررسی کنید.


اصلاح پوشه عمومی

برای فعال‌کردن Sticky Bit:

sudo chmod +t /path/to/directory

یا:

sudo chmod 1777 /path/to/directory

Permission پایه را بدون بررسی تغییر ندهید. ممکن است پوشه به 1770 یا 1775 نیاز داشته باشد، نه 1777.


بررسی Permission پوشه‌های والد

ممکن است Sticky Bit صحیح باشد، اما کاربر نتواند به پوشه دسترسی داشته باشد.

مسیر را بررسی کنید:

namei -l /srv/shared/file.txt

نمونه خروجی:

f: /srv/shared/file.txt
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxrwxrwt root root shared
-rw------- ali ali file.txt

کاربر برای رسیدن به فایل باید روی تمام پوشه‌های والد مجوز execute داشته باشد.


Sticky Bit و حذف پوشه‌های فرعی

Sticky Bit روی Entryهای مستقیم داخل پوشه اعمال می‌شود.

اگر کاربری مالک یک Subdirectory داخل پوشه Sticky باشد، می‌تواند محتوای داخل Subdirectory خودش را براساس Permissionهای همان پوشه مدیریت کند.

مثال:

/srv/shared/ali-directory

اگر ali مالک ali-directory باشد، کنترل فایل‌های داخل آن به Permission همان Subdirectory بستگی دارد.

Sticky Bit پوشه /srv/shared فقط حذف یا Rename خود ali-directory را توسط سایر کاربران محدود می‌کند.


Sticky Bit و Hard Link

Sticky Bit حذف نام فایل از Directory را محدود می‌کند، اما رفتار Hard Linkها به Inode و Permission فایل‌سیستم نیز وابسته است.

برای محیط‌های حساس، علاوه بر Sticky Bit باید تنظیمات زیر نیز بررسی شوند:

fs.protected_hardlinks
fs.protected_symlinks
fs.protected_fifos
fs.protected_regular

مشاهده:

sysctl fs.protected_hardlinks
sysctl fs.protected_symlinks
sysctl fs.protected_fifos
sysctl fs.protected_regular

نمونه خروجی:

fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_fifos = 1
fs.protected_regular = 2

این تنظیمات لایه‌های امنیتی تکمیلی برای مسیرهای اشتراکی ایجاد می‌کنند.


Sticky Bit و Symbolic Link

Sticky Bit به‌تنهایی تمام حملات مبتنی بر Symbolic Link را متوقف نمی‌کند.

در پوشه‌هایی مانند /tmp، تنظیمات Kernel مانند موارد زیر اهمیت دارند:

fs.protected_symlinks
fs.protected_hardlinks

بررسی:

sysctl fs.protected_symlinks
sysctl fs.protected_hardlinks

مقدار 1 معمولاً نشان می‌دهد حفاظت فعال است.


Sticky Bit در Docker و Container

Sticky Bit داخل Container نیز براساس File Permission و UID/GID عمل می‌کند.

برای مشاهده Permission یک Volume:

docker exec app ls -ld /shared

نمونه:

drwxrwxrwt 2 root root 4096 Jul 27 10:00 /shared

اگر مسیر از Host Mount شده است، Permission را روی Host نیز بررسی کنید:

stat -c '%a %U %G %n' /opt/app/shared

در Docker باید UID و GID کاربران داخل Container با مالکیت فایل‌های Host هماهنگ باشد.


Sticky Bit در NFS

رفتار Sticky Bit روی NFS به موارد زیر وابسته است:

NFS server permissions
UID and GID mapping
root_squash
Export options
NFS version

نوع Mount را بررسی کنید:

findmnt -T /mnt/shared -o TARGET,FSTYPE,OPTIONS

در صورت بروز رفتار غیرمنتظره، تنظیمات Export روی NFS Server نیز باید بررسی شوند.


Sticky Bit و SELinux

Sticky Bit بخشی از Permissionهای استاندارد Unix است. در AlmaLinux، Rocky Linux و RHEL، SELinux یک لایه امنیتی جداگانه ایجاد می‌کند.

وضعیت SELinux:

getenforce

نمونه:

Enforcing

Context پوشه:

ls -Zd /srv/shared

خطاهای اخیر:

sudo ausearch -m AVC -ts recent

اگر Sticky Bit و Permissionها صحیح باشند اما دسترسی همچنان رد شود، SELinux Context و Policy را بررسی کنید.

برای بازگرداندن Context استاندارد:

sudo restorecon -Rv /srv/shared

مثال عملی پوشه عمومی امن

ایجاد پوشه:

sudo mkdir -p /srv/public-share

تنظیم مالک:

sudo chown root:root /srv/public-share

فعال‌کردن دسترسی عمومی همراه Sticky Bit:

sudo chmod 1777 /srv/public-share

بررسی:

stat -c '%a %A %U %G %n' /srv/public-share

خروجی:

1777 drwxrwxrwt root root /srv/public-share

این مدل مشابه /tmp است.


مثال عملی پوشه اشتراکی فقط برای یک گروه

ایجاد گروه:

sudo groupadd developers

افزودن کاربران:

sudo usermod -aG developers ali
sudo usermod -aG developers reza

ایجاد پوشه:

sudo mkdir -p /srv/developers

مالکیت:

sudo chown root:developers /srv/developers

فعال‌کردن SetGID و Sticky Bit:

sudo chmod 3770 /srv/developers

بررسی:

stat -c '%a %A %U %G %n' /srv/developers

خروجی:

3770 drwxrws--T root developers /srv/developers

در این ساختار:

Owner: Full access
Group: Full access
Other users: No access
SetGID: Enabled
Sticky Bit: Enabled

حرف T در بخش Other طبیعی است؛ زیرا Other مجوز Execute ندارد.


مثال عملی پوشه Drop-off

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

Sticky Bit به‌تنهایی برای ساخت Drop-off کامل کافی نیست؛ زیرا Permissionهای Read، Write و Execute باید دقیق تنظیم شوند.

نمونه پایه:

sudo mkdir -p /srv/dropbox
sudo chmod 1733 /srv/dropbox

بررسی:

ls -ld /srv/dropbox

خروجی:

drwx-wx-wt 2 root root 4096 Jul 27 10:00 /srv/dropbox

در این ساختار کاربران می‌توانند فایل ایجاد کنند، اما Permission خواندن فهرست پوشه را ندارند.

بااین‌حال، طراحی Drop-off باید با آزمایش دقیق، ACL، نام فایل‌ها و نیاز برنامه انجام شود.


رفع خطاهای رایج Sticky Bit

Sticky Bit فعال است اما کاربر فایل دیگران را ویرایش می‌کند

Sticky Bit مانع ویرایش محتوا نمی‌شود.

Permission فایل را بررسی کنید:

ls -l /srv/shared/file.txt

اگر فایل دارای Write برای Group یا Other باشد:

-rw-rw-rw-

سایر کاربران می‌توانند آن را ویرایش کنند.

اصلاح:

chmod 600 /srv/shared/file.txt

یا:

chmod 640 /srv/shared/file.txt

Sticky Bit فعال است اما مالک پوشه فایل‌ها را حذف می‌کند

این رفتار طبیعی است.

مالک Directory یکی از افرادی است که طبق Sticky Bit اجازه حذف فایل‌ها را دارد.

بررسی:

stat -c '%U %G %n' /srv/shared

در صورت نیاز، مالک پوشه را به root تغییر دهید:

sudo chown root:root /srv/shared

Sticky Bit با T بزرگ نمایش داده می‌شود

بررسی:

ls -ld /srv/shared

خروجی:

drwxrwxrwT

این یعنی Sticky Bit فعال است اما Other مجوز Execute ندارد.

برای پوشه عمومی:

sudo chmod 1777 /srv/shared

برای پوشه گروهی، T ممکن است طبیعی باشد:

sudo chmod 3770 /srv/shared

در این حالت کاربران عضو Group از Permission گروه استفاده می‌کنند.


کاربر نمی‌تواند فایل خودش را حذف کند

موارد زیر را بررسی کنید:

  • کاربر واقعاً مالک فایل باشد.
  • پوشه والد دارای Write و Execute باشد.
  • فایل یا پوشه Immutable نباشد.
  • SELinux مانع نشده باشد.
  • فایل‌سیستم Read-only نباشد.
  • NFS Policy محدودیت ایجاد نکرده باشد.

مالک فایل:

stat -c '%U %G %n' /srv/shared/file.txt

Permission پوشه:

stat -c '%a %A %U %G %n' /srv/shared

Immutable:

lsattr /srv/shared/file.txt

Mount:

findmnt -T /srv/shared/file.txt -o TARGET,FSTYPE,OPTIONS

Sticky Bit فعال است اما فایل دیگران حذف می‌شود

موارد زیر را بررسی کنید:

  1. حذف‌کننده مالک فایل بوده است.
  2. حذف‌کننده مالک پوشه بوده است.
  3. دستور با sudo یا root اجرا شده است.
  4. Sticky Bit روی پوشه والد صحیح فعال نشده است.
  5. فایل داخل Subdirectory دیگری قرار دارد.
  6. فایل‌سیستم رفتار متفاوتی دارد.
  7. NFS یا CIFS محدودیت را روی Server اعمال می‌کند.

بررسی پوشه مستقیم والد:

dirname /srv/shared/path/file.txt

سپس:

stat -c '%a %A %U %G %n' /srv/shared/path

خطای Operation not permitted هنگام حذف فایل خود کاربر

نمونه:

rm: cannot remove 'file.txt': Operation not permitted

ممکن است کاربر مالک فایل نباشد.

بررسی:

stat -c '%U %G %n' file.txt

همچنین Immutable Attribute را بررسی کنید:

lsattr file.txt

وجود i:

----i----------------- file.txt

برای حذف Attribute:

sudo chattr -i file.txt

chmod +t تأثیری ندارد

ابتدا بررسی کنید مسیر Directory باشد:

file /srv/shared

سپس:

stat -c '%a %A %n' /srv/shared

اگر مسیر روی فایل‌سیستم خاصی مانند CIFS یا FAT قرار دارد، ممکن است Permissionهای Unix به‌صورت کامل پشتیبانی نشوند.

نوع فایل‌سیستم:

findmnt -T /srv/shared -o TARGET,FSTYPE,OPTIONS

Sticky Bit روی فایل معمولی نتیجه موردنظر ندارد

Sticky Bit در لینوکس مدرن برای فایل معمولی کاربرد امنیتی رایج ندارد.

برای کنترل دسترسی فایل از ابزارهای زیر استفاده کنید:

chmod
chown
ACL
SELinux
AppArmor

نکات امنیتی و بهترین روش‌ها

  • روی پوشه‌های World-Writable حتماً Sticky Bit را بررسی کنید.
  • از 1777 فقط برای پوشه‌های واقعاً عمومی استفاده کنید.
  • برای پوشه‌های گروهی از 3770 یا ساختار مشابه استفاده کنید.
  • Sticky Bit را جایگزین Permission صحیح فایل نکنید.
  • برای فایل‌های خصوصی از 600 یا 640 استفاده کنید.
  • برای ارث‌بری گروه از SetGID استفاده کنید.
  • برای دسترسی‌های دقیق‌تر از ACL استفاده کنید.
  • مالک پوشه اشتراکی را با دقت انتخاب کنید.
  • پوشه‌های World-Writable بدون Sticky Bit را دوره‌ای جست‌وجو کنید.
  • تنظیمات fs.protected_symlinks و fs.protected_hardlinks را بررسی کنید.
  • SELinux یا AppArmor را در عیب‌یابی در نظر بگیرید.
  • رفتار Sticky Bit را با کاربران واقعی آزمایش کنید.
  • Permission فایل‌ها و پوشه‌های والد را جداگانه بررسی کنید.
  • روی NFS و CIFS، تنظیمات سمت Server را نیز بررسی کنید.
  • برای پوشه‌های Upload یا Drop-off فقط به Sticky Bit متکی نباشید.

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

موارد زیر از اشتباهات متداول هنگام استفاده از Sticky Bit هستند:

  • تصور اینکه Sticky Bit مانع خواندن فایل می‌شود
  • تصور اینکه Sticky Bit مانع ویرایش فایل می‌شود
  • استفاده از 777 بدون Sticky Bit
  • فعال‌کردن Sticky Bit روی فایل عادی و انتظار حفاظت
  • نادیده‌گرفتن مالک Directory
  • اشتباه‌گرفتن t و T
  • استفاده از 1777 برای تمام پوشه‌های اشتراکی
  • نادیده‌گرفتن SetGID در محیط‌های گروهی
  • نادیده‌گرفتن ACL و umask
  • بررسی‌نکردن Permission پوشه والد
  • نادیده‌گرفتن SELinux
  • آزمایش نکردن دسترسی با کاربران مختلف
  • فرض عملکرد یکسان روی NFS و CIFS
  • استفاده از Sticky Bit به‌عنوان جایگزین کامل کنترل دسترسی

چک‌لیست نهایی

پس از تنظیم Sticky Bit موارد زیر را بررسی کنید:

  • مسیر موردنظر Directory است.
  • مالک و گروه پوشه صحیح هستند.
  • Permission پایه پوشه مناسب است.
  • Sticky Bit با chmod +t یا روش عددی فعال شده است.
  • خروجی ls -ld شامل t یا T است.
  • Permission عددی با stat بررسی شده است.
  • کاربر می‌تواند فایل جدید ایجاد کند.
  • کاربر می‌تواند فایل خودش را حذف کند.
  • کاربر نمی‌تواند فایل دیگران را حذف کند.
  • کاربر نمی‌تواند فایل دیگران را Rename کند.
  • Permission فایل‌ها مانع خواندن یا ویرایش غیرمجاز است.
  • SetGID در صورت نیاز فعال شده است.
  • ACL در صورت نیاز تنظیم شده است.
  • umask کاربران بررسی شده است.
  • SELinux یا AppArmor مانع دسترسی نیست.
  • فایل‌سیستم از Permissionهای Unix پشتیبانی می‌کند.
  • پوشه‌های World-Writable بدون Sticky Bit باقی نمانده‌اند.

دستورات پرکاربرد Sticky Bit

فعال‌کردن Sticky Bit:

chmod +t directory

فعال‌کردن با روش عددی:

chmod 1777 directory

حذف Sticky Bit:

chmod -t directory

حذف با روش عددی:

chmod 0777 directory

بررسی Permission:

ls -ld directory

بررسی عددی:

stat -c '%a %A %U %G %n' directory

فعال‌کردن SetGID و Sticky Bit:

chmod 3770 directory

پیداکردن پوشه‌های Sticky:

find /srv -type d -perm -1000 -ls

پیداکردن پوشه‌های World-Writable بدون Sticky Bit:

find /srv \
-type d \
-perm -0002 \
! -perm -1000 \
-ls

آزمایش حذف با کاربر دیگر:

sudo -u reza rm /srv/shared/ali-file.txt

جمع‌بندی

Sticky Bit یکی از Permissionهای ویژه لینوکس است که امنیت پوشه‌های اشتراکی را افزایش می‌دهد. هنگامی که چند کاربر روی یک پوشه مجوز نوشتن دارند، Sticky Bit مانع می‌شود کاربران فایل‌های متعلق به یکدیگر را حذف یا تغییر نام دهند.

افراد زیر همچنان امکان حذف فایل را دارند:

File owner
Directory owner
root user

برای فعال‌کردن Sticky Bit می‌توان از دستور زیر استفاده کرد:

chmod +t directory

یا:

chmod 1777 directory

حرف t در خروجی Permission نشان‌دهنده فعال‌بودن Sticky Bit همراه با Execute برای Other است. حرف T نیز نشان می‌دهد Sticky Bit فعال است، اما Execute بخش Other وجود ندارد.

Sticky Bit فقط حذف و تغییر نام فایل را کنترل می‌کند و مانع خواندن یا ویرایش محتوای فایل نمی‌شود. برای کنترل این موارد باید Permission فایل، مالکیت، ACL، umask و لایه‌های امنیتی مانند SELinux نیز بررسی شوند.

در پوشه‌های گروهی، ترکیب Sticky Bit با SetGID و ACL می‌تواند ساختار دسترسی امن‌تر و قابل‌کنترل‌تری ایجاد کند.

هنوز نیاز به کمک دارید؟

آیا سوالی دارید؟

آیا این مقاله برای شما مفید بود؟ بله خیر

مطالب اخیراً بازدیدشده

  • آموزش بررسی etc/resolv.conf/ و عیب‌یابی مشکلات DNS در لینوکس
  • آموزش کانفیگ صحیح exim
  • مشاهده بیشتر

نظرات خود را بنویسید... لغو پاسخ

اشتراک گذاری این مقاله

Sticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی

کپی کردن لینک

Clipboard Icon

جدیدترین مقالات

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی ...
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

تقویم

آگوست 2026
شیدسچپج
1234567
891011121314
15161718192021
22232425262728
293031 
« جولای    

عضویت

جدیدترین پست‌ها

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی Ubuntu 24.04
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

سلام