Linux文件的扩展属性 attr cap

文件属性

Linux文件属性分为常规属性与扩展属性,其中扩展属性有两种:attr与xattr.

一般常规的文件属性由stat API 读取,一般是三种权限,ower, group,时间等。

扩展属性attr

用户态API

ioctl(fd, FS_IOC32_SETFLAGS or FS_IOC_SETFLAGS,...)

使用ioctl中扩展的命令字

内核中的处理

ext2对应的FS_IOC32_SETFLAGS的函数

long ext2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)*/
struct ext2_inode_info {
__le32    i_data[15];
__u32    i_flags; //保存配置的位置在ext2自已的inode接口里的i_flags里。这些数据最后同步到文件系统的磁盘中。
__u32    i_faddr;
__u8    i_frag_no;
__u8    i_frag_size;
__u16    i_state;
__u32    i_file_acl;
__u32    i_dir_acl;
__u32    i_dtime;

命令

lsattr 与chattr

这两个命令的关键字是attr,不是xattr,但他们是文件的扩展属性的另一个基础版本

lsattr file.txt-----a---------- file.txt
[root@localhost ~]# chattr +i file.txt //为file.txt 增加i属性。不得任意更动文件或目录。
[root@localhost ~]# lsattr file.txt
----ia---------- file.txt
[root@localhost ~]#

扩展属性xattr

扩展属性是由Linux文件系统ext2(ext3)等为文件提供可配置扩展属性的空间。目前主要使用的是security.capability与security.selinux,用于可执行文件的能力控制和强制访问控制。

API

扩展属性有一组API,以xattr为关键字。

用户态API:
#include <sys/xattr.h>
ssize_t getxattr(const char *path, const char *name,  void *value, size_t size);       
ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size);       
ssize_t fgetxattr(int fd, const char *name,void *value, size_t size);

内核对应的API入口:

见fs/xattr.c
sys_fsetxattr(int fd, char __user *name, void __user *value,size_t size, int flags);

特定文件系统的支持ops

inode_operations 是VFS调用具体文件系统的注册函数。

其中以ext3文件系统为例,对xattr的支持。

扩展属性分类

在Linux2.6.18为 5 类:分别为os2, security, system, trusted, user.

4.19 的内核支持的类别有5 大类,security又细分了12个子属性

其中capability,selinux为常用项,capability 是linux内核对能力的的配置参数,selinux则是内部强访等使用的配置参数。

Linux系统中的使用扩展属性的命令

getcap ,setcap 可以修改security.capability,这些正是“能力”机制的配置命令

setcap  cap_sys_admin+ep /bin/mount
[root@localhost ~]# getcap /bin/mount
/bin/mount = cap_sys_admin+ep
[root@localhost ~]#

//配置的cap_xx与linux 中capability.h宏相一致。

setcap  cap_audit_control,cap_sys_admin+ep /bin/mount
[root@localhost ~]# getcap /bin/mount
/bin/mount = cap_sys_admin,cap_audit_control+ep
[root@localhost ~]#

attr:用于显示各类属性的名称,可以配置user.类中【属性和值 】对。

attr -l /bin/mount 显示了各类中的属性名,不单是user.
Attribute "selinux" has a 34 byte value for /bin/mount 是security类中属性
Attribute "capability" has a 20 byte value for /bin/mount// 是security类中属性
Attribute "NAME" has a 5 byte value for /bin/mount //其中NAME是user类中属性
close(4)                                = 0
llistxattr("/bin/mount", "security.selinux\0security.capabi"..., 65536) = 47
lgetxattr("/bin/mount", "security.selinux", 0x0, 0) = 34
lgetxattr("/bin/mount", "security.capability", 0x0, 0) = 20
lgetxattr("/bin/mount", "user.NAME", 0x0, 0) = 5
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
//在user类中配置NAME=mount的属性
attr -s NAME -V mount /bin/mount
Attribute "NAME" set to a 5 byte value for /bin/mount:
mount
//attr -g从user类中取出attr -g NAME /bin/mount
Attribute "NAME" had a 5 byte value for /bin/mount:
mount

getfattr与setfattr 可配置各个大类的属性

getfattr mount
file: mount
user.NAME //与attr一样,可以取出所有类别的属性,但只显示user类别的属性。
  [root@localhost bin]#
[root@localhost bin]# setfattr  -x user.NAME -h ./mount //删除一
[root@localhost bin]# getfattr mount
[root@localhost bin]# setfattr  -n user.NAME -v mymount ./mount
[root@localhost bin]# getfattr mount
file: mount
user.NAME
[root@localhost bin]#
//可配置user trusted等。
[root@localhost ~]# setfattr -n trusted.md5sum -v d41d8cd98f00b204e00998ecf8427e file.txt
[root@localhost ~]# getfattr file.txt
[root@localhost ~]# attr -l file.txt
Attribute "selinux" has a 38 byte value for file.txt
Attribute "md5sum" has a 30 byte value for file.txt
[root@localhost ~]# getfattr -m trusted file.txt
file: file.txt
trusted.md5sum


[root@localhost ~]# setfattr -n security.md5sum -v d41d8cd98f00b204e00998ecf8427e file.txt

[root@localhost ~]# getfattr -m security file.txt
# file: file.txt
security.md5sum
security.selinux


内核中如何实现“能力”机制

当可执行程序加载过程中取“security.capability”中数据的过程。

使用的过程

在进程启动后,他每通过一个系统调用时,都会使用cap_capable 来检查它的cred中的cap_effective是否有效。

capability机制

查看当前bash的cap的命令 capsh

当前centos用户当前可使用的权限为0。

root用户的权限

capsh --inh=cap_net_admin --user=centos --

启动一个bash,以centos的用户名,此用户名的capability为cap_net_admin

进程的5种功能级别

  • CapInh = Inherited capabilities //继承而来的
  • CapPrm – Permitted capabilities //允许的,是CapEff的超级。使用setcap可以修改。
  • CapEff = Effective capabilities //真实生效的
  • CapBnd = Bounding set //系统可以支持的范围。
  • CapAmb = Ambient capabilities set //环境中的。

查看一个进程的Cap集合

cat /proc/81772/status | grep Cap

CapInh: 0000000000001000

CapPrm: 0000000000000000

CapEff: 0000000000000000

CapBnd: 0000001fffffffff

CapAmb: 0000000000000000

Rock80中/etc/secuirty/*.conf 与pam_cap.so

在su netadmin等命令时,会读到此文件,并且cap_set给bash进程。这样netadmin启动的进程就有了相应的cap了。

pam组件在认证过程中用pam_cap.so

附件

 How to Configure Linux Capabilities Per User - ITCodar

 Linux capabilities 101 - Linux Audit (linux-audit.com)

 capabilities(7) - Linux manual page (man7.org) 对capabilities的全面说明

Linux Capabilities: Hardening Linux binaries by removing setuid (linux-audit.com) 为ping程序取消root s位,并为它配置net_raw的cap(setcap )
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/279853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git回滚操作,常用场景

文章目录 git回滚操作1.git reset --hard 【版本号】2.回滚后的版本v2又想回到之前的版本v32.1 git reflog 3.git checkout -- 文件名4.git reset HEAD 文件名 git回滚操作 假设我们现在有三个版本 现在回滚一个版本 1.git reset --hard 【版本号】 发现只剩下两个版本了 2.…

二叉树简单实现(C语言版)

一.简单建二叉树 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在大家对二 叉树结构掌握还不够深入&#xff0c;为了降低大家学习成本&#xff0c;此处手动快速创建一棵简单的二叉树&#xff0c;快速进入二叉树 …

二叉树顺序结构与堆的概念及性质(c语言实现堆)

上次介绍了树&#xff0c;二叉树的基本概念结构及性质&#xff1a;二叉树数据结构&#xff1a;深入了解二叉树的概念、特性与结构 今天带来的是&#xff1a;二叉树顺序结构与堆的概念及性质&#xff0c;还会用c语言来实现堆 文章目录 1. 二叉树的顺序结构2.堆的概念和结构3.堆…

Kafka:本地设置

这是设置 Kafka 将数据从 Elasticsearch 发布到 Kafka 主题的三部分系列的第一部分;该主题将被 Neo4j 使用。第一部分帮助您在本地设置 Kafka。第二部分将讨论如何设置Elasticsearch将数据发布到Kafka主题。最后 将详细介绍如何使用连接器订阅主题并使用数据。 Kafka Kafka 是…

SpringBoot项目部署及多环境

1、多环境 2、项目部署上线 原始前端 / 后端项目宝塔Linux容器容器平台 3、前后端联调 4、项目扩展和规划 多环境 程序员鱼皮-参考文章 本地开发&#xff1a;localhost&#xff08;127.0.0.1&#xff09; 多环境&#xff1a;指同一套项目代码在把不同的阶段需要根据实际…

守护青山绿水 千巡翼Q20无人机变身护林员

守护青山绿水 千巡翼Q20无人机变身护林员 无人机目前在林业上的应用主要在森林资源调查、森林资源监测、森林火灾监测、森林病虫害监测防治、野生动物监测等方面。传统手段在森林资源调查中需要耗费大量人力物力&#xff0c;利用无人机技术可快速获得所需区域高精度信息&#…

Java核心知识点1-java和c++区别、隐式和显示类型转换

java和c区别 java通过虚拟机实现跨平台特性&#xff0c;但c依赖于特定的平台。java没有指针&#xff0c;它的引用可以理解为安全指针&#xff0c;而c和c一样具有指针。java支持自动垃圾回收&#xff0c;而c需要手动回收。java不支持多重继承&#xff0c;只能通过实现多个接口来…

WPF 消息日志打印帮助类:HandyControl+NLog+彩色控制台打印+全局异常捕捉

文章目录 前言相关文章Nlog配置HandyControl配置简单使用显示效果文本内容 全局异常捕捉异常代码运行结果 前言 我将简单的HandyControl的消息打印系统和Nlog搭配使用&#xff0c;简化我们的代码书写 相关文章 .NET 控制台NLog 使用 WPF-UI HandyControl 控件简单实战 C#更改…

【嵌入式开发 Linux 常用命令系列 7.3 -- linux 命令行数值计算】

文章目录 linux 命令行数值计算使用 awk使用 bc 命令使用 Bash 的内置算术扩展使用 expr脚本命令实现 linux 命令行数值计算 在 Linux 命令行中&#xff0c;您可以使用多种方法来执行基本的数学运算。以下是一些示例&#xff1a; 使用 awk awk 是一个强大的文本处理工具&…

Linux第一个小程序-进度条(c语言版)

目录 行缓冲区概念&#xff1a; 行缓冲区代码演示&#xff1a; ​编辑进度条代码 1&#xff1a;memset函数&#xff1a; 2&#xff1a;const char* lable"|/-\\"; 3&#xff1a;usleep C语言 usleep 函数的功能和用法&#xff1a; 4&#xff1a;进度条代码的实…

C语言经典算法【每日一练】20

题目&#xff1a;有一个已经排好序的数组。现输入一个数&#xff0c;要求按原来的规律将它插入数组中。 1、先排序 2、插入 #include <stdio.h>// 主函数 void main() {int i,j,p,q,s,n,a[11]{127,3,6,28,54,68,87,105,162,18};//排序&#xff08;选择排序&#xff09…

12.21自动售货机,单物品,多物品

自动售货机 if朴素方法 一种思路是用寄存器cnt记录已有的最小单位货币量&#xff0c;这里就是0.5 当d1时&#xff0c;cnt1;d2时&#xff0c;cnt2;d3时&#xff0c;cnt4; timescale 1ns/1ns module seller1(input wire clk ,input wire rst ,input wire d1 ,input wire d2 …

Python:日期和时间类型学习

背景 在非开发环境经常需要做一下日期计算&#xff0c;就准备使用Python&#xff0c;顺便记下来学习的痕迹。 代码 1 1 # coding utf-82 2 3 3 from datetime import *4 4 5 5 ########################## 日期 ##########################6 6 date_now date.today()…

【网络安全】全网最全的渗透测试介绍(超详细)

渗透测试介绍 渗透测试就是模拟攻击者入侵系统&#xff0c;对系统进行一步步地渗透&#xff0c;发现系统地脆弱环节和隐藏风险。最后形成测试报告提供给系统所有者。系统所有者可根据该测试报告对系统进行加固&#xff0c;提升系统的安全性&#xff0c;防止真正的攻击者入侵。…

【Leetcode 39】组合总和 —— 回溯法

39. 组合总和 给你一个无重复元素的整数数组candidates和一个目标整数target &#xff0c;找出candidates中可以使数字和为目标数target的 所有不同组合&#xff0c;并以列表形式返回。你可以按**任意顺序 **返回这些组合。 candidates中的同一个数字可以 无限制重复被选取 。…

C++线性表

线性表的定义及其运算 线性表是一种最简单、最基本也是最常用的线性结构。在线性结构中&#xff0c;数据元素之间存在一个对一个的线性关系&#xff0c;数据元素“一个接一个地排列”。在一个线性表中&#xff0c;数据元素的类型是相同的&#xff0c;或者说&#xff0c;线性表…

【教程】Typecho Joe主题开启并修复壁纸相册不显示问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 Joe主题本身支持“壁纸”功能&#xff0c;其实就是相册。当时还在网上找了好久相册部署的开源项目&#xff0c;太傻了。 但是网上教程很少&#xff0c;一没说如何开启壁纸功能&#xff0c;二没说开启后为…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境…

使用yolov5的2.0分支训练自己的模型并在x3派运行

目录 准备代码、权重、数据集配置环境准备数据标注数据 训练模型转换模型验证模型准备校准数据转换为板上模型模型精度分析 上板 之前训练自己模型的时候使用的是博主 bubbling的1.0分支的代码&#xff0c;博主的 博客比较详细&#xff0c;使用的是VOC2007数据集&#xff0c;…

迷宫问题的对比实验研究(代码注释详细、迷宫及路径可视化)

题目描述 对不同的迷宫进行算法问题&#xff0c;广度优先、深度优先、以及人工智能上介绍的一些算法&#xff1a;例如A*算法&#xff0c;蚁群算法等。 基本要求&#xff1a; &#xff08;1&#xff09;从文件读入9*9的迷宫&#xff0c;设置入口和出口&#xff0c;分别采用以上方…
最新文章