یک پنجره ترمینال در سیستم لینوکس.
Fatmawati Achmad Zaenuri / Shutterstock

SUID، SGID و Sticky Bits مجوزهای ویژه قدرتمندی هستند که می توانید برای اجرایی و دایرکتوری ها در لینوکس تعیین کنید. ما مزایا و مشکلات احتمالی استفاده از آنها را با ما در میان خواهیم گذاشت.

آنها در حال استفاده هستند

امنیت ساختمان در یک سیستم عامل چند کاره چندین مورد را ارائه می دهد. به عنوان مثال مفهوم اصلی رمزعبورها را در نظر بگیرید. همه آنها باید ذخیره شوند تا هر بار شخصی وارد سیستم شود ، سیستم می تواند رمز عبوری را که تایپ کرده است با نسخه ذخیره شده مقایسه کند. بدیهی است ، چون رمزهای عبور کلیدهای پادشاهی هستند ، باید از آنها محافظت شوند.

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

ارتقاء وضعیت شما [19659005] معمولاً ، دستورات و برنامه های لینوکس با همان مجوزهایی مانند شخصی که برنامه را اجرا می کند اجرا می شوند. وقتی root دستور passwd را برای تغییر رمز عبور اجرا کند ، با مجوزهای root اجرا می شود. این بدان معنی است که دستور passwd می تواند به راحتی به رمزهای ذخیره شده در پرونده / etc / سایه دسترسی داشته باشد.

آنچه ایده آل خواهد بود ، طرحی است که در آن هر کس روی سیستم می تواند راه اندازی کند. برنامه را تصویب کرد ، اما برنامه passwd را حفظ کرده و حفظ root را حفظ کنید. این باعث می شود که هر کسی بتواند رمزعبور خود را تغییر دهد.

سناریوی فوق دقیقاً همان کاری است که بیت شناسه تنظیم کاربر ( SUID ) را انجام می دهد. این برنامه ها و مجوزها را با مجوزهای صاحب پرونده اجرا می کند ، نه مجوزهای شخصی که برنامه را اجرا می کند.

شما در حال ارتقاء وضعیت برنامه هستید

اگرچه ، یک مسئله عجیب دیگر وجود دارد. باید از شخصی که با گذرواژه شخص دیگری استفاده نمی کند جلوگیری شود. لینوکس شامل طرح SUID است که به آن امکان می دهد برنامه هایی را با مجموعه ای از مجوزهای به طور موقت وام گرفته شده اجرا کند ، اما این تنها نیمی از داستان امنیتی است.

مکانیزم کنترلی که مانع کار شخصی با رمز عبور شخص دیگر می شود. موجود در برنامه passwd ، نه سیستم عامل و طرح SUID.

برنامه هایی که با امتیازات بالا اجرا می شوند می توانند خطرات امنیتی را ایجاد کنند در صورتی که با طرز فکر "امنیت توسط طراحی" ایجاد نشوند. این بدان معناست که امنیت اولین چیزی است که شما در نظر می گیرید ، و سپس بر پایه آن کار می کنید. برنامه خود را بنویسید و بعد از آن سعی کنید به آن یک لایه امنیتی بدهید.

بزرگترین مزیت نرم افزار منبع باز این است که شما می توانید خودتان به کد منبع نگاه کنید یا به نظرات معتبر مربوط به آن مراجعه کنید. در کد منبع برای برنامه passwd ، چک هایی وجود دارد ، بنابراین می توانید ببینید فردی که برنامه را اجرا می کند ریشه دارد . اگر کسی root (یا شخصی که از sudo ] استفاده می کند مجاز باشد.

این کد است که تشخیص می دهد کسی ریشه را دارد .

 قطعه کد منبع از

مثال زیر مثالی است که در آن حساب می شود. از آنجا که root می تواند گذرواژه ای را تغییر دهد ، برنامه برای چک کردن معمولی که انجام می دهد ، زحمت نمی کشد تا ببیند کدام رمزعبور شخص اجازه تغییر را دارد. بنابراین ، برای root ، آن دسته از بررسی ها را رد می کند و از عملکرد بررسی خارج می شود.

 یک قطعه کد منبع از

با دستورات و برنامه های اصلی لینوکس ، می توانید مطمئن باشید آنها امنیت زیادی در آنها پخته شده اند و کد بارها مورد بررسی قرار گرفته است. البته ، همیشه خطر سوء استفاده های ناشناخته وجود دارد. با این حال ، به نظر می رسد تکه ها یا به روزرسانی ها برای مقابله با هرگونه آسیب پذیری تازه شناسایی شده سریع هستند.

این نرم افزار شخص ثالث است – مخصوصاً هر نوع منبع باز نیست – باید در استفاده از SUID بسیار مراقب باشید. با. ما نمی خواهیم این کار را انجام دهیم ، اما اگر چنین کنید ، می خواهید مطمئن شوید که سیستم شما را در معرض خطر قرار نمی دهد. شما نمی خواهید از امتیازات برنامه ای که خود به خود به طور صحیح و شخصی که آن را اجرا می کند ، خودداری کنید.

دستورات لینوکس که از SUID استفاده می کنند

موارد زیر چند دستورالعمل لینوکس است. با استفاده از بیت SUID به امتیازات ارتقاء یافته فرمان هنگام استفاده توسط یک کاربر معمولی:

 ls -l / bin / su 
 ls -l / bin / ping 
 ls -l / bin / mount 
 ls -l / bin / umount 
 ls -l / usr / bin / passwd 

 لیستی از دستورات لینوکس که بیت SUID خود را در یک پنجره ترمینال تنظیم کرده است.

توجه داشته باشید که نام پرونده ها در زیر برجسته شده است. قرمز ، که نشان می دهد بیت SUID تنظیم شده است.

مجوزهای مربوط به پرونده یا فهرست معمولاً توسط سه گروه از سه کاراکتر نشان داده می شوند: rwx. اینها خواندن ، نوشتن و اجرا هستند. اگر نامه ها موجود باشد ، آن مجوز داده می شود. اگر بجای نامه وجود داشته باشد ، یک hyphen ( - ) ، اما آن مجوز داده نشده است.

سه گروه از این مجوزها (از چپ به راست) وجود دارد: اینها برای مالک پرونده ، برای اعضای گروه پرونده ، و برای دیگران. هنگامی که بیت SUID روی یک پرونده تنظیم شده است ، "s" نشان دهنده مجوز اجرای مالک است.

اگر SUID روی پرونده ای تنظیم شود که قابلیت اجرایی نداشته باشد. قابلیت ها ، یک "بزرگ" S بیانگر این موضوع است.

ما به یک نمونه می پردازیم. کاربر عادی dave فرمان passwd را تایپ می کند:

 passwd 

 فرمان

فرمان passwd فرمان ] برای رمز جدید خود می توانیم از دستور ps برای دیدن جزئیات مراحل اجرا استفاده کنیم.

از ps با grep grep استفاده خواهیم کرد و در یک پنجره ترمینال متفاوت جستجو خواهیم کرد. روند گذشت . ما همچنین از گزینه های -e (هر فرآیند) و -f (تمام فرمت) با گزینه های ps استفاده خواهیم کرد.

دستور زیر را تایپ می کنیم. :

 ps -e -f | grep passwd 

دو خط گزارش شده است ، دومین مورد این فرآیند grep grep است که به دنبال فرمان هایی با رشته "عبور" در آنها است. این اولین خطی است که ما را مورد علاقه خود قرار می دهد ، زیرا این یکی از مراحل عبور dave dave است که راه اندازی شده است.

ما می توانیم ببینیم که روند گذشته اجرا می شود. ریشه آن را راه اندازی کرده است.

تنظیم SUID Bit

تغییر دادن بیت SUID به راحتی با chmod . حالت نمادین u + s بیت SUID را تنظیم می کند و حالت نماد ما ما را پاک می کند SUID را برای نشان دادن برخی از. از مفاهیم بیت SUID ، ما یک برنامه کوچک به نام htg ایجاد کردیم. این در فهرست اصلی کاربر dave است ، و مجموعه ی بیت های SUID را ندارد. هنگامی که آن را اجرا کرد ، شناسه کاربر واقعی و مؤثر (UID) را نشان می دهد.

UID واقعی متعلق به شخصی است که برنامه را اجرا کرده است. شناسه مؤثر همان حسابی است که برنامه با آن رفتار می کند و گویی که توسط آن راه اندازی شده است.

ما موارد زیر را تایپ می کنیم:

 ls -lh htg 
 ./ htg 

ما نسخه محلی برنامه را اجرا می کنیم ، می بینیم که شناسه های واقعی و موثر هر دو روی dave تنظیم شده اند.

بگذارید آن را در فهرست / usr / local / bin کپی کنیم تا دیگران بتوانند از آن استفاده کنند.

ما موارد زیر را تایپ می کنیم ، با استفاده از chmod را برای تنظیم بیت SUID ، و سپس بررسی کنید که تنظیم شده است:

 sudo cp htg / usr / local / bin 
 sudo chmod u + s / usr / local / bin / htg 
 ls -hl / usr / local / bin / htg 

 The

بنابراین ، این برنامه کپی می شود ، و بیت SUID تنظیم می شود. ما دوباره آن را اجرا خواهیم کرد ، اما این بار کپی را در پوشه / usr / local / bin اجرا خواهیم کرد:

 htg 

حتی اگر ] dave برنامه را راه اندازی کرد ، شناسه مؤثر روی کاربر root کاربر تنظیم شده است. بنابراین ، اگر mary برنامه را اجرا کند ، همان اتفاقی می افتد ، مانند تصویر زیر:

 htg 

 The

ID واقعی mary ، و شناسه مؤثر root است. این برنامه با مجوزهای کاربر root اجرا می شود.

مرتبط: نحوه استفاده از دستور chmod در لینوکس

The SGID Bit

The Set Group ID ( SGID ) بیت بسیار شبیه به بیت SUID است. هنگامی که بیت SGID روی یک فایل اجرایی تنظیم شده است ، گروه مؤثر روی گروه پرونده تنظیم می شود. این روند با اجازه اعضای گروه پرونده اجرا می شود ، نه مجوزهای شخصی که آن را راه اندازی کرد.

ما برنامه htg خود را ضرب و شتم کردیم ، بنابراین این گروه موثر را نیز نشان می دهد. ما گروه برنامه htg را تغییر می دهیم تا کاربر mary گروه پیش فرض ، mary باشد. ما همچنین می خواهیم از us و g + s با استفاده از حالتهای نمادین با chown برای حذف بیت SUID و تنظیم SGID .

برای این کار ، موارد زیر را تایپ می کنیم:

 ریشه sudo chown: mary / usr / local / bin / htg 
 sudo chmod us، g + s / usr / local / bin / htg 
 ls -lh / usr / local / bin / htg 

 The

شما می توانید بیت SGID را مشاهده کنید که در مجوزهای گروه مشخص شده توسط "s" است. همچنین ، توجه داشته باشید که این گروه روی mary قرار داده شده است و اکنون نام پرونده به رنگ زرد مشخص شده است.

قبل از اجرای برنامه ، بیایید تعیین کنیم که کدام گروه ها dave و متعلق به. برای چاپ تمام شناسه های گروه از دستور id با گزینه -G (گروه ها) استفاده خواهیم کرد. سپس برنامه htg را به عنوان dave اجرا خواهیم کرد.

دستورات زیر را تایپ می کنیم:

 id -G dave 
 id -G mary 
 htg 

 The

شناسه گروه پیش فرض برای mary 1001 است و گروه مؤثر برنامه htg 1001 است. بنابراین ، اگرچه راه اندازی شده توسط dave ، این برنامه با مجوز اعضا در گروه ماری در حال اجرا است. این همان است که اگر dave به گروه mary ملحق شده باشد.

بگذارید بیت SGID را در یک فهرست قرار دهیم. ابتدا دایرکتوری به نام "work" ایجاد خواهیم کرد و سپس گروه آن را به "geek" تغییر می دهیم. سپس bit SGID را روی دایرکتوری قرار خواهیم داد.

وقتی از ls برای بررسی تنظیمات دایرکتوری استفاده می کنیم ، از -d نیز استفاده خواهیم کرد. گزینه (فهرست) بنابراین می توانیم جزئیات دایرکتوری را مشاهده کنیم ، نه محتوای آن.

دستورات زیر را تایپ می کنیم:

 sudo mkdir work 
 sudo chown dave: geek work 
 sudo chmod g کار 
 ls -lh -d کار 

بیت SGID و گروه "geek" تنظیم شده اند. اینها روی موارد ایجاد شده در فهرست کار تأثیر می گذارد.

ما موارد زیر را تایپ می کنیم تا وارد فهرست work شود ، دایرکتوری ایجاد کنید به نام "نسخه ی نمایشی" و بررسی ویژگی های آن: [19659024] cd work

 mkdir demo 
 ls -lh -d demo 

SGID بیت و گروه "geek" به طور خودکار روی "نسخه ی نمایشی" اعمال می شوند

بیایید موارد زیر را برای ایجاد پرونده با دستور لمس لمس کنید و ویژگی های آن را بررسی کنید:

 touch օգտակար.sh 
 ls -lh مفید.sh 

 ] </p>
<p> گروه پرونده جدید به طور خودکار روی "geek" تنظیم شده است. </p>
<p> <strong> مرتبط: </strong> <strong><em> نحوه استفاده از دستور chown در لینوکس </em> </strong> </p>
<h2> The Sticky Bit [19659005] بیت چسبنده نام خود را از هدف تاریخی خود می گیرد. هنگامی که روی یک اجرایی تنظیم شد ، به سیستم عامل پرچم گذاری می شود که قسمت های متن اجرایی باید به صورت مبادله نگه داشته شوند و استفاده مجدد آنها سریعتر شود. در لینوکس ، بیت چسبنده فقط روی یک دایرکتوری تأثیر می گذارد – تنظیم آن روی یک فایده منطقی نخواهد بود. </p>
<p> وقتی بیت چسبنده را روی یک فهرست قرار دهید ، افراد فقط می توانند پرونده هایی را که در آن فهرست قرار دارد حذف کنند. آنها نمی توانند پرونده هایی را که متعلق به شخص دیگری هستند حذف کنند ، مهم نیست که کدام یک از مجوزهای پرونده روی فایلها تنظیم شده باشد. </p>
<p> این به شما امکان می دهد یک دایرکتوری ایجاد کنید که همه – و فرآیندی که آنها راه اندازی می کنند- می توانند از آنها به عنوان ذخیره سازی فایل مشترک استفاده کنند. . پرونده ها محافظت می شوند زیرا ، باز هم ، هیچ کس نمی تواند پرونده های شخص دیگری را حذف کند. </p>
<p> بگذارید یک دایرکتوری به نام "مشترک" ایجاد کنیم. ما از حالت نمادین <code> o + t </code> با <code> chmod </code> برای تنظیم بیت چسبنده در آن فهرست استفاده خواهیم کرد. سپس به مجوزهای موجود در آن فهرست و همچنین فهرست <code> / tmp </code> و <code> / var / tmp </code> خواهیم پرداخت. </p>
<p> دستورات زیر را تایپ می کنیم: </p>
<pre> mkdir به اشتراک گذاشته </pre>
<pre> sudo chmod o + t shared </pre>
<pre> ls -lh -d shared </pre>
<pre> ls -lh -d / tmp </pre>
<pre> ls -lh -d / var / tmp </pre>
<p><img class= [19659006اگربیتچسبندهتنظیمشود،بیتاجراییمجموعه"دیگر"مجوزهایپروندهروی"t"تنظیممیشودنامپروندههمچنینبهرنگآبیمشخصشدهاست

پوشه های / tmp و / var / tmp دو نمونه از دایرکتوری ها هستند که همه مجوزهای پرونده را برای مالک ، گروه تعیین کرده اند. ، و دیگران (به همین دلیل آنها با رنگ سبز برجسته می شوند). آنها به عنوان مکانهای مشترک برای پرونده های موقتی استفاده می شوند.

با این مجوزها ، هر کسی از نظر تئوریک باید قادر به انجام هر کاری باشد. با این حال ، بیت چسبنده بر آنها غلبه می کند ، و هیچ کس نمی تواند پرونده ای را که به او تعلق دارد حذف کند.

یادآوری

موارد زیر یک لیست چک سریع از مواردی است که ما در بالا برای آن اشاره کردیم:

  • SUID [

    فقط روی پرونده ها کار می کند.

  • شما می توانید SGID را در دایرکتوری ها و پرونده ها اعمال کنید.
  • شما فقط می توانید بیت چسبنده را در دایرکتوری ها اعمال کنید.
  • اگر " "،" [ g "یا" [ t "در حروف بزرگ ظاهر می شوند ، بیت اجرایی ( x ) تنظیم نشده است.

</p>
<pre>نحوه استفاده از SUID ، SGID و Sticky Bits در لینوکس<br />