اخذ جواز موقت برای کاربران بدون امتیاز
صلاحیت‌ها در هسته لینوکس چه کاری انجام می‌دهند
در این مقاله ما قصد داریم نگاهی اجمالی به مجوز پردازش‎های هسته لینوکس داشته باشیم و به شما نشان دهیم که چگونه می‎توانید از آنها برای امن باقی نگه داشتن صفحات وب یا اپلیکیشن‎ها استفاده کنید.

1606683296_1_0.gif

به طور سنتی هسته لینوکس پردازش‎های خود را به دو دسته تقسیم بندی می‎کند:

  • پردازش‎های دارای امتیاز: این پردازش‎ها به کاربر اجازه می‎دهد تا تمام بررسی‎های مجوز هسته را نادیده بگیرد.
  • پردازش‎های بدون امتیاز: این پردازش‎ها موظف هستند تا تمام مجوزها از قبیل UID, GID و فهرست گروه مکمل را به صورت کامل بررسی کنند.

اعطا کردن دسترسی با امتیاز کامل به پردازش یک کاربر ممکن است منجر به سوء استفاده از سیستم مثل، تغییر دادن داده‎ها بدون اخذ مجوز، تغییر ACL و نظاير آن شود.

لینوکس 2.2 برای رفع این مشکل راهکاری به نام صلاحیت‎ها (Capabilities) را معرفی كرد. صلاحیت‎ها به توسعه دهنده امکان می‎دهد تا برای فایل‎های اجرایی مجوزهای خاص اعطا کنند.

مثال

فرض کنید می‎خواهیم یک ماژول ساده HTTP Server پایتون را روی پورت 80 با یک کاربر بدون امتیاز شروع کنیم. اگر ما این پردازش را بدون اعطای صلاحیت‎ها شروع کنیم خطای زیر را دریافت خواهیم کرد:

anshulp@dzone-vagrant-box:$ python -m SimpleHTTPServer 80

Traceback (most recent call last):

  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main

    "__main__", fname, loader, pkg_name)

  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code

    exec code in run_globals

  File "/usr/lib/python2.7/SimpleHTTPServer.py", line 235, in <module>

    test()

  File "/usr/lib/python2.7/SimpleHTTPServer.py", line 231, in test

    BaseHTTPServer.test(HandlerClass, ServerClass)

  File "/usr/lib/python2.7/BaseHTTPServer.py", line 606, in test

    httpd = ServerClass(server_address, HandlerClass)

  File "/usr/lib/python2.7/SocketServer.py", line 417, in __init__

    self.server_bind()

  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind

    SocketServer.TCPServer.server_bind(self)

  File "/usr/lib/python2.7/SocketServer.py", line 431, in server_bind

    self.socket.bind(self.server_address)

  File "/usr/lib/python2.7/socket.py", line 228, in meth

    return getattr(self._sock,name)(*args)

socket.error: [Errno 13] Permission denied

حالا اجازه دهید صلاحیت CAP_NET_BIND_SERVICE را به باینری پایتون اضافه کنیم

sudo setcap 'CAP_NET_BIND_SERVICE+ep' /usr/bin/python2.7

فرمان بالا می‎ گوید که ما در حال اضافه کردن صلاحیت AP_NET_BIND_SERVICE به فایل /usr/bin/python2.7 هستیم. +ep مشخص می‎کند که این فایل مجوز را اخذ کرده است ("-" این مجوز را لغو می‎کند).

حالا بیایید یک بار دیگر این ماژول ساده HTTP Server پایتون را روی پورت 80 اجرا کنیم:

anshulp@dzone-vagrant-box:$ python -m SimpleHTTPServer 80

Serving HTTP on 0.0.0.0 port 80 ...

172.28.128.1 - - [06/Jul/2017 11:30:13] "GET / HTTP/1.1" 200 -

172.28.128.1 - - [06/Jul/2017 11:30:13] code 404, message File not found

172.28.128.1 - - [06/Jul/2017 11:30:13] "GET /favicon.ico HTTP/1.1" 404 -

172.28.128.1 - - [06/Jul/2017 11:30:13] code 404, message File not found

172.28.128.1 - - [06/Jul/2017 11:30:13] "GET /favicon.ico HTTP/1.1" 404 -

حالا ما قادر هستیم با یک کاربر بدون امتیاز ترافیک را از طریق پورت امتیاز دار 80 عبور دهیم.

در زمان تهیه این مقاله بیش از 40 صلاحیت (Capabilities) که می‎توان آنها را برای هر درخواستی مورد استفاده قرار داد وجود دارد.

همچنین برای هر صلاحیت سه حالت تعریف شده است:

  • e: Effective – نشان دهنده آن است که این صلاحیت فعال شده است.
  • p: Permitted – نشان دهنده آن است که می‎توان از این صلاحیت استفاده کرد.
  • i: Inherited – نشان دهنده آن است که این صلاحیت به عناصر زیر دستی یا زیر پردازش‎ها به ارث رسیده است.

به طور خلاصه میتوان گفت که صلاحیت‎ها یک راهکار مختصر و کارآمد را برای اعطای مجوز به کاربران بدون جواز فراهم می‎کنند.

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

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

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟