以下三个命令控制与文件关联的权限:
chmod
更改文件的权限
格式:
chmod [
选项
]
要分配的权限 文件或目录名
-R
:改变目录及目录下的文件和目录的访问权限

chown
更改文件和目录的所有者
格式:
chown
选项 用户名 文件或目录名
-R
:改变目录及目录下的文件和目录的所有者
chgrp
更改文件和目录的所属组
格式:
chgrp
选项 组名 文件或目录名
-R
:改变目录及目录下的文件和目录的所属组
特殊权限(粘滞位(SBIT)、sgid、suid)
粘滞位针对目录赋权,为目录添加粘滞位后该目录中创建的文件和目录只有创建者和超级管理员可以删 除 (
数字权限
1)
SUID
针对可执行文件赋权, 如作用在普通文件中没有任何意义 。在默认情况下,用户发起一个进程, 该进程的属主是发起者,而并非是文件的属主,但是如果给二进制程序文件添加了SUID
权限后,用户发起一个进程,该进程的属主为程序文件所属的属主,而并非是发起者。 (
数字权限
4)
suid
赋予方法:
chmod u+s
可执行文件名称
粘滞位赋予方法:
chmod o+t
目录名称

sgid
针对目录赋权,为目录添加
sgid
后在该目录中建立的文件属组继承父目录的属组
(
数字权限
2)
sgid
赋予方法:
chmod g+s
目录名称
sgid
针对可执行文件赋权,用户发起一个进程,该进程的属主为程序文件所属的属组,而并非是发起者。(
数字权限
2)
特殊属性
chattr
: 改变属性
格式:
chattr
选项 文件或目录
•
i
:不能更改
•
a
:不能删除和修改,只能追加
lsattr
:查看属性
格式:
lsattr
文件或目录
umask
umask
值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所 具有的默认权限就是由umask
值决定的。
对于
root
用户,系统默认的
umask
值是
0022
;对于普通用户,系统默认的
umask
值是
0002
。执行
umask
命令可以查看当前用户的
umask
值。
默认情况下,对于目录,用户所能拥有的最大权限是
777
;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666
。因为
x
执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x
执行权限。
计算方式
对于目录:
777 - umask =
创建的目录的默认权限
对于文件:
666 - umask =
创建的文件的默认权限
修改
umask
方法
编辑
/etc/profile
和
/etc/bashrc
的内容,然后执行
source /etc/profile /etc/bashrc
重新读
取
bash
配置
权限细化(ACL)
ACL
主要的目的是在提供传统的
owner,group,others
的
read,write,execute
权限之外的细部权限划
分。
ACL
可以针对单一使用者,单一文件或目录来进行
r,w,x
的权限规范,对于需要特殊权限的设定非 常有帮助。
ACL
主要可以针对下列几个方面来控制权限:
使用者
(user)
:可以针对使用者来设定权限;
群组
(group)
:针对群组为对象来设定其权限;
默认属性
(mask)
:还可以针对在该目录下在建立新文件
/
目录时,规范新数据的默认权限;
ACL
的设定方法
•
setfacl
:设定某个目录
/
文件的
ACL
格式:
setfacl [-bkRd] [{-m|-x} acl
参数
]
目标文件名
选项与参数:
-m
:设定后续的
acl
参数给文件使用,不可与
-x
合用;
-x
:删除后续的
acl
参数,不可与
-m
合用;
-b
:移除『所有的』
ACL
设定参数;
-k
:移除『预设的』
ACL
参数,关于所谓的『预设』参数于后续范例中介绍;
-R
:递归设定
acl
,即包括子目录都会被设定;
-d
:设定『预设
acl
参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
例如:针对
test
用户设置
ACL
权限
[u:
账号
:
权限
]
如果是组的话格式为
[g:
组名
:
权限
]
[root@localhost var]
# touch acl_test
[root@localhost var]
# ll acl_test
-rw-r--r--
.
1
root root
0 8
月
15 23
:02 acl_test
[root@localhost var]
# setfacl -m u:test:rx acl_test
[root@localhost var]
# ll acl_test
-rw-r-xr--
+
1
root root
0 8
月
15 23
:02 acl_test
#
权限部分多了个
+
[root@localhost var]
# setfacl -m u::rwx acl_test
[root@localhost var]
# ll acl_test
-rwxr-xr--
+
1
root root
0 8
月
15 23
:02 acl_test
#
设定值中的
u
后面未指定用户,代表设定该文件拥有者,所以上面显示
root
的权限成为
rwx
了!
注:如果一个文件设定了
ACL
参数后,他的权限部分就会多出一个
+
号,但是此时你看到的权限与实际权 限可能就会有点误差,可以通过 getfacl
来查看。
•
getfacl
:查看某个目录
/
文件的
ACL
格式:
getfacl filename
[root@localhost var]
# getfacl acl_test
# file: acl_test <==
文件名
# owner: root <==
文件所有者
# group: root <==
文件所属组
user::rwx <
==
文件所有者的权限
user:test:r-x <
==
test
用户的权限
group::r-- <
==
文件所属组的权限
mask::r-x <
==
文件预设的有效权限
other::r-- <
==
其他用户的权限
•
有效权限的设定,用户或群组所设定的权限必须要存在于
mask
的权限设定范围内才会生效,此即有效
权限
[m:
权限
]
例如:
test
用户的权限与
mask
的集合仅有
r
的存在,所以
test
用户仅具有
r
的权
限,并不存在
w
权限,这就是
mask
的功能。我们可以通过
mask
来规定允许的最大权限,这样就可以避
免不小心开放某些权限给其他用户或组了。
[root@localhost var]
# touch acl.txt
[root@localhost var]
# setfacl -m u:test:rw acl.txt
[root@localhost var]
# setfacl -m m:r acl.txt
[root@localhost var]
# getfacl acl.txt
# file: acl.txt
# owner: root
# group: root
user::rw-
user:test:rw-
#effective:r--
group::r--
mask::r--
other::r--
•
使用默认权限设定目录中新建文件的
ACL
权限继承
[d:[u|g]:[user|group]:
权限
]
例如:创建
test
目录,为该目录设置默认
ACL
后在该目录下新建的目录与文件均会继承该目录的
ACL
[root@localhost var]
# mkdir test
[root@localhost var]
# setfacl -m d:u:test:rx test
[root@localhost var]
# getfacl test
# file: test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:test:r-x
default:group::r-x
default:mask::r-x
default:other::r-x
[root@localhost var]
# cd test
[root@localhost test]
# touch 111
[root@localhost test]
# mkdir 222
[root@localhost test]
# ll
总用量
0
-rw-r--r--
+
1
root root
0 8
月
16 00
:16
111
drwxr-xr-x
+
2
root root
6 8
月
16 00
:16
222
•
取消
ACL
setfacl
-b
filename
#
取消所有的
ACL
setfacl
-x
u:test test
#
取消
test
目录的
test
用户的
setfacl
-k
test
#
取消默认
ACL
