linux权限管理
文章目录
1 权限设置
1.1 基础权限
主要是u、g及o,即拥有着、属组及其他用户,读权限、写权限及执行权限设置
1.1.1 常见示例
-rw-r--r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. Tgz
1.1.1.1 说明
-rw-r–r--
-,第一个杠,表示是个文件
rw-,表示文件拥有者的权限,有读写的权限
r–,第一个,表示属组用户权限,只有读的权限
r–,第二个,表示其他用户的权限,只有读的权限
1.1.2 十位权限表示
常见的权限表示形式有:
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
后九位解析: 我们知道Linux权限总共有三个属组,这里我们给每个属组使用三个位置来定义三种操作(读、写、执行)权限,合起来则是权限的后九位。 上面我们用字符表示权限,其中 -代表无权限,r代表读权限,w代表写权限,x代表执行权限。
实际上,后九位每个位置的意义(代表某个属组的某个权限)都是固定的,如果我们将各个位置权限的有无用二进制数 1和 0来代替,则只读、只写、只执行权限,可以用三位二进制数表示为
r-- = 100
-w- = 010
--x = 001
--- = 000
转换成八进制数,则为 r=4, w=2, x=1, -=0(这也就是用数字设置权限时为何是4代表读,2代表写,1代表执行)
实际上,我们可以将所有的权限用二进制形式表现出来,并进一步转变成八进制数字:
rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4
-wx = 011 = 3
-w- = 010 = 2
--x = 001 = 1
--- = 000 = 0
由上可以得出,每个属组的所有的权限都可以用一位八进制数表示,每个数字都代表了不同的权限(权值)。如 最高的权限为是7,代表可读,可写,可执行。
故 如果我们将每个属组的权限都用八进制数表示,则文件的权限可以表示为三位八进制数
-rw------- = 600
-rw-rw-rw- = 666
-rwxrwxrwx = 777
关于第一位最高位的解释: 上面我们说到了权限表示中后九位的含义,剩下的第一位代表的是文件的类型,类型可以是下面几个中的一个:
d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)
c代表的是该文件是面向字符的设备文件(charcter-oriented device file)
1.1.3 更改文件权限 (chmod命令)
1.1.3.1 一般使用格式
用来修改某个目录或文件的访问权限。
语法:chmod [-cfvR][–help] [–version][who] [+ | - | =][mode] 文件名
命令中各选项的含义为:
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置 mode 所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。
方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
1.1.3.1.1 范例
- 设置所有用户可读取文件 a.conf
chmod ugo+r a.sh
或
chmod a+r a.conf
- 设置 c.sh 只有 拥有者可以读写及执行
chmod u+rwx c.sh
- 设置文件 a.conf 与 b.xml 权限为拥有者与其所属同一个群组 可读写,其它组可读不可写
chmod a+r,ug+w,o-w a.conf b.xml
- 设置当前目录下的所有档案与子目录皆设为任何人可读写
chmod -R a+rw *
1.1.3.2 数字权限使用格式
上面我们提到,每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。即我们可以用用三个8进制数字分别表示 拥有者 、群组 、其它组( u、 g 、o)的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。语法格式为 :
chmod abc file…
其中
a,b,c各为一个数字,分别代表User、Group、及Other的权限。
相当于简化版的
chmod u=权限,g=权限,o=权限 file…
而此处的权限将用8进制的数字来表示User、Group、及Other的读、写、执行权限
1.1.3.2.1 范例
- 设置所有人可以读写及执行
chmod 777 file (等价于 chmod u=rwx,g=rwx,o=rwx file 或 chmod a=rwx file)
- 设置拥有者可读写,其他人不可读写执行
chmod 600 file (等价于 chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file )
1.1.4 chown命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
1.1.4.1 语法
使用权限 : root
格式
chown [-cfhvR] [--help] [--version] user[:group] file...
说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥 有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以 改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才 有这样的权限。
参数 :
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者群体(group), 当省略“:组”,仅改变文件所有者;
- -c : 若该文件拥有者确实已经更改,才显示其更改动作
- -f : 若该文件拥有者无法被更改也不要显示错误讯息
- -h : 只对于连结(link)进行变更,而非该 link 真正指向的文件
- -v : 显示拥有者变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
- –help : 显示辅助说明
- –version : 显示版本
1.1.4.2 实例
将文件 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown users:jessie file1.txt
将目前目录下的所有文件与子目录的拥有者皆设为 users 群体的使用者 lamport :
chown -R lamport:users *
1.2 特殊权限
1.2.1 ACL 权限(具体权限设置)
1.2.1.1 名词定义
ACL 是由一系列的Access Entry所组成的. 每一条Access Entry定义了特定的类别可以对 文件拥有的操作权限. Access Entry有三个组成部分: Entry tag type, qualifier (optional), 权限
我们先来看一下最重要的Entry tag type, 它有以下几个类型
-
ACL_USER_OBJ: 相当于Linux里file_owner的权限
-
ACL_USER: 定义了额外的用户可以对此文件拥有的权限
-
ACL_GROUP_OBJ: 相当于Linux里group的权限
-
ACL_GROUP: 定义了额外的组可以对此文件拥有的权限
-
ACL_MASK: 定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限
-
ACL_OTHER: 相当于Linux里other的权限
说白了我们给指定的用户指定目录分配指定的权限,也就是 ACL 权限分配。
1.2.1.2 setfacl
setfacl 参数
-m:设置后续acl参数
-x:删除后续acl参数
-b:删除全部的acl参数
-k:删除默认的acl参数
-R:递归设置acl,包括子目录
-d:设置默认acl
1.2.1.2.1 示例
[root@localhost chmod]# ll
总用量 4
-rwx------ 1 yun liu 31 12月 10 18:31 test.txt
[root@localhost chmod]# setfacl -m u:fei:rw test.txt //给用户fei设置读写权限
[root@localhost chmod]# getfacl -e test.txt //查看有效的权限信息
# file: test.txt
# owner: yun
# group: liu
user::rwx
user:fei:rw- #effective:rw-
group::--- #effective:---
mask::rw-
other::---
[root@localhost chmod]# ll
总用量 4
-rwxrw----+ 1 yun liu 31 12月 10 18:31 test.txt
[root@localhost chmod]# setfacl -m g:liu:rx test.txt //给用户组liu设置读、执行权限
[root@localhost chmod]# getfacl -e test.txt //查看有效的权限信息
# file: test.txt
# owner: yun
# group: liu
user::rwx
user:fei:rw- #effective:rw-
group::--- #effective:---
group:liu:r-x #effective:r-x
mask::rwx
other::---
1.2.1.3 注意
基础权限设置即chomd命令与setfacl权限设置存在冲突,目前还没具体了解冲突解决,最好不要两个一起交叉使用。如果有具体研究可留言,谢谢!