loading...

صلاحیت ها در هسته لینوکس چه کاری انجام می دهند

آکاایران: صلاحیت ها در هسته لینوکس چه کاری انجام می دهند

آکاایران: اخذ جواز موقت برای کاربران فاقد امتیاز

صلاحیت ها در هسته لینوکس چه کاری انجام می دهند

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

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

  • پردازش‎های دارای امتیاز: این پردازش‎ها به کاربر اجازه می‎دهد تا تمام بررسی‎های مجوز هسته را نادیده بگیرد.
  • پردازش‎های فاقد امتیاز: این پردازش‎ها موظف هستند تا تمام مجوزها از قبیل 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 – نشان دهنده آن است که این صلاحیت به عناصر زیر دستی یا زیر پردازش‎ها به ارث رسیده است.

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

.

منبع : shabakeh-mag.com

تبلیغات