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.rhkb.cn/news/229608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ邮件发送(PHP的Laravel)

1. 开启 QQ 邮箱的 SMTP 支持 2.里面会一个类似于密码之类&#xff08;复制一下&#xff09; 3.然后再 .env文件里面配置一下 MAIL_DRIVERsmtp —— 使用支持 ESMTP 的 SMTP 服务器发送邮件&#xff1b; MAIL_HOSTsmtp.qq.com —— QQ 邮箱的 SMTP 服务器地址&#xff0c;必…

OCP NVME SSD规范解读-3.NVMe管理命令-part2

NVMe-AD-8&#xff1a;在某些情况下&#xff08;如Sanitize命令、Format NVM命令或TCG Revert方法后数据被清除&#xff09;&#xff0c;设备应允许读取已清除的LBAs而不产生错误&#xff0c;并在最后一次清除完成后&#xff0c;对未写入LBAs的读取返回所有零值给主机 NVMe-AD…

什么牌子的护眼灯好用?2024好用护眼台灯分享

不良的光线、长时间的用眼都会给眼睛带来压力&#xff0c;影响视力健康&#xff01; 本人就是一个因为工作原因需要长时间坐电脑前码字和P图的打工人&#xff0c;对于出现眼睛酸痛、疲劳以及眼球出现红血丝的情况有多难受我是深有体会&#xff0c;在此之前我搜索了好多缓解眼睛…

golang并发编程-channel

在golang 并发编程里&#xff0c;经常会听到一句话&#xff1a;不要通过共享内存进行通信&#xff0c;通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。 基本结构 流程图 代码解读 type hchan struct {qcount uint // …

(NeRF学习)NeRFStudio安装win11

参考&#xff1a; 【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程nerfstudio介绍及在windows上的配置、使用NeRFStudio官网githubRuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory原因及解决 目录 requireme…

不同角度深入探讨Maya和Blender这两款软件的差异

当我们面对三维建模软件的选择时&#xff0c;许多初学者可能会感到迷茫。今天&#xff0c;我们将从不同角度深入探讨Maya和Blender这两款软件的差异&#xff0c;特别是对于游戏建模领域的用户来说&#xff0c;这将有助于您更好地理解两者之间的区别。 软件授权与开发背景&#…

Python爬虫中的协程

协程 基本概念 协程&#xff1a;当程序执行的某一个任务遇到了IO操作时&#xff08;处于阻塞状态&#xff09;&#xff0c;不让CPU切换走&#xff08;就是不让CPU去执行其他程序&#xff09;&#xff0c;而是选择性的切换到其他任务上&#xff0c;让CPU执行新的任务&#xff…

引导过程的解析以及教程za

bios加电自检------mbr--------grub-------加载内核文件------启动第一个进程 bios的主要作用&#xff1a;检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 boot开机启动项顺序&#xff0c;你可以把内核文件放在何处&#xff1f; 1.硬盘 …

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据&#xff0c;展示的时候需要合并成一条 数据表存储形式如下图 以type分组&#xff0c;type相同的算一条&#xff0c;且保留image和link的所有数据&#xff0c;用groupBy只保留一条数据 解决方案&#xff1a;用GROUP_CONCAT 完整语法如下 group_concat…

基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

10 个值得收藏的顶级手机数据恢复软件【2024年最新】

手机数据恢复&#xff0c;不要担心&#xff0c;今天就给大家分享10款数据恢复软件&#xff01; 现代人的手机中存储了许多重要数据&#xff0c;如照片、视频、消息、联系人等文件&#xff0c;如果手机损坏或数据丢失&#xff0c;这是一件非常烦恼的事情。此时&#xff0c;一款好…

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…

nginx源码分析-4

这一章内容讲述nginx的模块化。 ngx_module_t&#xff1a;一个结构体&#xff0c;用于描述nginx中的各个模块&#xff0c;其中包括核心模块、HTTP模块、事件模块等。这个结构体包含了一些模块的关键信息和回调函数&#xff0c;以便nginx在运行时能够正确地加载和管理这些模块。…

《动手学深度学习》学习笔记 第5章 深度学习计算

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知道&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

算法学习系列(十四):并查集

目录 引言一、并查集概念二、并查集模板三、例题1.合并集合2.连通块中点的数量 引言 这个并查集以代码短小并且精悍的特点&#xff0c;在算法竞赛和面试中特别容易出&#xff0c;对于面试而言&#xff0c;肯定不会让你去写一两百行的代码&#xff0c;一般出的都是那种比较短的…

[GKCTF 2020]ez三剑客-eztypecho

[GKCTF 2020]ez三剑客-eztypecho 考点&#xff1a;Typecho反序列化漏洞 打开题目&#xff0c;发现是typecho的CMS 尝试跟着创建数据库发现不行&#xff0c;那么就搜搜此版本的相关信息发现存在反序列化漏洞 参考文章 跟着该文章分析来&#xff0c;首先找到install.php&#xf…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

使用idea构建父子类springboot项目教程

第一步创建一个父类java项目&#xff08;最外层java项目&#xff09; 1.点击File 然后点击new 再点击Project 2.点击Maven 配置Java版本 再点击next 3.GroupId&#xff1a;包结构&#xff0c;ArtifactId&#xff1a;项目名称&#xff0c;填写完&#xff0c;点击next 4.点击…

IOS - 手机安装包 ipa 常见几种方式

安装 ipa 包的方法有很多中&#xff0c;可以通过不同的软件安装&#xff0c;本文只列出了常用的几种&#xff0c;做个简单的归纳整理 1、iTunes 安装 数据线连接手机之后&#xff0c;会自动连接iTunes&#xff0c;&#xff08;第一次连接的时候会提示是否信任此电脑&#xff0…

基于springboot的火锅店管理系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1选题动因 当前…