passwd
میتواند
/etc/shadow
را بدون دسترسی root تغییر دهد؟
در لینوکس، هشهای رمز عبور کاربران در فایل
/etc/shadow
ذخیره میشوند. بیایید محتوای آن را بررسی کنیم:
cat /etc/shadow
اگر از یک کاربر معمولی این دستور را اجرا کنیم، نتیجه زیر را خواهیم گرفت:
cat: /etc/shadow: Permission denied
این کاملاً منطقی است، زیرا این فایل محافظت شده است و فقط برای فرآیندهای دارای امتیاز دسترسی دارد.
اما در عین حال، هر کاربری میتواند دستور زیر را اجرا کند:
passwd
و به راحتی رمز عبور خود را تغییر دهد. هش جدید به نحوی وارد همان فایل
/etc/shadow
میشود، در حالی که کاربر به آن دسترسی ندارد.
بیایید به فایل
passwd
نگاهی بیندازیم:
ls -l /usr/bin/passwd
احتمالاً چیزی شبیه به این را خواهیم دید:
-rwsr-xr-x 1 root root ... /usr/bin/passwd
نکته جالب در اینجا، وجود حرف
s
به جای
x
در مجوزهای مالک است:
rws
این بیت SUID (Set User ID) ویژه است.
هنگامی که یک فایل اجرایی با SUID اجرا میشود، فرآیند، شناسه کاربری موثر (effective UID) مالک آن فایل را به دست میآورد. و مالک فایل
/usr/bin/passwd
، کاربر
root
است.
بنابراین:
کاربر → passwd → شناسه کاربری موثر 0 → /etc/shadow
اما کاربر در این فرآیند، به root تبدیل نمیشود. فرآیند خاص، دسترسیهای بالاتری را به دست میآورد، و کد
passwd
تعیین میکند که با این دسترسیها چه کاری میتوان انجام داد - به عنوان مثال، به کاربر معمولی اجازه میدهد فقط رمز عبور خود را تغییر دهد.
میتوانید این را با یک دستور بررسی کنید:
find / -perm -4000 -type f 2>/dev/null
این دستور، فایلهای اجرایی را با بیت SUID تنظیم شده پیدا میکند.
و در اینجا، جنبه جالبی از نظر امنیت مطرح میشود: اگر یک برنامه SUID متعلق به
root
باشد و در عین حال دارای آسیبپذیری باشد یا به درستی پیکربندی نشده باشد، این امتیازات بالاتر، به طور بالقوه میتوانند راهی برای انجام اقداماتی از طرف
root
باشند.
بنابراین، حرف "s" که به ظاهر بیاهمیت در بین مجوزهای فایل قرار دارد، به هیچ وجه یک کاراکتر ساده نیست.
اگر از این نوع مطالب خوشتان میآید، آن را ذخیره کنید و لایک کنید —
@ITSecurityComputer




