Linux是多用户多任务的操作系统,了解掌握Linux的权限分配机制,也是管理Linux系统安全的基础之一。
文件目录的权限格式如下:
1.其中权限位可以看对象到是一个9个占位符,其实分为三位一组:
(1) 第一组:对应的是文件或目录的所有者属主权限。owner
(2) 第二组:对应的是文件或目录的所属组权限。group
(3) 第三组:对应的是文件或目录的其他用户权限。other
2.相应的权限意义如下:
r:读
w:写
x;执行
-:无任权限
*注意:权限对文件和目录意义是有区别的,下面详细介绍:
3.rwx对文件的意义:
r:可以查阅文件的内容,比如cat命令。
w:可以修改,增加文件内容。注意:对文件的删除操作要看上级目录对应的权限,俗话说的打狗看主人。
x:可以把文件提交给内核执行,这样文件就具有了执行权限。
4.rwx对目录的意义:
r:可以浏览目录里的文件名。前提是必须有x权限。
w:可以删除目录里的文件或者重命名。
x:可以进入目录,使用cd命令
5.注意总结点:
目录一般必要具有x权限,否则后续相应权限意义不大,文件一般不能随便有执行权限,一个恶意的文件对于Linux的系统安全将无从保证。
6.对文件或目录的用户和组授权的方式:可以分为两种,一种是用数字授权,一种是用字符或字符组合授权,下面分别说明:
(1)数字利用的是八进制权限对应表,如下:
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
这样每组的权限对应可以用三个八进制数表示:xxx=(000-777)
命令:chmod
语法格式:
chmod [options] xxx FILE
chmod –reference=RFILE FILE :可以参考已有权限文件的权限授权。
常用选项optons
-R:可以对目录进行递归授权
注意:这样授权成功会覆盖先前已有的权限。
(2)字符授权有三种方式:
+:追加权限
-:清除权限
=:附加权限,这样会覆盖已有的权限。
以上还可可以组合使用
对象分为以下四种:
a:属主
g:属组
o:其他用户
a:所有用户=ago以上所有用户
举例格式:
chmod o+x,g=r,u-w FILE
chmod a=rwX FILE
大X递归授权时,会给目录相应权限,文件跳过,
7.更改文件的属主属组命令:
(1)chown
语法格式:
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
常用选项:
-R:递归更改文件或目录属主属组
“:”“.”是属主和属组的分割符
可以只更改属主:
chown owner FILE
也看可以只更改属组:
chown :group 前面用“.”“:”都可以
(2)chgrp命名只支持更改属组
语法格式
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE..
常用选项:
-R:递归更改目录属组
8.umask:对于新创建的文件和目录系统会有一个默认权限位,前面我们知道,目录一般必要有执行权限,文件一般不能有执行权限,所以在授权时目录默认为777,文件默认为666,但是这样的权限位在系统安全中很不安全,为了区分用户权限,必须对相应的权限做出默认限制,这里就需要用到umask遮罩码,目录umask-777,文件umask-666,这样我们发现超级管理员创建的文件和目录跟普通用户创建默认的授权时不同的,为了保证文件不能有执行权限x,数字授权时正常使用umask,文件授权需要遵循有奇数加1,偶数保留。
命令:umask
直接使用umask 可以查看当前用户的遮罩码值
注意:umask=vale命令设置,只对当前shell环境生效,如何想一直有效,可以在全局/etc/bashrc 或者~/.bashrc 里设置。
9.suid sgid sticky:
分析进程安全上下文:用户要想操作命令发起进程,首先这个二进制程序命令文件必须有执行权限,进程是以某用户身份运行的,也就是说进程是发起此进程用户的代理,相应的进程的权限也是进程发起者用户的权限,这时候就以此用户的身份和权限完成所有操作,过程如下:
1.如果被访问的文件属主跟进程的属主一样,就应用被访问文件属主的权限,如果不是进入下一步;
2.如果被访问的文件属组跟进程的属组一样,就应用被访问文件属组的权限,如果不是进入下一步;
3.这是应用被访问文件other其他用户的权限。
suid:普通用户可以更改自己的密码,但是密码文件/etc/shadow没有任何权限,根据安全上下文,用户执行passwd命令时使用的权限应该是当前用户,当前用户对命令passwd命令只能应用other其他用户权限,其他权限位没有写权限,是不能修改/etc/shadow,但是查看ls /usr/bin/passwd是发现属主多了一个权限位小s,这个小s就是suid,这时应用的安全上下文不在是以进程发起者的身份,而是使用/usr/bin/passwd属主的权限,程序文件自身的属主权限。使用ps aux命令也可以看到进程的属主是root.
总结:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;
2.sgid权限模型应用原理跟suid一样,程序发起者临时变更属组,当目录属组有写权限是,属于目录属组的用户都可以创建文件,并且文件的属主属组都是用户本身,这样同属于一个目录属组的用户,也没有办法互相操作文件。但是当给目录属组授权sgid时,用户创建的文件不在是自身的属组,这样用户可以互相操作文件。
总结:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组;
3.sticky:在系统中有这样一个目录/tmp,用户可以创建修改删除自己的文件,可以查看别人的文件,但是不能删除修改别人的文件。我们查看ll -d /tmp发现目录的权限是rwxrwxrwxt,发现多了一个t,这就是这个特殊权限位t的作用。
总结:在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件;
4.特殊权限管理;
授权suid方式:
chmod u+s, FILE
chmod g+s FILE
chmod o+t FILE
取消授权
chmod g-s FILE
chmod o-t FILE
chmod u-s FILE
这里的三个特殊权限有可以组成一组3位八进制,分别:sui=4 sgid=2 sticky=7 suid+sgid=6 .
这样组合加起来就是umask完整的权限四位8进制表示。
注意:如果原文件有执行权限x,就变更为小s。如果原文件没有执行权限x,这里显示变更为大S,说明有问题,文件没有执行权限,变更也无意义。属组大S和other大T跟前面属主大S意义一样,没有意义。
这里suid只对二进制可执行程序有效。目录无意义。
10.文件特定属性,对有些文件需要特殊控制保护,可以使用chattr命令
chattr
语法格式:
chattr [options] FILE
常用选项:
i:锁定文件,任何用户都不能改名修改删除文件。
a:对文件有相应权限的用户,只能追加文件内容,
A:锁定文件的访问时间,用户访问了文件,相应的时间戳也不会改变。
授权用+,取消用-
使用lsattr命令查看chattr特定文件权限属性。
10FACL:
facl利用的是文件系统额外的扩展属性,一般的Linux的文件系统基本都支持acl。
1.分析这样一个场景,我们要想对一个共享资源,分别指定不同用户的权限,我们只能对共享资源授权其他用户other,很难再给每个用户单独授以不同权限。无法满足需求。d当然了大家这时回想怎么不用suid和sgid,要知道种方式对于系统来说是很危险的。这时就需要借助额外的权限控制,Linux里就引入了facl解决这种问题。
facl作用:
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
fACL生效顺序:owner——>facl中授权的用户user——>group——>facl中授权的group组——>other
设定FACL:
命令:setfacl
语法格式
setfacl [options] [user:perm|group:perm] FILE
常用选项:
-m:授权
u:指定用户
g:指定组
perm:相应rwx权限。
-x:取消权限
u:直接指定用户就可以
g:直接指定组就可以。
-d:设置默认权限位
-k:删除默认FACL
-b:清空所有FACL
查看FACL
getfacl
语法格式
getfacl FILE
facl中的mask是默认权限高压线,如何应用了mask,用户在设置权限时,有超过mask权限就会减掉,没有不管。
注意:设置的默认权限有X,文件也不会基础x权限,这里出于Linux系统安全考虑。
原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/29796
评论列表(1条)
文章整体结构清晰,可是尝试着将自己对特殊权限应用场景模拟的操作写在里面,这样以后复习起来也会直观明了。