Linux内核功能介绍及如何使用保护您的网页安全
在本文中,我们快速浏览了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:已继承- 表示此功能由子元素/子流程继承。
功能提供了一种简洁有效的方法,可以将特权权限分配给非特权用户。
好文推荐:
Linux内核功能介绍及如何使用保护您的网页安全的更多相关文章
- Linux内核策略介绍
Linux内核策略介绍学习笔记 主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发 ...
- Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- Linux内核策略介绍学习笔记
主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...
- Linux 内核剖析
https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- 20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS
Linux内核分析第三周 构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 ...
- linux内核分析(网课期末&地面课期中)
堆栈变化过程: Linux内核分析——计算机是如何工作的 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有 ...
- 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #7 Cgroup、Namespace、Linux容器
HACK #7 Cgroup.Namespace.Linux容器 本节将介绍Cgroup与Namespace以及通过这两个功能实现的容器功能.CgroupCgroup(control group)是将 ...
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...
随机推荐
- Jmeter工具环境搭建
Jmeter工具什么 1 多线程框架-支持多并发操作 2 用于对服务器模拟负载 3 支持web,数据库,FTP服务器系统的性能测试 4 开源,可二次定制开发 下载Java JDK 下载地址: http ...
- 深入理解JVM(③)虚拟机性能监控、故障处理工具
前言 JDK的bin目录中有一系列的小工具,除了java.exe.javac.exe这两个编译和运行Java程序外,还有打包.部署.签名.调试.监控.运维等各种场景都会用到这些小工具. 这些工具根据软 ...
- 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时p ...
- Git的常用命令记录
Git的常用命令记录 1.与远程仓库建立连接,即关联一个远程库 git remote add origin git@server-name:path/repo-name.git; 2.查看当前分支 ...
- tap4fun(成都尼必鲁)--2020春招实习
笔试 可能是我做过最简单的笔试了,只有选择填空,而且难度都不是很大,没啥印象了,考点和其他公司的笔试都差不多. 一面(技术面) 具体的不太记得了,因为这是我很后面面的了,所以问题基本都是那几个问题,都 ...
- 入门大数据---Kafka的搭建与应用
前言 上一章介绍了Kafka是什么,这章就讲讲怎么搭建以及如何使用. 快速开始 Step 1:Download the code Download the 2.4.1 release and un-t ...
- Python实用笔记 (16)函数式编程——偏函数
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去: def int2(x, base=2): re ...
- dart快速入门教程 (7.4)
7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...
- JavaScript基础使用parseInt()转换整数(005)
parseInt()可以把一个字符串格式的整数解析一个整数数值,如"32 days"将被解析为32.这个函数还接受第二个参数,指定整数的进制(当然,一般来说应该是十进制).一个好的 ...
- BZOJ3242 快餐店
原题传送门 题意 给定一个n条边n个点的连通图,求该图的某一点在该图距离最远的点距离它的距离的最小值. 题解 显然,答案是\(\frac {原图直径}{2}\). 本体的图有 \(n\) 个点 \(n ...