文件权限管理

文件权限管理

[11:04:52 root@zhang ~]#ll /etc/passwd
	 连接计数				 文件名
-rw-r--r--  1  root  root  1540  Dec 1 11:06  /etc/passwd
   权限       所属者 所属组  大小 创建和修改时间

1、文件所有者和所属组属性操作

1.1 chown

chown修改文件的属主或文件属组

格式及选项

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

OWNER:只修改所有者
OWNER:GROUP:同时修改所有者和属组
:GROUP:只修改属组,冒号也可用 . 替换
--reference=RFILE:参考指定的的属性,来修改
-R:递归,此选项慎用,非常危险!

例:

[11:17:47 root@zhang data]#ll
-rw-r--r--  1 root root 1540 Dec  3 11:17 passwd
[11:18:07 root@zhang data]#chown zhang:zhang passwd
[11:18:27 root@zhang data]#ll
-rw-r--r--  1 zhang zhang 1540 Dec  3 11:17 passwd

[12:26:25 root@zhang data]#ll
-rw-r--r--  1 root  root     0 Dec  3 12:26 1.txt
-rw-r--r--  1 root  root     0 Dec  3 12:26 2.txt
[12:27:55 root@zhang data]#chown :zhang 1.txt
[12:28:05 root@zhang data]#ll
-rw-r--r--  1 root  zhang    0 Dec  3 12:26 1.txt
-rw-r--r--  1 root  root     0 Dec  3 12:26 2.txt
[12:28:34 root@zhang data]#chown --reference=1.txt 2.txt 
[12:28:49 root@zhang data]#ll
-rw-r--r--  1 root  zhang    0 Dec  3 12:26 1.txt
-rw-r--r--  1 root  zhang    0 Dec  3 12:26 2.txt

[12:30:48 root@zhang data]#mkdir test
[12:31:01 root@zhang data]#cd  test
[12:31:16 root@zhang test]#touch a.txt
[12:31:22 root@zhang test]#touch ab.txt
[12:31:26 root@zhang test]#touch abc.txt
[12:31:39 root@zhang data]#ll
drwxr-xr-x  2 root  root    45 Dec  3 12:31 test
[12:31:42 root@zhang data]#ll test/
total 0
-rw-r--r-- 1 root root 0 Dec  3 12:31 abc.txt
-rw-r--r-- 1 root root 0 Dec  3 12:31 ab.txt
-rw-r--r-- 1 root root 0 Dec  3 12:31 a.txt
[12:31:46 root@zhang data]#chown -R zhang:zhang test
[12:32:10 root@zhang data]#ll
drwxr-xr-x  2 zhang zhang   45 Dec  3 12:31 test
[12:32:12 root@zhang data]#ll test/
-rw-r--r-- 1 zhang zhang 0 Dec  3 12:31 abc.txt
-rw-r--r-- 1 zhang zhang 0 Dec  3 12:31 ab.txt
-rw-r--r-- 1 zhang zhang 0 Dec  3 12:31 a.txt

1.2 chgrp

chgrp只修改文件的属组

格式及选项

chgrp [OPTION] GROUP FILE
chgrp [OPTION] --reference=RFILE FILE

-R:递归

例:

[12:32:15 root@zhang data]#chgrp -R root test/
[13:40:15 root@zhang data]#ll
-rw-r--r--  1 root  root   465 Nov 24 14:27 f2.txt
drwxr-xr-x  2 zhang root    45 Dec  3 12:31 test
[13:40:17 root@zhang data]#ll test/
total 0
-rw-r--r-- 1 zhang root 0 Dec  3 12:31 abc.txt
-rw-r--r-- 1 zhang root 0 Dec  3 12:31 ab.txt
-rw-r--r-- 1 zhang root 0 Dec  3 12:31 a.txt

2、文件权限

2.1 文件权限说明

文件的权限主要针对三类对象定义

owner	属主,u
group	属组,g
other	其他,o

每个文件针对每类访问者都定义了三种权限

r      Readable
w      Writable
x      excutable

对文件的权限

r 可使用文件查看类工具,比如:cat,可以获取其内容
w 可修改其内容
x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)

对目录权限

r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最
小权限
X 只给目录x权限,不给无执行权限的文件x权限

2.2 修改文件权限chmod

格式及选项

chmod [OPTION] MODE[,MODE]	FILE
chmod [OPTION] OCTAL-MODE FILE
chmod [OPTION] --reference=RFILE FILE

说明:

who:u,g,o,a
opt:+,-,=
permission:r,w,x

修改指定一类用户的所有权限
u= g= o= ug= a= u=,g=

修改指定一类用户的所有权限
u+ u- g+ g- o+ o- a+ a- + -

-R:递归修改权限

例:

#给a.txt怎加可执行权限
[12:27:23 root@zhang data]#touch a.txt
[12:27:33 root@zhang data]#ll
total 4
-rw-r--r-- 1 root root   0 Dec  4 12:27 a.txt
[12:27:51 root@zhang data]#chmod +x a.txt 
[12:27:56 root@zhang data]#ll
-rwxr-xr-x 1 root root   0 Dec  4 12:27 a.txt

#给a.txt怎加其他用户写权限
[12:27:57 root@zhang data]#chmod  o+w a.txt 
[12:29:48 root@zhang data]#ll
-rwxr-xrwx 1 root root   0 Dec  4 12:27 a.txt

#删除所有权限
[12:29:52 root@zhang data]#chmod u-rwx,g-rx,o-rwx a.txt 
[12:31:21 root@zhang data]#ll
---------- 1 root root   0 Dec  4 12:27 a.txt

[12:52:27 root@zhang data]#chmod  624 a.txt 
[12:52:39 root@zhang data]#ll
total 4
-rw--w-r-- 1 root root   0 Dec  4 12:27 a.txt

3、新建文件和目录默认权限

umask保留创建文件权限

实现方式:

​ ·新建文件的默认权限:666-umask,奇数加一偶数不变

​ ·新建目录的默认权限:777-umask

非特权用户umask默认是002

root的umask默认是022

查看umask

umask		
umask -S	#模式方式显示
umask -p	#输出可被调用

修改umask

umask #

例:

[12:52:40 root@zhang data]#umask 
0022
[13:01:10 root@zhang data]#umask 044
[13:01:23 root@zhang data]#umask 	#临时的,只对当前shell有用
0044
[13:01:26 root@zhang data]#touch b.txt
[13:01:36 root@zhang data]#ll
-rw--w--w- 1 root root   0 Dec  4 13:01 b.txt

#不修改umask临时处理
[13:05:18 root@zhang data]#umask 
0022
[13:05:20 root@zhang data]#( umask 666; touch c.txt)
[13:05:39 root@zhang data]#ll
---------- 1 root root   0 Dec  4 13:05 c.txt

#永久配置
全局设置:/etc/bashrc
用户设置:~/.bashrc

4、特殊权限

4.1 特殊权限SUID

前提:进程有属主和属组;文件有属主和主组

1)任何一个可执行程序问价能不能启动进程,取决发起者对程序文件是否拥有执行权限;

2)启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组 ;

3)进程访问文件时的权限,取决于进程的发起者 ;

(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限

二进制的可执行文件上SUID权限功能:

·任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
·启动为进程之后,其进程的属主为原程序文件的属主
·SUID只对二进制可执行程序有效
·SUID设置在目录上无意义

SUID权限设定

chmod u+s FILE
chmod 6xxx FILE
chmod u-s FILE

例:

[13:11:05 root@zhang data]#ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 27856 Apr  1  2020 /usr/bin/passwd

4.2 特殊权限SGID

二进制的可执行文件上SGID权限功能:

·任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
·启动为进程之后,其进程的属组为原程序文件的属组

SGID权限设定:

chmod g+s FILE
chmod 2xxx FILE
chmod g-s FILE

目录上的SGID权限功能:

默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录

SGID权限设定:

chmod g+s DIR
chmod 2xxx DIR
chmod g-s DIR

4.3 特殊权限Sticky位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权在目录设置Sticky 位,只有文件的所有者或root可以删除该文件、sticky 设置在文件上无意义

Sticky权限设定

chmod o+t DIR
chmod 1xxx DIR
chmod o-t DIR

例:

[13:18:51 root@zhang data]#ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Dec  4 13:19 /tmp/

4.4 特殊权限数字法

SUID SGID STICKY

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

例:

[13:19:08 root@zhang data]#ll
---------- 1 root root   0 Dec  4 13:05 c.txt
[13:20:57 root@zhang data]#chmod 4777 c.txt 
[13:21:08 root@zhang data]#ll
-rwsrwxrwx 1 root root   0 Dec  4 13:05 c.txt

权限位映射
SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限

5、设定文件特殊属性

设置文件的特殊属性,可以访问root用户误操作删除或修改文件

chatter +i		#不能删除、改名和更改内容
chatter +a		#只能追加内容,不能删除、改名
lsatter			#显示特定属性

例:

[13:29:47 root@zhang data]#touch f1.txt
[13:29:57 root@zhang data]#chattr +i f1.txt 
[13:30:07 root@zhang data]#lsattr
----i----------- ./f1.txt
[13:30:13 root@zhang data]#ll	#ll命令看不出来修改了属性
-rw-r--r-- 1 root root   0 Dec  4 13:29 f1.txt
[13:30:27 root@zhang data]#chattr +i f1.txt 
[13:30:49 root@zhang data]#lsattr
----i----------- ./f1.txt
[13:30:51 root@zhang data]#echo "123" > f1.txt 
-bash: f1.txt: Permission denied
[13:31:11 root@zhang data]#rm f1.txt 
mv: cannot move ‘f1.txt’ to ‘/data/backup2020-12-04_13:31:17/f1.txt’: Operation not permitted

6、访问控制列表

6.1 ACL权限功能

ACL:Access Control List,实现灵活的权限管理

除了文件所有者、所属组、其他人,可以对更对的用户进行设置权限

CentOS7默认是创建xfs和ext4文件系统具有ACL功能

CentOS7之前版本,默认手工创建ext4文件系统无acl功能,需要手动增加

tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test

acl生效顺序:

所有者,自定义用户,所属组|自定义组,其他人

6.2 ACL相关命令

setfacl 可以设置ACL权限

getfacl 可以查看设置的acl权限

例:

[13:44:33 root@zhang data]#ll
total 0
-rw-r--r-- 1 root root 0 Dec  4 13:44 a.txt
[13:44:34 root@zhang data]#setfacl -m u:zhang:rwx a.txt 
[13:45:02 root@zhang data]#getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx
group::r--
mask::rwx
other::r--
[13:45:14 root@zhang data]#su zhang 
[13:45:38 zhang@zhang data]$echo 'i am zhang' > a.txt 
[13:46:08 zhang@zhang data]$cat a.txt 
i am zhang


[13:54:24 root@zhang ~]#id admin
uid=1005(admin) gid=1118(admin) groups=1118(admin)
[13:55:14 root@zhang data]#setfacl -m g:admin:- a.txt
[13:55:20 root@zhang data]#ll
-rw-rwxr--+ 1 root root 11 Dec  4 13:46 a.txt     
[13:55:22 root@zhang data]#getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx
group::r--
group:admin:---
mask::rwx
other::r--
[13:55:31 root@zhang data]#su admin
[13:55:48 admin@zhang data]$cat a.txt 
cat: a.txt: Permission denied
[13:55:56 admin@zhang data]$echo 'i am admin' > a.txt 
bash: a.txt: Permission denied

#清楚所有ACL权限
[14:13:14 root@zhang data]#getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

mask权限

·mask之影响除所有者和other的之外的人和组的最大权限

·mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

·用户或组的设置必须存在于mask权限设定范围内才会生效

例:

[14:13:34 root@zhang data]#setfacl -m mask::rx a.txt 
[14:16:11 root@zhang data]#ll 
total 4
-rw-r-xr--+ 1 root root 11 Dec  4 13:46 a.txt
[14:16:12 root@zhang data]#getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r-x
other::r--

[14:16:19 root@zhang data]#su zhang
[14:16:53 zhang@zhang data]$cat a.txt 
i am zhang
[14:16:58 zhang@zhang data]$echo 'how are you' > a.txt
bash: a.txt: Permission denied

--set 选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以

例:

[14:19:05 root@zhang data]#setfacl --set u::rw,u:wang:rw,g::r,o::- a.txt 
[14:19:09 root@zhang data]#getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
user:wang:rw-
group::r--
mask::rw-
other::---
posted @ 2020-12-04 17:09  安尧  阅读(119)  评论(0)    收藏  举报