描述:
用户在系统上的操作受到权限的约束,例如对文件或者目录进行查看、修改、复制、删除等操作时,由文件或者目录对应的操作的权限所决定的。
在root的家目录下创建一个普通文件和目录并查看其属性:
[root@localhost ~]# echo 123 > file1 [root@localhost ~]# ll file1 -rw-r--r-- 1 root root 4 Aug 12 19:51 file1
[root@localhost ~]# mkdir dir1 [root@localhost ~]# ll drwxr-xr-x 2 root root 4096 Aug 12 19:53 dir1
拿文件file1来解读下:(共有7个字段)
-rw-r--r-- 1 root root 4 Aug 12 19:51 file1
1, -rw-r–r–
– :表示文件类型
补充:Linux系统上常见的文件类型:
-: file 常规文件
d: directory 目录文件
b: block device 快设备文件,支持以“block”为单位进行随机访问
c: character device 字符设备文件,支持以“character”为单位进行线性访问
l: symbolic link 符号链接文件
p: pipe 命名管道
s: socket 套接字文件
rw-r–r–: 代表文件的权限(3位为一组)
左三位:rw- 定义所有者的权限(user,owner)
中三位:r– 定义所属组的权限(group)
右三位:r– 定义其他人的权限(other)
2,数字1: 表示有多少文件名连接到此节点(i-node)
3,root: 表示文件的属主为root
4,root:表示文件的所属用户组
5,0: 表示文件的容量大小,默认单位为B
6,Aug 12 19:51: 表示文件的创建日期或者是最近的修改日期
7,file1 表示文件名
其所表示的含义为:文件file1是普通文件,所有者是root,权限为可读写,所属组为root,权限为可读,其它用户的权限为可读,其链接数为1。
文件权限
文件的权限主要针对三类对象进行定义:
owner: 属主, u
group: 属组, g
other: 其他, o
每个文件针对每类访问者都定义了三种权限:
r: readable
w: writable
x: excutable
权限对文件和目录的意义
文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
示例:1,cat命令是二进制文件,每个用户为什么都可以使用这个命令呢?主要是其的权限决定的,对于所有者,所属组和其他人三种身份都具有X权限位,即拥有执行权限,可执行这个命令的文件变为程序
[root@localhost ~]# ll /bin/cat -rwxr-xr-x 1 root root 48568 May 11 2016 /bin/cat
2,/etc/passwd文件是有关用户的信息,现在ping用户想查看下这个文件,对于这个文件来说,ping用户是other身份,权限位显示只有读权限,所以可用cat命令来查看相关信息,但不能修改和删除该文件
[ping@localhost ~]$ ll /etc/passwd -rw-r--r-- 1 root root 1769 Aug 12 18:45 /etc/passwd
[ping@localhost ~]$ echo 123 >> /etc/passwd -bash: /etc/passwd: Permission denied [ping@localhost ~]$ rm -f /etc/passwd rm: cannot remove `/etc/passwd': Permission denied
目录:
r: 可以使用ls 查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l 查看此目录中文件列表,可以cd 进入此
默认情况下只给目录x 权限,不给文件x 权限
示例:先用root身份先在/tmp下创建一个dir1目录,接着在/tmp下创建一个file1文件,注意,目录和文件的所有者,所属组和属性
[root@localhost tmp]# mkdir dir1 drwxr-xr-x 2 root root 4096 Aug 12 22:04 dir1 [root@localhost dir1]# ll
现在用普通用户ping进入到/tmp下,该用户对于该目录是other身份,由于目录在other的权限位上有r和x则,ping用户可以进入该目录查看文件,由于没x权限,故不能修改文件内容或删除文件
[ping@localhost tmp]$ cd dir1 [ping@localhost dir1]$ ls file1 [ping@localhost dir1]$ echo 11 >> file1 -bash: file1: Permission denied [ping@localhost dir1]$ rm -f file1 rm: cannot remove `file1': Permission denied
权限组合机制:
– – – 000 0
– – x 001 1
– w – 010 2
– w x 011 3
r – – 100 4
r – x 101 5
r w – 110 6
r w x 111 7
chmod命令:改变文件的权限 用户仅能修改属主为自己的那些文件的权限
用户类型:属主u 属组g 其他人o 所有人a
1,chmod [option]… Mode[,mode]…file…
mode表示法:
赋权表示法:直接操作一类用户的所有权限位rwx
u= g= o= a=
修改当前目录下的file1文件的权限
-rw-r--r-- 1 root root 4 Aug 12 19:51 file1
[root@localhost ~]# chmod u=rwx,g=rw,o=rw file1 [root@localhost ~]# ll -rwxrw-rw- 1 root root 4 Aug 12 19:51 file1
授权表示法:直接操作一类用户的一个权限位r,w,x
u+,u- g+,g- o+,g- a+,a-
[root@localhost ~]# chmod u-x,g+x,o-rw file1 [root@localhost ~]# ll file1 -rw-rwx--- 1 root root 4 Aug 12 19:51 file1
2,chmod [option]… OCTAL-mode file…
3,chmod [option]..—reference=RFILE file…
-R:递归修改
先将当前目录下的dir1目录及其包含的文件的权限改为777,然后按照/etc/fstab文件的权限将dir1目录及其包含的文件的权限进行修改
[root@localhost ~]# ll /etc/fstab -rw-r--r--. 1 root root 921 Jul 26 2016 /etc/fstab [root@localhost ~]# chmod -R --reference=/etc/fstab dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 root root 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 root root 4 Aug 13 00:21 test
chown命令:改变文件所有者 仅管理员可修改文件的属主和属组
chown [-R] dirname/filename…
-R: 递归(recursive)修改,连同子目录下的所有文件、目录都更新成为这个用户。常用在更改某一目录内所有文件情况
示例:将dir1目录及其包含的文件的所有者改为ping用户
[root@localhost ~]# chown ping -R dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 ping root 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 ping root 4 Aug 13 00:21 test
chgrp命令:改变文件所属用户组 仅管理员可修改文件的属主和属组
chgrp [-R] dirname/filename…
-R: 递归(recursive)修改,连同子目录下的所有文件、目录都更新成为这个用户组。常用在更改某一目录内所有文件情况
示例:将dir1目录及其包含的文件的所属组改为ping用户组
[root@localhost ~]# chgrp ping -R dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 ping ping 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 ping ping 4 Aug 13 00:21 test
chgap [option] … –reference =RFILE file…
新建文件和目录的默认权限
umask值可以用来保留在创建文件权限
umask: 查看umask值
root 的umask 是 是 022
[root@localhost ~]# umask 0022
非特权用户umask是 是 002
[ping@localhost ~]$ umask 0002
umask #: 设定
新建FILE 权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
示例:以root用户身份先设置umask值为135,在当前目录下创建test2文件
[root@localhost ~]# umask 135 [root@localhost ~]# touch test2 [root@localhost ~]# ll test2 -rw-r---w- 1 root root 0 Aug 13 00:50 test2
其中test2文件的权限为642,是根据新建FILE 权限: 666-umask得到的,666-135=531,由于普通文件不能拥有执行(奇数)权限,故在对应位的权限上+1,即得到的结果为642(rw-r—w-)
新建DIR 权限: 777-umask
umask –S 模式方式显示
umask –p 输出可被调用
: 全局设置: /etc/bashrc 用户设置:~/.bashrc
Linux文件系统上的特殊权限
SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
特殊权限数字表示法
SUID SGID STICKY
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
可执行文件上SUID权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID 只对二进制可执行程序有效
执行者对该程序需要具有X的可执行的权限
本权限仅在执行该程序中有效
执行者将具有该程序的所有者的权限
SUID 设置在目录上无意义
权限设定:
chmod u+s FILE…
chmod u-s FILE..
示例:普通用户可以修改自己的口令,可以查看/etc/passwd的内容,是因为ping用户对于/usr/bin/passwd这个程序来说是具有x权限的,表示ping用户可以执行passwd;passwd的拥有者是root;ping用户在执行passwd的过程中,会‘暂时’获得root的权限;/etc/passwd可以被ping所执行的passwd所修改。但如果ping用户使用cat去读取/etc/shadow时,是不能读取该文件的内容的,因为cat不具有SUID权限
[ping@localhost ~]$ ll /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[ping@localhost ~]$ ll /etc/shadow ---------- 1 root root 1039 Aug 12 18:45 /etc/shadow
[ping@localhost ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
[root@localhost tmp]# touch test1 加入具有SUID的权限 [root@localhost tmp]# chmod 4755 test1;ll test1 -rwsr-xr-x 1 root root 0 Aug 13 01:21 test1
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属组
对文件来说:
SGID对二进制程序有效
程序执行者对于该程序来说,需要具有X权限
执行者在执行的过程中将会获得该程序用户组的支持
对目录来说:
用户若对此目录具有r与x权限时,该用户能够进入此目录
用户在此目录下的有效组将会变成该目录的用户组
若用户在此目录下具有w权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同
权限设定:
示例:
[root@localhost ~]# ll /usr/bin/locate -rwx--s--x 1 root slocate 38464 Mar 12 2015 /usr/bin/locat
[root@localhost tmp]# chmod 6755 test1;ll test1 加入具有SUID/SGID的权限 -rwsr-sr-x 1 root root 0 Aug 13 01:21 test1
目录上的SGID
默认情况下,用户创建文件时,其属组为此用户所属的 主 组
一旦某目录被设定了SGID ,则对此目录有写权限的用户在此
目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:
chmod g+s DIR…
chmod g-s DIR.
Sticky位
具有写权限的目录通常用户可以删除该目录中的任何
文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可 可
以删除该文件
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR…
chmod o-t DIR…
示例:
[root@localhost tmp]# ll -d /tmp drwxrwxrwt. 4 root root 4096 Aug 13 01:21
[root@localhost tmp]# chmod 1755 test1;ll test1 加入具有SBIT的功能 -rwxr-xr-t 1 root root 0 Aug 13 01:21 test1
[root@localhost tmp]# chmod 7666 test1;ll test1 具有空的SUID/SGID权限 -rwSrwSrwT 1 root root 0 Aug 13 01:21 test1
权限位映射
SUID: user, 占据属主的执行权限位
s: 属主拥有x 权限
S :属主没有x 权限
SGID: group, 占据属组的执行权限位
s: group 拥有x 权限
S :group 没有x 权限
Sticky: other, 占据other 的执行权限位
t: other 拥有x 权限
T :other 没有x
设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能增加
lsattr 显示特定属性
访问控制列表
ACL :Access Control List ,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
ACL 生效顺序:所有者,自定义用户,自定义组,其他
为多用户或者组的文件和目录赋予访问权限rwx
• getfacl file |directory 查看文件或目录的acl
• setfacl -m u:username:per file|directory 设置用户的acl
• setfacl -Rm g:groupname:per directory 递归设置组的acl
• setfacl -m d:u:user:per directory 设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值
• setfacl -x u:username file |directory 取消用户acl
ACL 文件上的group 权限是mask 值(自定义用户,自定义组,拥有组的最大权限), 而非传统的组权限
getfacl 可看到特殊权限:flags
默认ACL 权限给了x ,文件也不会继承x 权限。
base ACL 不能删除
setfacl -k dir 删除默认ACL 权限
setfacl -b file1 清除所有ACL 权限
getfacl file1 | setfacl –set-file=- file2 复制file1的acl 权限给file2
mask 只影响除所有者和other 的之外的人和组的最大权限
Mask 需要与用户的权限进行逻辑与运算后,才能变成有限的权限
(Effective Permission)
用户或组的设置必须存在于mask 权限设定 范围内才会生效。
setfacl -m mask::rx file
–set 选项会把原有的ACL 项都删除,用新的替代,需要注意的是一定要包含UGO 的设置,不能像-m 一样只是添加ACL 就可以.
如:
setfacl –set u::rw,u:wang:rw,g::r,o::- file1
备份和恢复ACL
主要的文件操作命令cp 和mv 都支持ACL ,只是cp 命令需要加上-p 参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL 信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1
示例:普通用户hadoop想在root创建的文件具有rw权限,可利用acl来设置其权限
[root@localhost backup]# cp /etc/inittab ./ [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- group::r-- other::r-- [hadoop@localhost backup]$ cd /backup [hadoop@localhost backup]$ ll total 4 -rw-r--r-- 1 root root 884 Aug 13 02:17 inittab [hadoop@localhost backup]$ echo 123 >> inittab bash: inittab: Permission denied [root@localhost backup]# setfacl -m u:hadoop:rw inittab 设置hadoop用户的acl [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- user:hadoop:rw- group::r-- mask::rw- other::r-- [root@localhost backup]# su hadoop [hadoop@localhost backup]$ echo 123 >> inittab [hadoop@localhost backup]$ tail inittab id:3:initdefault: 123
[root@localhost backup]# setfacl -x u:hadoop inittab 取消hadoop用户的acl [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- user:tom:rwx group::r-- group:mygroup:rw- mask::rwx other::r--
[root@localhost backup]# setfacl -m m::r inittab 设置mask值 [root@localhost backup]# getfacl inittab # file: inittab 有效权限(effective permission) # owner: root 用户或组所设置的权限必须要存在于mask的权限范围内才会生效 # group: root user::rw- user:tom:rwx #effective:r-- user:hadoop:rwx #effective:r-- group::r-- group:mygroup:rwx #effective:r-- mask::r-- other::r-- [root@localhost backup]# su hadoop [hadoop@localhost backup]$ echo "123" >> inittab bash: inittab: Permission denied
原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/28505
评论列表(1条)
对命令的用法通过示例有了很好的展示。