在本文中,我们快速浏览了Linux内核的许可流程,并向您展示了如何使用它们来保护您的网页或应用安全

传统上,Linux内核通过以下两类来区分其进程:

  • 特权进程:这些进程使用户可以绕过所有内核权限检查。

  • 非特权进程:这些进程需要进行完全权限检查,例如有效的UID,GID和补充组列表。

授予对用户进程的完全特权访问权限可能会导致系统滥用,例如未经授权的数据更改,后门,更改的ACL等。Linux 2.2附带了一个称为功能的解决方案。功能使开发人员可以授予二进制文件/文件特定的权限。

假设我们要使用非特权用户在端口80上启动Python的Simple HTTP Server模块。如果我们尝试在不授予任何功能的情况下开始该过程,则会收到以下错误:

anshulp@dzone-vagrant-box:$ python -m SimpleHTTPServer
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line , in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line , in _run_code
exec code in run_globals
File "/usr/lib/python2.7/SimpleHTTPServer.py", line , in <module>
test()
File "/usr/lib/python2.7/SimpleHTTPServer.py", line , in test
BaseHTTPServer.test(HandlerClass, ServerClass)
File "/usr/lib/python2.7/BaseHTTPServer.py", line , in test
httpd = ServerClass(server_address, HandlerClass)
File "/usr/lib/python2.7/SocketServer.py", line , in __init__
self.server_bind()
File "/usr/lib/python2.7/BaseHTTPServer.py", line , in server_bind
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.7/SocketServer.py", line , in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line , in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno ] Permission denied

让我们将CAP_NET_BIND_SERVICE 功能添加到我们的Python二进制文件中。

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

上面的命令指出我们正在向 文件添加   CAP_NET_BIND_SERVICE  功能  /usr/bin/python2.7。 +ep 表示文件有效且已允许(  "-"  将其删除)。

现在,让我们尝试再次在端口80上运行Python Simple HTTP Server模块:

anshulp@dzone-vagrant-box:$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port ...
172.28.128.1 - - [/Jul/ ::] "GET / HTTP/1.1" -
172.28.128.1 - - [/Jul/ ::] code , message File not found
172.28.128.1 - - [/Jul/ ::] "GET /favicon.ico HTTP/1.1" -
172.28.128.1 - - [/Jul/ ::] code , message File not found
172.28.128.1 - - [/Jul/ ::] "GET /favicon.ico HTTP/1.1" -

现在,我们可以通过非特权用户通过特权端口80提供流量。

在撰写本文时,可以根据需求分配40多种功能。

有3种模式为功能:

  •  e:有效-  表示该功能已“激活”。

  • p:允许-  表示可以使用该功能。

  • i:已继承-  表示此功能由子元素/子流程继承。

功能提供了一种简洁有效的方法,可以将特权权限分配给非特权用户。

好文推荐:

整整127页!这是一份阿里云内部超全K8s实战手册

大厂0距离:网易 Linux 运维工程师面试真题,内含答案

牛x公司有一群牛x的人,鹅厂大佬如何玩转技术?

最新文章

  1. wamp集成环境开启rewrite伪静态支持
  2. Redis 对比 Memcached 并在 CentOS 下进行安装配置
  3. C语言指针类型
  4. Spring Boot快速开发Web项目
  5. 1 Spring MVC 原理
  6. 一些sql语句的常用总结(重要)
  7. JS-定时器换背景
  8. maven的安装与配置
  9. .net HttpClient类(System.Net.Http) c#并发使用测试、压测
  10. 编译QT时出现lib/libQtGui.so: undefined reference to `ts_read_raw&#39;的解决办法
  11. 【转】【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
  12. 原生js 实现的瀑布流
  13. [Bootstrap] 2. class &#39;row&#39; &amp; &#39;col-md-x&#39; &amp; &#39;col-md-offset-x&#39;
  14. CIFS与NFS(转)
  15. hdu 2101
  16. Zookeeper笔记3——原理及其安装使用
  17. MySQL数据库安装与配置详解(图文)
  18. &lt;Android基础&gt;(四) Fragment Part 1
  19. 【python】带图片验证码的登录自动化实战
  20. Bootstrap之网格类

热门文章

  1. 【vue】axios二次封装,更好的管理api接口和使用
  2. Spark3.0分布,Structured Streaming UI登场
  3. idea安装docker插件
  4. 傻瓜式教学--win10 + frp + rdpwrap + 阿里云服务器 --实现win10 多用户同时远程登录内网机
  5. python的一些基础知识
  6. MongoDB快速入门教程 (4.2)
  7. 一.2.序列化使用之用户资源功能app
  8. Docker环境下Java应用的最大内存和堆内存的设置
  9. Java 从入门到进阶之路(二十八)
  10. redis-cli连接redis服务器操作