linux内核权限控制之vfs_permission分析

本文探讨Linux内核中文件系统的权限控制,主要聚焦于vfs_permission函数及其调用的permission和generic_permission函数。通过对源代码的分析,揭示了在不同条件下如何检查和实施文件权限,包括读、写、执行以及对不可修改文件和只读文件系统的限制。同时,还涉及了内核的安全机制和CAPABILITY权限检查。
摘要由CSDN通过智能技术生成
在linux文件系统的各种操作里,很重要的一个东西就是权限控制,我们来一起追溯内核源代码,弄清楚内核的权限之谜。
在VFS(linux虚拟文件系统)里,权限控制都是通过vfs_permission来实现的,我们从vfs_permission来看,vfs_permission函数定义在fs/namei.c,定义如下
int vfs_permission(struct nameidata *nd, int mask)
{
	return permission(nd->dentry->d_inode, mask, nd);
}

vfs_permission函数直接调用了permission函数,我们进入permission函数看看。permission函数定义在fs/namei.c,定义如下
int permission(struct inode *inode, int mask, struct nameidata *nd)
{
	/*得到文件的权限*/
	umode_t mode = inode->i_mode;
	int retval, submask;


	if (mask & MAY_WRITE) {


		/*只读文件系统不可以写入*/
		if (IS_RDONLY(inode) &&
		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
			return -EROFS;


		/*不可修改文件不能写*/
		if (IS_IMMUTABLE(inode))
			return -EACCES;
	}




	/*对于普通文件的MAY_EXEC需要可执行权限,如果文件系统不可以执行,就返回错误*/
	if ((mask & MAY_EXE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值