linux下文件、文件夹权限的作用及设置方法(常规权限与SUID、SGID、SBIT、ACL、sudo、umask)
linux下文件权限设置及其作用
文件权限与归属(读、写、执行权限)
linux系统中一切皆文件,要说权限,有必要先了解一下文件的分类
Linux中的文件分类
在linux系统中一切都是文件,但是文件类型不同,具体如下:
符号表示 | 代表文件类型 |
---|---|
- | 普通文件 |
d | 目录文件 |
l | 链接文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
n | 网路设备 |
D | door (Solaris) 它提供了一种新的形式的接口,用于客户端和服务器的应用进程之间通信的文件。 |
可以从下面的图中看到部分文件类型
读、写、执行权限
下面一张图表示出文件的类型为普通文件,用户具有读、写权限,组和其他用户具有读权限(644),所属root用户,所属root组,除了文件类型,其他都和权限相关。
文件权限的表示
符号表示 | 值 | 权限 | 具体意义 |
---|---|---|---|
r | 4 | 可读 | 文件:能够读取文件的内容;文件夹:可读取文件夹中的文件列表 |
w | 2 | 可写 | 文件:编辑、新增、修改、删除;文件夹:新增、删除、重命名文件 |
x | 1 | 可执行 | 文件:可执行脚本程序;文件夹:能够进入该目录 |
文件读、写、执行权限的设置
如对一个文件进行权限设置,可以用下面的方法:
chmod a+x filename #给所有人赋予该文件可执行权限
chmod u+r filename #给用户赋予读权限
chmod o+w filename #给其他用户赋予写权限
chmod g+rw filename #给用户组赋予读、写权限
chmod 741 filename #给用户赋予读、写、执行的权限;给用户组赋予读权限;给其他人赋予执行权限;
文件其他权限设置可参考类推;文件夹权限设置也可以查看上面的设置。
查看设置好的文件权限
ls al filename #用这个命令查看设置好的文件权限
ls ald forldname #查看文件夹的文件权限
文件的特殊权限(SUID、SGID、SBIT)
在复杂多变的生产环境中,文件的rwx权限无法满足我们对灵活性和安全性的需求,因此有了SUID、SGID和SBIT的特殊权限位,这是一种对文件权限进行设置的特殊功能,可与一般权限同时使用,弥补一些一般权限不能实现的功能。
SUID
理解SUID
是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
/etc/shadow是用来存放用户密码的,权限位为000,除了root用户没有用户可以操作它;
passwd是写密码的命令,passwd 加上SUID特殊权限位,普通用户执行该命令的时候就能使用root的身份将密码写入/etc/shadow中。
权限显示为rws就是被赋予了SUID的权限
SUID设置
chmod u+s executable
如修改zcat的SUID,原用户的权限显示为rwx
chmod u+s zcat #为zcat加上SUID权限
ls -al zcat #x变为s就是被赋予了SUID权限
chmod u-s zcat #为zcat去掉SUID权限
如果用户对文件本身没有执行权限,为用户加上该权限后则权限会由-变为S
chmod u+s zcat #为用户对zcat加上SUID权限
ls -al zcat #查看这个权限,发现权限显示为rwS
权限显示为rwS是不能够执行的,会显示权限不够
[root@a1e14095-cca7-5fa6-8bdf-3f0 bin]# chmod 644 zcat
[root@a1e14095-cca7-5fa6-8bdf-3f0 bin]# zcat
-bash: /bin/zcat: 权限不够
[root@a1e14095-cca7-5fa6-8bdf-3f0 bin]# chmod u+s zcat
[root@a1e14095-cca7-5fa6-8bdf-3f0 bin]# zcat
[root@a1e14095-cca7-5fa6-8bdf-3f0 bin]# ls -al zcat
-rwSr--r-- 1 root root 1941 4月 11 2018 zcat
-bash: /bin/zcat: 权限不够
SGID
理解SGID
SGID和SUID类型,是一种对二进制程序进行设置的特殊权限,不过获取的不再是文件所有者的临时权限,而是获取文件所属组的权限。
SGID的作用:
1、让执行者拥有所属组的权限
2、在目录中创建的文件自动继承该目录的用户组权限
SGID设置
对可执行文件进行设置
chmod g+s executable #给可执行文件加上SGID权限
chmod g-s executable #给可执行文件去掉SGID权限
作用:ps命令原始权限为-rwxr-xr-x ,加SGID权限后变为-rwxr-sr-x,这会使用它other用户的权限也相当于r-x
对目录进行设置
chmod -Rf g+s pert/
pert目录设置上SGID特殊权限位,这样任何人在该目录创建的文件都归属于该目录所有组,而不再是自己的基本用户组。
SBIT
理解SBIT
SBIT 称为“粘滞位”或“保护位”
SBIT特殊权限可确保用户只能删除自己的文件,而不能删除其他用户的文件。
SBIT设置
chmod -R o+t forldname #设置成功后,原本other用户的执行权限x会被改写为t,原本没有执行权限的会显示为T。
ls -ald forldname #可以用该命令来查看
设置任何人不能删除的文件或文件夹
对文件或文件夹用chattr 命令进行配置,具体操作详见下面的链接
https://blog.csdn.net/wsuyixing/article/details/122862029?spm=1001.2014.3001.5501
chown
chown[选项]…[所有者][:[组]]文件…
#改变文件或文件夹detailf的用户和用户组
$ chown user:group detailf
#改变文件或文件夹detailf的用户
$ chown user detailf
#改变文件或文件夹detailf的用户和用户组为user(用户和用户组同名)
$ chown user: detailf
#改变文件或文件夹detailf的用户组
$ chown :group detailf
chgrp
功能:改变文件或目录所属的组。
语法:chgrp [选项] group filename
参数:
-c或–changes 效果类似”-v”参数,但仅回报更改的部分。
-f或–quiet或–silent 不显示错误信息。
-h或–no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
–help 在线帮助。
–reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
–version 显示版本信息。
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
示例: 将/mnt/xing及其子目录下的所有文件的用户组改为xing
chgrp -R xing /mnt/xing
ACL(文件访问控制列表)
用于对莫个对特用户进行权限控制,对普通文件设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。
如果对目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则不在继承目录的ACL。
如何设置文件或文件夹的ACL,通过setfacl命令来进行设置
setfacl 设置ACL权限
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ cd /root
-bash: cd: /root: 权限不够
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ sudo su root
[sudo] taobao 的密码:
root@taobao-Kunlun-LS3A4000-LS7A-desktop:/home/taobao# setfacl -Rm u:taobao:rwx /root #为taobao这个用户设置/root文件夹控制权限
root@taobao-Kunlun-LS3A4000-LS7A-desktop:/home/taobao# exit
exit
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ cd /root/
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:/root$
用户taobao访问/root目录被告知权限不够,进行下面的授权
setfacl -Rm u:taobao:rwx /root
成功后发现进行**cd /root/**操作正常了
查看目录是否具有ACL权限
getfacl命令查看该权限
getfacl /root 查看上面设置
学习ACL权限设置可以参见https://blog.csdn.net/qq_44027353/article/details/124074569
ls命令查看该权限
ls -ald /root
权限最后一位显示为“+”的时候说明该文件夹具有ACL权限
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ ls -ald /root
drwxrwx---+ 10 root root 4096 1月 21 01:21 /root
setfact 其他功能
选项 | 功能 |
---|---|
-m | 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 “u:用户名:权限” 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 “g:组名:权限” 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。 |
-x | 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。 |
-b | 删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限。 |
-d | 设定默认 ACL 权限,命令格式为 “setfacl -m d:u:用户名:权限 文件名”(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。 |
-R | 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 “setfacl -m u:用户名:权限 -R 文件名”(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。 |
-k | 删除默认 ACL 权限。 |
su命令与sudo服务
sudo命令权限改变
sudo命令把特定命令的执行权限交付给指定用户,这样普通用户使用该命令就享有了root管理员的权限。
命令格式 :sudo [参数] 命令名称
sudo服务中的可用参数以及作用参数作用
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
总结来说,sudo命令具有如下功能:
- 限制用户执行指定的命令;
- 记录用户执行的每一条命令;
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
- 验证密码的后5分钟内(默认值),无须再让用户再次验证密码。
visudo 指定用户的执行权限
如给taobao用户设置poweroff执行命令,首先找到该命令的绝对路径,用whereis poweroff 命令
[root@a1e14095-cca7-5fa6-8 pert]# whereis poweroff
poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
root用户执行visudo命令找到“ ## Allow root to run any commands anywhere”,添加taobao用户对poweroff命令的执行权限(如果把taobao换成ALL,那就是所有用户都有这个权限了)
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
taobao ALL=NOPASSWD:/usr/sbin/poweroff
su 切换用户
su - username (意味着完全切换到新用户,即把环境变量信息也变更为新用户相应信息)
umask
umask 介绍与验证
执行下面的命令
[root@876234e3-fcd6-554c-8 home]# touch 456
[root@876234e3-fcd6-554c-8 home]# ls -al 456
-rw-rw-r-- 1 root root 0 3月 5 22:32 456
[root@876234e3-fcd6-554c-8ce6-628d1c6d936c home]# ls -al
总用量 0
drwxr-xr-x 6 root root 79 3月 5 22:39 .
dr-xr-xr-x. 19 root root 278 3月 4 13:27 ..
drwxrwxr-x 2 root root 6 3月 5 22:39 123
[root@876234e3-fcd6-554c-8 home]# umask
0002
理论
可以看出root用户执行touch命令后生成的文件“456”权限位为664,文件夹“123”权限位为775,为何会是这样,什么决定了这些呢?
答案是umask
umask命令用来设置所创建文件和目录的默认权限。
用命令查看到的umask的值为0002,是什么意思呢?
umask值为一个掩码,第一个0为粘滞位,其他三位分别代表用户、组、其他用户的权限位,开启文件的全权限值为666,文件夹的全权限位为777,那么新建文件或文件夹的权限要是全权限位减掉umask的值
现实
用上面的例子来算一下吧
文件“456”用ls -al看到的权限位664
666-002=664 #不用考虑umask第一位粘滞位的值,那么umask是002;算出来的和用命令看到的值一致
文件“123”用ls -al看到的权限位775
777-002=775 #算出来的和用命令看到的值一致
umask值的设置
一、临时设置
[root@876234e3-fcd6-554c-8 home]# umask
0002
[root@876234e3-fcd6-554c-8 home]# umask 0022
[root@876234e3-fcd6-554c-8 home]# umask
0022
[root@876234e3-fcd6-554c-8 home]#
按照以上方式改变的umask值在shell退出之前或者使用新的umask命令之前一直有效,如果想永久改变umask值,需要修改自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中修改
二、永久生效
vi .bash_profile
m0145216@c408eag:~> cat .bash_profile
# .bash_profile
......#此处省略百来字
export PATH
umask 022
更多推荐
所有评论(0)