理解基本权限以及特殊权限:Suid 、Sgid、Sticky以及acl

简介:

理解基本权限以及特殊权限:Suid 、Sgid、Sticky以及acl

1 在Linux中特殊权限是什么?为什么要设定特殊权限?回答这个问题前,我们不妨思考为什么要设定权限?

  大家知道Linux中一切皆文件。不论你是什么,在linux系统中都会被当做一个文件来看待。无论你是文本或目录,硬件或软件,图片或视频等等,统统都被当做文件来看待。所以,在linux中,文件的重要性不言而喻。那么如何更合理的管理好文件呢?文件的权限管理是很重要的一环,所以接下来我将介绍文件的基本权限以及特殊权限。

1 基本文件权限

对于文件的权限linux系统中是通过读(r)写(w)执行(x)来进行管理的。
权限 文件 目录
r 可以打开和阅读文件的内容 可以用ls查看此目录中的文件,但不能阅读目录内的文件
w 可以修改文件内容 可以在目录中删除或添加文件以及目录
x 可以运行一个执行文件 可以使用cd进入到这个目录

  介绍完了rwx权限在文件以及目录中的意义,接下来介绍赋予权限的方法。在这里我采用的八进制赋权的方法,权限对应关系如图。 Alt text

wKiom1jorE-BoHHYAAAV-DGct-E684.png

通过这种对应关系,我们可以给文件或目录赋权。以下是实例。

touch permission.txt
ls -l permission.txt 
-rw-r--r--. 1 root root 0 Apr  8 14:40 permission.txt
chmod 755 permission.txt 
ls -l permission.txt 
-rwxr-xr-x. 1 root root 0 Apr  8 14:40 permission.txt

讲解:	1.创建一个文件	
        2.查看文件权限为:-rw-r--r--,对应权限 属主:读写;属组:读;其他者:读
        3.接下来我们使用chmod更改文件的权限
        4.可以看到文件的权限为:-rwxr-xr-x 对应权限 属主:读写执行;属组:读执行;其他者:读执行
note:一般我们设置文件的权限为644,不轻易给文件赋予X权限,因为执行权限对于文件来说十分重要

2 特殊权限 

讲解完了基本权限,接下来该讲讲特殊权限。当有些权限问题,基本权限解决不了,那么就需要特殊权限来解决了。这就是特殊权限存在的意义。

2.1 三大特殊权限分别对于文件以及目录的作用。 Alt text

wKiom1jorHfSFiLXAABiVSjnRLk785.png

1.设置SUID的意义:让其他用户具有文件所有者的执行权限。
2.设置SGID的意义:让其他用户具有文件所属组的权限。这样其他用户就可以在设置SGID的目录中可以随意的修改文件。生产环境中常为开发人员用户组设置此权限。
3.设置Sticky的意义:只有文件的属主可以删除文件。生产环境中常为开发人员用户组设置此权限。

2.2 如何判断文件或者目录设置了特殊权限 Alt text

wKioL1jorI3DxwHAAABxVg4_yf4118.jpg

通过上图我们可以知道,当对用户设置了SUID,用户原本执行权限位置会被S或s替换掉。属主有执行权限,替换为s;属主没有执行权限时,则替换为大S。大S在这里是没有任何作用,小s才会让其他用户拥有执行权限。同理,SGID,Sticky也是相同的道理。

 ls -ld /usr/bin/passwd /tmp
 drwxrwxrwt. 16 root root  4096 Apr  8 15:03 /tmp
-rwsr-xr-x.  1 root root 27832 Jun 10  2014 /usr/bin/passwd
	以上是系统对文件以及目录设置的特殊权限。
	passwd文件设置了SUID,作用是除root用户以外的用户可以修改自身的用户密码;
	tmp目录设置了sticky,其作用是使进入tmp目录内的用户可以随意修改	文件内容,但是不能删除其他用户创建的文件。

2.3 设置Suid、Sgid、Sticky

设置特殊权限很简单,可以参考以下命令。

3.1 设置suid/取消suid
		chmod u+s file
		chmod u-s file
	3.2 设置sgid/取消sgid		
		chmod g+s dir
		chmod g-s dir
	3.3 设置sticky		
		chmod o+t dir
		chmod o-t dir

2.4 acl权限

除了文件的所有者,所属组和其他人,可以对通过acl权限实现对更对的用户设置权限。

获取acl权限信息
	命令:getfacl dir/file
		mkdir acltest
		getfacl acltest/
		# file: acltest/
		# owner: root
		# group: root
		user::rwx
		group::r-x
		other::r-x设置acl权限
	命令:setfacl -m u/g:name:permission dir/file
		setfacl -m u:michael:rwx acltest/
		getfacl acltest/
		# file: acltest/
		# owner: root
		# group: root
		user::rwx
		user:michael:rwx		
		group::r-x
		mask::rwx
		other::r-x
以上通过setfacl命令,michael用户对/tmp/acltest目录已经拥有了rwx权限。这就是acl权限的作用,大家可以举一反三。



本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1914120,如需转载请自行联系原作者
相关文章
|
API 数据库 Android开发
构建高效Android应用:探究Kotlin多线程优化策略
【2月更文挑战第14天】随着移动设备性能的日益强大,用户对应用程序的响应速度和流畅性要求越来越高。在Android开发中,合理利用多线程技术是提升应用性能的关键手段之一。Kotlin作为一种现代的编程语言,其协程特性为开发者提供了更为简洁高效的多线程处理方式。本文将深入探讨使用Kotlin进行Android多线程编程的最佳实践,包括协程的基本概念、优势以及在实际项目中的应用场景和性能优化技巧,旨在帮助开发者构建更加高效稳定的Android应用。
|
关系型数据库 MySQL PostgreSQL
MySQL和PostgreSQL的常用语法差异
背景 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那PostgreSQL和MySQL对于开发者来说的差异在哪里呢?末学对比了下语法差异,不一样的地方用红色标记了出来,供大家参考。
13722 0
|
JavaScript 开发者 索引
TypeScript接口与类型别名:深入解析与应用实践
【7月更文挑战第10天】TypeScript的接口和类型别名是定义类型的关键工具。接口描述对象结构,用于类、对象和函数参数的形状约束,支持可选、只读属性及继承。类型别名则为复杂类型提供新名称,便于重用和简化。接口适合面向对象场景,类型别名在类型重用和复杂类型简化时更有优势。选择时要考虑场景和灵活性。
|
Java API C++
Java JNI开发时常用数据类型与C++中数据类型转换
Java JNI开发时常用数据类型与C++中数据类型转换
484 0
|
11月前
|
算法 调度 Docker
Docker Swarm 集群组成
【10月更文挑战第7天】
115 3
|
Java 机器人 API
Java基础&常用API(1)
Java基础&常用API(1)
92 1
|
JSON 数据格式
UE4 结构体和JSON互转 - DTBPJson插件说明
UE4 结构体和JSON互转 - DTBPJson插件说明
523 1
|
Ubuntu Shell
Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音
Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音
627 0
|
前端开发 Java 数据库
基于Springboot外卖系统12:删除菜品套餐类别+修改套餐类别信息
在分类管理列表页面,可以对某个分类进行删除操作。需要注意的是当分类关联了菜品或者套餐时,此分类不允许删除。
240 0