به طور سنتی هسته لینوکس پردازشهای خود را به دو دسته تقسیم بندی میکند:
- پردازشهای دارای امتیاز: این پردازشها به کاربر اجازه میدهد تا تمام بررسیهای مجوز هسته را نادیده بگیرد.
- پردازشهای بدون امتیاز: این پردازشها موظف هستند تا تمام مجوزها از قبیل 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 اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟