赞
踩
ls -l 文件名 | 查看文件的属性 |
ls -l 目录名 | 查看目录下文件的属性 |
ls -ld 目录名 | 查看目录本身的属性 |
新建文件a和目录yang,以及目录yang下的文件b和文件c
查看文件a的属性
查看目录yang下的文件b和文件c的属性
查看文件yang本身的属性
1.2 权限读取
1.2.1 文件类型
- | 普通文件 |
d | 目录 |
l | 软链接 |
b | 块设备 |
c | 字符设备 |
s | socket套接字 |
p | 管道 | |
Q1:软链接与硬链接是什么?
linux中有两种链接文件,一种叫硬链接,一种叫软链接。在Linux中,保存在磁盘中的文件,不管是什么类型的文件,都会被分配到一个编号,这个编号称为索引节点号。在文件备份时,多个文件名可以指向同一个索引节点,这种做法是为了保存重要的文件,防止误删,只有当最后一个链接被删除后,该文件及其数据块才会被彻底删除,这种链接称为硬链接。另一种链接称为软链接,又叫符号链接,软链接类似于Windows中的快捷方式,实际上是一种特殊的文件。
Q2:块设备与字符设备是什么?
/dev/dsk对应的为块设备,/dev/rdsk对应的为字符设备。
如果一个硬件设备能够随机的访问固定大小的数据片,则该设备为块设备,这些数据片就称为块,例如硬盘。如果一个硬件设备需按照字符流的方式有序访问,则属于字符设备,例如串口和键盘。
Q3:何为socket套接字?
socket套接字是TCP/IP协议的编程接口之一,使用socket可以不需要了解底层的实现细节。socket把传输层以下的协议都封装成了简单的接口,在编写基于网络通信的软件时只需要调用这些接口即可。
文件与目录的权限信息代表含义不尽相同:
文件a的权限信息:
从左到右依次代表:
- //文件a的文件类型为普通文件
rw- //持有该文件的用户权限为读写
r-- //持有该文件的用户组权限为只读
r-- //其他用户权限为只读
. //系统的selinux开启
1 //文件a的内容被系统记录的次数(硬链接个数)
root //持有该文件的用户
root //持有该文件的用户组
0 //文件a的内容大小
May 17 20:11 //该文件的修改时间
a //文件名
Q4:何为SElinux?
SELinux,是一个 Linux 内核模块,也是 Linux 的一个安全子系统,其主要作用是最大限度地减小系统中服务进程可访问的资源。
目录yang的权限信息:
从左到右依次代表:
d //目录yang的文件类型为目录
rwx //持有该目录的用户权限为可读可写可执行
r-x //持有该目录的用户组权限为可读可执行
r-x //其他用户权限为可读可执行
. //系统的selinux开启
2 //目录yang中的子目录个数为2
root //持有该目录的用户
root //持有该目录的用户组
24 //目录中子文件的元数据大小
May 17 20:12 //目录中的文件被删除或新建的时间
yang //目录名
1.2.2 元数据
文件的属性被叫做文件的元数据(mata data),“data about data” ,意为关于数据的数据。
文件的一种元数据(即文件的一种属性)占用一个byte(字节)来记录,由于文件有8种属性,因此共占用8个字节。
而文件名由字符组成,一个字符占用1个字节,因此文件权限信息占用的字节=8字节+文件名字符所占字节。
以文件a的权限信息为例:
文件a的普通权限位为:rw-r--r--
rw- //u权限(u,即user,指文件的持有者)
r-- //g权限(g,即group,指文件的持有组)
r-- //o权限(o,即other,指既不是持有者也不是持有组成员的其他用户)
权限类型:
- //权限未开启
r //可读
对于文件:是否可以读取文件内容,是否可以使用cat查看文件内容
对于目录:是否可以ls列出目录中的文件
w //可写
对于文件:是否可以更改文件内容,是否可以使用vim或修改字符方式对文件内容进行修改
对于目录:是否可以在目录中删除或新建文件
1、文件可写只能修改文件的内容,不能修改文件的属性,也不能删除文件,文件存在于目录中,文件的属性也记录在目录中,只有当该文件所在的目录可写时才可以修改该文件的属性或删除该文件。
2、文件是否被修改不取决于文件的内容,而取决于修改时间。
x //可执行
对于文件:是否可以用文件名调用文件内记录的程序
对于目录:是否可以进入目录
3、如果一个目录对当前用户不可执行,则用户无法进入该目录,如果一个目录对当前用户不可读,则用户无法使用ls显示信息。
直接复制权限 | chmod --reference=文件或目录 指定文件或目录 | 将某文件或目录的权限复制到指定文件或目录上 |
chmod -R --reference=文件或目录 指定目录 (-R表示递归操作) | 将某文件或目录的权限复制到指定目录及该目录的子文件上 |
创建文件a1,a2,目录bc,以及bc下的文件b和文件c
重新开启一个shell,使用监控命令实时监控权限信息
将目录bc的权限复制到文件a1上:
将文件a1的权限递归复制到目录bc及bc下的文件b和文件c上:
用字符方式设定权限 | chmod <a/u/g/o><+/-/=><r/w/x> 指定文件或目录 | a:all u:user g:group o:other |
用字符方式将文件a1的权限修改为持有用户可读可写可执行,持有用户组和其他用户无权限;同时为文件a2增加持有用户组和其他用户可执行的权限:
用数字方式设定权限 | chmod 三位十进制数 指定文件或目录 | 用波尔值表示权限的开与关 |
数字方式设定权限是最常用的权限设定方法,波尔值只有两个值1和0,1代表开,0代表关。
普通权限可用三位二进制数表示,将其转换为一十进制个位数,即代表某一持有用户或持有组或其他用户的权限。
0(十进制)= 000(二进制)= rwx
1(十进制)= 001(二进制)= --x =x
2(十进制)= 010(二进制)= -w- =w
3(十进制)= 011(二进制)= -wx
4(十进制)= 100(二进制)= r-- =r
5(十进制)= 101(二进制)= r-x
6(十进制)= 110(二进制)= rw-
7(十进制)= 111(二进制)= rwx
则以目录yang的权限为例:
持有用户权限为rwx,二进制表示为111,十进制数为7;持有用户组权限为r-x,二进制表示为101,十进制数为5;其他用户权限为r-x,二进制表示为101,十进制数为5。
则目录yang的普通权限信息可表示为755。
用数字方式将文件a2的权限修改为持有用户可读可写,持有用户组和其他用户无权限:
系统本身存在的意义是共享资源,从安全角度来讲,系统共享的资源越少,开放的权力越小,系统安全性越高。为达到既保证系统安全,又能使系统创作价值的目的,应在赋予用户应有权力的同时,保留用户默认不需要的权力。
4.1 umask:系统保留权力、
umask值越大,系统预留的权力越多,开放的权力越少,系统安全性越高
umask | 查看保留权力 |
umask 权限值 | 临时设定系统预留权力 |
查看umask值,为022
文件默认权限 = 777 - umask -111
目录默认权限 = 777 - umask
临时更改umask值的方法,在关闭当前shell,重新开启一个新shell后,umask会恢复为原来值。
4.2 永久更改umask值
需要修改两个配置文件的内容:
① 更改shell系统配置文件
② 更改系统环境配置文件
由于umask在更改前已被读取,因此在更改后需使用source重新读取。
更改文件或目录的持有用户
chown 用户名 文件名 | 更改文件的持有用户 |
chown 用户名 目录名 | 更改目录本身的持有用户 |
chown 用户名. 组名 文件名 | 同时更改文件的持有用户和持有组 |
chown -R 用户名 目录名 | 更改目录及目录下所以内容的持有用户 |
更改文件或目录的持有组
chgrp 组名 文件名 | 更改文件的持有组 |
chgrp 组名 目录名 | 更改目录本身的持有组 |
chgrp -R 组名 目录名 | 更改目录及目录下所有内容的持有组 |
建立文件a,目录bc,以及bc下的文件b和文件c
使用watch进行监控
同时更改文件a的持有用户和持有用户组:
更改目录bc本身的持有组:
同时更改目录bc及其下文件的持有用户和持有组:
特殊权限共有三种,分别为stickyid(粘制位)、sgid(强制位)、suid(冒险位)
6.1 stickyid 粘制位
默认针对目录:如果一个目录的stickyid开启,那么这个目录中的文件只能被文件持有用户删除,其他用户不能进行删除操作。
也可对文件使用(很少用):在程序运行时,在文件还未被程序需要时,若文件有粘制位,可以提高文件加载到内存中的优先级。
开启粘制位权限:
chmod 1源文件权限 目录名 |
chmod o+t 目录名 |
创建目录/pub,设置权限为任何用户可读可写可执行:
在普通用户westos和普通用户lee下分别在/pub下建立文件:
发现用户lee不但可以删除自己创建的文件,也可删除用户westos创立的文件:
更改目录/pub其他用户的权力,为其开启 t 权限,使/pub目录下的文件只能被持有文件用户删除,其他用户不可进行删除操作:
再次进入普通用户westos和lee下创建文件:
此时可以发现,用户lee不能删除用户westos创建的文件,只能删除自己创建的文件:
6.2 sgid 强制位
针对目录:使目录中新建的文件自动归属到目录的所属组中,与是哪个用户建立的无关。
chmod 2源文件权限 目录名 |
chmod g+s 目录名 |
针对文件:只针对二进制可执行文件(即程序),使运行二进制可执行文件时都是以文件持有组身份运行,与执行用户无关。
程序与进程的区别:
程序:指人为做好的代码放在文件中,存储在硬盘中
进程:指程序运行的状态,正在调用系统资源,使用系统资源完成程序要完成的动作。
程序是谁的与进程是谁的没有必然联系。
开启目录/pub的s权限:
在普通用户下建立文件,文件所属组均为目录的所属组root:
ps | 查看进程 |
ps ax | 查看系统中的所有进程 |
ps ax -o user,group,comm | 查看系统中的所有进程及进程的所有人、所有组和进程名 |
ps ax -o user,group,comm | grep cat | 只查看cat的进程和所有人、所有组、进程名 |
watch -n 1 “ps ax -o user,group,comm | grep cat” | 监控cat的进程和所有人、所有组、进程名 |
使用监控命令监控cat的进程及相关信息:
在普通用户westos和lee下执行二进制可执行文件cat,在监控中可看到运行组为执行用户的用户组
在超级用户下为cat增加s权限:
再次进入普通用户westos和lee下执行cat,在监控中可看到运行组为文件cat的用户组root:
权力下放的根本方法是suid和sgid。
6.3 suid 冒险位
只针对二进制的可执行文件(程序),使得当运行二进制可执行文件时都是以文件拥有者的身份运行,和执行用户无关。
chmod 4原权限 文件名 |
chmod u+s 文件名 |
监控cat的进程:
在普通用户westos和lee下运行cat,显示的运行用户为它们本身:
在超级用户下为cat添加s权限:
再次在普通用户下运行cat,此时运行用户变为cat文件本身的文件拥有者root:
access control lists 访问控制列表,其作用为可以让特定用户对特定文件或目录进行控制
7.1 acl列表的控制
setfacl -m u:特殊指定用户名:用户权限 文件名 | 设定特殊指定用户的权限 |
setfacl -m g:特殊指定组:组权限 文件名 | 设定特殊指定组的权限 |
setfacl -m u::持有用户权限 文件名 | 设定文件的持有用户的权限 |
setfacl -m g::持有组权限 文件名 | 设定文件的持有组的权限 |
setfacl -x u:特殊指定用户名 文件名 | 删除特殊指定用户的权限 |
setfacl -x g:特殊指定组名 文件名 | 删除特殊指定组的权限 |
setfacl -b 文件名 | 关闭该文件的acl列表 |
7.2 开启或关闭acl的标识
acl未开启,权限没有“+”号:
acl开启,权限出现“+”号:
7.3 acl列表权限读取:
getfacl 文件名 |
读取文件a的acl列表权限:
file //文件名称
owner //文件持有者
group //文件持有组
user :: //文件持有者权限
user: //特殊指定用户权限
group:: //文件持有组权限
group: //特殊指定组权限
mask //能够赋予特殊用户和特殊用户组的最大权限阈值
other //其他人的权限
acl权限优先级为:
拥有者>特殊指定用户>权限多的组>权限少的组>其他人
当acl开启后,不可以再用ls -l的方式读取文件的权限,也不能用chmod设定权限,只有当acl关闭后才可以用ls查看文件权限。
7.4 mask值
mask是能够赋予特殊指定用户权限的最大阈值
在acl开启时用ls查看到的组权限并不是实际的组权限,而是文件的mask值。在acl开启时用chmod缩小文件拥有组的权力后,mask会发生变化。
恢复mask值:
setfacl -m m:权限 文件名 |
7.5 acl的默认权限
setfacl -m u:特殊指定用户:权限 目录名 | 只针对目录本身有效 |
setfacl -Rm u:特殊指定用户:权限 目录名 | 对于目录以及目录中已经存在的内容有效 |
setfacl -m d:u:特殊指定用户:权限 目录名 | 针对目录中新建的文件有效,对之前已经存在的文件和目录本身不生效 |
attr权限限制超级用户
i //不能作任何更改,不能删,不能新建,不能修改,只能ls查看
a //可以添加不能删除
lsattr 文件名 | 查看该文件的attr权限 |
lsattr -d 目录名 | 查看该目录的attr权限 |
chattr +i|+a|-i|-a 文件名 | 设定该文件的attr权限 |
更改并查看目录bc 的attr权限:
更改并查看文件a的attr权限:
在系统中完成以下用户操作:
1、建立用户组shengchan,caiwu,jishu并满足以下要求
*shengchan组id为8000
*caiwu组id为8001
*jishu组id为8002
2、建立westosuser,linux,lee,westosadmin用户并满足以下要求
*westosuser用户的附加组为shengchan和jishu
*lee的主组为caiwu,附加组为jishu,lee的uid和gid一致
*westosamdin用户不属于以上三个部门,但是可以在系统中自由的管理用户
3、建立目录并满足以下要求
*建立目录/sc,/cw,/js,/pub
*/sc目录是生产部门的数据存储目录,只能被生产部门的人员读写
*/cw目录是财务部门的数据存储目录,只能被财务部门的人员读写
*/js目录是技术部门的数据存储目录,只能被技术部门的人员读写
*/pub为公司人员公共目录,可以被公司任意员工读写
4. 在3的基础上满足以下要求
*在/sc中建立的文件都属于生产部门
*在/cw中建立的文件都属于财务部门
*在/js中建立的文件都属于技术部门
*/pub中的用户都只能删除自己的文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。