Linux文件的扩展属性 attr cap

news2025/1/21 4:17:47
文件属性

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.coloradmin.cn/o/1344485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述&#xff1f; 今天在研究了shiro的新版本shiro1.13.0版本&#xff0c;发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出&#xff0c;在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了&#xff0c;新版本如何使用呢…

数据压缩专题——静止图像的小波变换编码

随着数字图像技术的发展和应用的广泛&#xff0c;对图像的压缩和编码变得越来越重要。小波变换编码作为一种有效的图像压缩和编码方法&#xff0c;在静止图像处理中得到了广泛应用。本文将介绍静止图像的小波变换编码的基本原理和关键步骤&#xff0c;以及其在图像压缩中的应用…

1panel使用指南(一)面板安装

一、1panel简介 1Panel是杭州飞致云信息科技有限公司推出的产品 [1]&#xff0c;帮助用户实现快速建站。 [2]是一款现代化、开源的Linux服务器运维管理面板&#xff0c;于2023年3月推出&#xff0c;深度集成WordPress和Halo&#xff0c;一键完成域名绑定、SSL证书配置等操作&a…

用linux中定时任务Crontab,向企业微信群通过机器人发送消息

1.使用yum命令安装Crontab&#xff1a;这个很关键&#xff0c;没有安装的话会提示命令not found yum install vixie-cron yum install crontabs 注&#xff1a;vixie-cron软件包是cron的主程序&#xff1b; crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表…

Hadoop(2):常见的MapReduce[在Ubuntu中运行!]

1 以词频统计为例子介绍 mapreduce怎么写出来的 弄清楚MapReduce的各个过程&#xff1a; 将文件输入后&#xff0c;返回的<k1,v1>代表的含义是&#xff1a;k1表示偏移量&#xff0c;即v1的第一个字母在文件中的索引&#xff08;从0开始数的&#xff09;&#xff1b;v1表…

C#中使用is关键字检查对象是否与给定类型兼容

目录 一、定义 二、示例 三、生成 在程序的开发过程中经常会使用类型转换&#xff0c;如果类型转换不成功则会出现异常&#xff0c;从抛出异常到捕获并处理异常&#xff0c;无形中增加了系统的开销&#xff0c;而且太过频繁地处理异常还会严重地影响系统的稳定性。is关键字可…

要学习openfoam,c++需要掌握到什么程度?

要学习openfoam&#xff0c;c需要掌握到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「c的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&…

JY901S 9轴姿态角度传感器模块

JY901S 9轴姿态角度传感器模块 JY901S 简介模块特性引脚说明IIC通讯IIC读写寄存器代码示例 JY901S 简介 模块集成高精度的陀螺仪、加速度计、地磁场传感器&#xff0c;采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法&#xff0c;能够快速求解出模块当前的实时运…

PHP序列化总结2--常见的魔术方法

魔术方法的概念 PHP的魔术方法是一种特殊的方法&#xff0c;用于覆盖PHP的默认操作。它们以双下划线&#xff08;__&#xff09;开头&#xff0c;后面跟着一些特定的字符串&#xff0c;如__construct()、__destruct()、__get()等。这些魔术方法在对象执行特定操作时被自动调用…

OpenCV-Python(22):直方图的计算绘制与分析

目标 了解直方图的原理及应用使用OpenCV 或Numpy 函数计算直方图使用Opencv 或者Matplotlib 函数绘制直方图学习函数cv2.calcHist()、np.histogram()等 原理及应用 直方图是一种统计图形&#xff0c;是对图像的另一种解释&#xff0c;用于表示图像中各个像素值的频次分布。直…

【Linux Shell学习笔记】Linux Shell的位置参数与函数

一、位置参数 位置参数&#xff0c;也被称之为位置变量&#xff0c;通过位置参数&#xff0c;可以在执行程序的时候&#xff0c;向程序传递数据 1.1 shell接收参数的方法 1.2 向shell传递参数的方法 二、函数 2.1 函数基础 2.1.1 函数简介 函数本质上就是一个代码块&#xf…

【并行计算】GPU,CUDA

一、CUDA层次结构 1.kernel核函数 一个CUDA程序是一个kernel核函数被GPU的多个计算单元并行执行的过程&#xff0c;CUDA给了如下抽象 dim3 threadsPerBlock(4, 3, 1); dim3 numBlocks(3, 2, 1); matrixAdd<<<numBlocks, threadsPerBlock>>>(A, B, C); 2.G…

人工智能的第一性原理

今天跟大家分享一篇 北师大 - 图像处理研究中心主任 郭平教授的一篇文章 通过“四个问题”&#xff0c; 解释了人工智能的第一性原理 提出了如何运用第一性原理思维 来解决人工智能缺乏基本常识的问题 并且他建议将最小作用量原理 作为人工智能的第一性原理 什么是第一…

JavaScript系列——正则表达式

文章目录 需求场景正则表达式的定义创建正则表达式通过 / 表示式/ 创建通过构造函数创建 编写一个正则表达式的模式使用简单模式使用特殊字符常用特殊字符列表特殊字符组和范围 正则表达式使用代码演示 常用示例验证手机号码合法性 小结 需求场景 在前端开发领域&#xff0c;在…

Java注解学习,一文掌握@Autowired 和 @Resource 注解区别

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【AI导师】利用Coding Agent完成AIGC编程

利用Coding Agent完成AIGC编程 一、前言二、Coding Agent三、1024code四、AI导师README项目初版功能定义代码结构设计方案函数方法设计方案迭代记录 一、前言 AI产品的发展确实在过去两年年中取得了显著进展&#xff0c;尤其是在编程领域。一开始&#xff0c;ChatGPT和类似的语…

Android 13 默认关闭 快速打开相机

介绍 在设置菜单的手势界面里&#xff0c;快速打开相机是默认开启的&#xff0c;此功能当开启时连续点击两次电源键会打开相机&#xff0c;现在客户需要默认关闭。 效果展示 修改 这里一开始想到的就是配置文件&#xff0c;在路径下果然找到了,从注释中看使我们需要的&#x…

纯CSS3制作优惠券线性UI效果

纯CSS3制作优惠券线性UI效果-遇见你与你分享

MIT线性代数笔记-第33讲-复习三

目录 33.复习三打赏 33.复习三 已知 d u ⃗ d t A u ⃗ [ 0 − 1 0 1 0 − 1 0 1 0 ] u ⃗ \dfrac{d \vec{u}}{dt} A \vec{u} \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix} \vec{u} dtdu ​Au ​010​−101​0−10​ ​…

对DataFrame各列数据进行描述性统计分析 DataFrame.describe()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 对DataFrame各列数据 进行描述性统计分析 DataFrame.describe() [太阳]选择题 请问以下代码返回的统计性信息中不包括哪个选项&#xff1f; import pandas as pd df pd.DataFrame( {A:…