Linux文件的扩展属性

news2024/9/21 14:24:38

文件属性

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:

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/594490.html

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

相关文章

从零开始学习JavaScript:轻松掌握编程语言的核心技能②

从零开始学习JavaScript&#xff1a;轻松掌握编程语言的核心技能② 一&#xff0c;JavaScript 函数1.1 JavaScript 函数语法1.2 局部 JavaScript 变量1.3 全局 JavaScript 变量 二&#xff0c;JavaScript 作用域2.1JavaScript 局部作用域 三&#xff0c;JavaScript 事件3.1HTML…

Linux——磁盘文件的理解 + inode详解 + 软硬链接 +动静态库

索引 磁盘文件的理解inode软硬链接动静态库理解动态链接与地址无关生成动静态库使用静态库使用动态库动态链接再次理解&#xff01; 磁盘文件的理解 之前讲述的都是内存级的文件&#xff0c;但是系统中最多的还是磁盘级的文件&#xff0c;大量的文件自然也需要被管理&#xff…

【算法】08 耦合 Lorenz 63 模式的参数估计实验

摘要 本实验通过建立基于耦合 Lorenz 63 模式的孪生实验框架&#xff0c;使用集合调整卡尔曼滤波器EAKF实现参数估计&#xff0c;测试参数估计开始的不同阶段、观测误差、同化频率、协方差膨胀等方法细节对于参数估计结果的影响。 耦合 Lorenz 63 模式 Lorenz 63 模式是Lore…

Postman实战:轻松搞定接口自动化测试

随着移动互联网的发展&#xff0c;接口自动化测试已经成为软件测试领域中不可或缺的一部分。而作为最流行的API开发工具之一&#xff0c;Postman凭借其简单易用、功能强大的特点赢得了越来越多开发者和测试人员的青睐。 想要掌握Postman的接口自动化测试技能&#xff0c;只需要…

JDK 下载与安装

首先下载 jdk 最新版本。可以去 http://java.sun.com/j2se/1.4.2/download.html 版本一&#xff1a;适合 win7oracle 版本 java 下载最新的 jdk 版本&#xff0c; 打开界面后。选择 J2SE v 1.4.2_08 SDK 拦目下面的 Download J2SE SDK&#xff0c; 然后选择 Accept License…

6设计指令流水线-3【FPGA模型机课程设计】

6设计指令流水线-3【FPGA模型机课程设计】 前言推荐6设计指令流水线-3安排测试与结果 指令流水线理论MIPS的一种简单实现基本的MIPS流水线 指令流水线实现MIPS五段流水CPU设计 基于单周期CPU的流水线设计乘除流水线的设计原子流水线的设计代码设计EX_Mem 附录0 框架 最后 前言 …

理论+实操|一文掌握 RFM 模型在客户数据洞察平台内的落地实战

确定用户价值是整个用户运营过程中极其重要的一环。传统的工作流程中&#xff0c;业务人员向数据部门提出数据需求&#xff0c;等待返回结果后再进行价值分析是主要的准备工作&#xff0c;但这个过程非常耗时。为了提高工作效率&#xff0c;业务人员经常会基于自己对用户的理解…

链表【+逆序链表】、循环队列、堆栈讲解(链表头和尾插法)

文章目录 一、链表&#xff08;1&#xff09;链表简单介绍&#xff08;2&#xff09;链表的创建&#xff08;3&#xff09;数据的插入【1】头插法【2】尾插法 &#xff08;4&#xff09;链表的删除&#xff08;5&#xff09;源代码实现 二、队列&#xff08;循环队列&#xff0…

热闹炸了,公司居然公然鼓励员工玩游戏

池塘边的榕树上&#xff0c;知了在声声叫着夏天&#xff0c;操场边的秋千上&#xff0c;只有蝴蝶停在上面..........每逢儿童节到来之时&#xff0c;东东总是会回想起儿时的自己&#xff0c;面对那即将到来的节日&#xff0c;兴奋异常。 因为在这一天全校会给我们放上一天假&am…

Android进阶之路 - 字体阴影、文字阴影

最近几个月都挺忙&#xff0c;忙着工作&#xff0c;忙着成长… 一直以来我认为在开发中首当其冲的肯定是需求、功能&#xff0c;然后才是UI细节&#xff1b;所以我自己一般不太会去深究一些看不明显的UI&#xff0c;不过这俩日同事提醒我文字有阴影效果&#xff0c;细看之下果然…

Java000——超好用的工具推荐

下面介绍工具直接安装即可&#xff0c;基本上都是一路next&#xff08;有需要选择安装路径则选择自己的安装目录即可&#xff09; Everything Everything用于搜索电脑本地文件、文件夹&#xff0c;快速高效 下载地址 Snipaste截图工具 下载地址 notepad 轻量级文本编写查看…

C++11 右值引用

文章目录 一. 左值&#xff1f;右值&#xff1f;二. 右值引用的使用三. 万能引用&完美转发四. 移动构造&移动赋值结束语 一. 左值&#xff1f;右值&#xff1f; C中&#xff0c;对于左值&#xff0c;右值&#xff0c;我们可能会理解为 赋值符号左边是左值&#xff0c…

木棒 DFS经典题 剪枝优化 满注释版 java

&#x1f351; 算法题解专栏 &#x1f351; 题目地址 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 50 50 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始…

【数据结构与算法】最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 一、最小生成树的概念 二、最小生成树的求解方法 三、练习题 四、最小生成树在实际应用中的例…

返回类对象时,什么时候调用拷贝构造函数,什么时候会进行返回值优化(RVO)

#include<iostream> using namespace std;class Person { public:Person(){}Person(int age){m_Age age;}Person(const Person& p){cout << "拷贝构造函数" << endl;}Person fun(){cout << "fun this" << " "…

一步步教你如何剪辑出专业水平的视频

1. 视频字幕制作。媒体梦工厂软件提供了强大的字幕制作功能&#xff0c;可以自主设计字幕的颜色、大小、字体等属性&#xff0c;使字幕更加具有视觉冲击力。"媒体梦工厂软件是一款广受欢迎的影视后期制作软件&#xff0c;自从软件发布以来在行业内有着广泛的应用。本文将会…

使用redis模拟手机验证码发送及消费者与生产者案例

规定一个手机号一天只能请求三次验证码&#xff0c;且每次请求的验证码只有一分钟就会过期 package com.doit.demo;import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;import java.util.Random; import java.util.Scanner;public class PhoneNum {publ…

Spark基础入门篇 | MapReduce原理 + Spark原理 + PySpark环境搭建 + 简单实战

&#x1f604; 之前简单了解过Spark&#xff0c;并简单用别人的代码跑过pyspark的数据处理和模型的分布式推理&#xff0c;但没做系统的总结&#xff0c;那这篇博客就对Spark做个基础入门讲解&#xff0c;看完基本就算基础入门了&#xff0c;后面再实操就会轻松一些。 文章目录…

Windows本地提权 · 下篇

Windows本地提权&#xff0c;这种提权适用于有一本地个用户的基础上&#xff0c;有一定的权限&#xff0c;无法从webshell上进行提权 目录 BypassUAC提权 原理 关于UAC MFS绕过提权 UAC等级为低绕过测试 UAC等级为中绕过测试 UAC等级为高绕过测试 注意&#xff1a;bypa…

【综述】视频无监督域自适应(VUDA)的小综述

【综述】视频无监督域自适应&#xff08;VUDA&#xff09;的小综述 一篇小综述&#xff0c;大家看个乐子就好&#xff0c;参考文献来自于一篇综述性论文 链接&#xff1a;https://arxiv.org/abs/2211.10412 这次基于三篇有代表性的文章来讲解 X. Song, S. Zhao, J. Yang, H.…