88bf必发唯一娱乐官网 3

Linux-文件权限

Linux文件权限管理

用户权限

在Linux系统中,一个用户对文件所能执行的权力称为用户权限

基本权限 UGO

文件权限设置: 可以赋于某个用户或组
能够以何种方式 访问某个文件

文件权限管理之: UGO设置基本权限(r、w、x)

rw-r--r-- alice hr install.log

权限对象:
属主:         u
属组:         g
其他人:       o

权限类型:
读:r          4
写:w         2
执行: x        1

文件属性

88bf必发唯一娱乐官网 1

Paste_Image.png

==设置权限

权限位

rwx rwx rwx
从做到右,三个一组,分别定义了文件所有者,所属组,other对文件拥有的权限

1. 更改文件是属主、属组

=chown:
[root@localhost ~]# chown alice.hr file1              //改属主、属组
[root@localhost ~]# chown alice     file1             //只改属主
[root@localhost ~]# chown        .hr file1            //只改属组
=chgrp:
[root@localhost ~]# chgrp it file1                    //改文件属组
[root@localhost ~]# chgrp -R it dir1                  //改文件属组

权限

r: Readable 读
w: Writable 写
x: eXcutable 执行

2. 更改权限

=a. 使用符号
                    对象        赋值符        权限类型
                    u                +                r
chmod             g                 -                w          file1
                    o                =                x
                    a
[root@localhost ~]# chmod u+x file1                 //属主增加执行
[root@localhost ~]# chmod a=rwx file1               //所有人等于读写执行
[root@localhost ~]# chmod a=- file1                 //所有人没有权限
[root@localhost ~]# chmod ug=rw,o=r file1           //属主属组等于读写,其他人只读
[root@localhost ~]# ll file1                        //以长模式方式查看文件权限
-rw-rw-r-- 1 alice it 17 10-25 16:45 file1          //显示的结果

=b. 使用数字
[root@localhost ~]# chmod 644 file1
[root@localhost ~]# ll file1
-rw-r--r-- 1 alice it 17 10-25 16:45 file1

对文件的权限意义:

r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程

===设置权限示例

针对hr部门的访问目录设置权限,要求如下:

  1. root用户和hr组的员工可以读、写、执行
  2. 其他用户没有任何权限

    [root@localhost ~]# groupadd hr
    [root@localhost ~]# useradd hr01 -G hr
    [root@localhost ~]# useradd hr02 -G hr
    [root@localhost ~]# mkdir /home/hr

    [root@localhost ~]# chgrp hr /home/hr
    [root@localhost ~]# chmod 770 /home/hr
    [root@localhost ~]# ll -d /home/hr/
    drwxrwx—. 2 root hr 4096 3月 13 14:26 /home/hr/

重要: r、w、x权限对文件和目录的意义

88bf必发唯一娱乐官网 2

对目录的权限意义:

r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此

示例1: 对文件的影响

[root@localhost ~]# mkdir /dir10
[root@localhost ~]# touch /dir10/file1
[root@localhost ~]# chmod 777 /dir10/file1 

[root@localhost ~]# ll -d /dir10/
drwxr-xr-x. 2 root root 4096 3月  11 18:37 /dir10/
[root@localhost ~]# ll /dir10/file1 
-rwxrwxrwx. 1 root root 0 3月  11 18:37 /dir10/file1

[alice@tianyun ~]$ cat /dir10/file1 
[alice@tianyun ~]$ rm -rf /dir10/file1 
rm: 无法删除"/dir10/file1": 权限不够

用户访问文件得到的权限的判断过程

先看是不是所有者,如果是所有者,直接匹配权限,后面的就不看了,不是就往下看,一旦匹配,不往下走,匹配顺序:所有者,所属组,other

示例2: 对目录有w权限

[root@localhost ~]# chmod 777 /dir10/
[root@localhost ~]# chmod 000 /dir10/file1 
[root@localhost ~]# ll -d /dir10/
drwxrwxrwx. 2 root root 4096 3月  11 18:37 /dir10/
[root@localhost ~]# ll /dir10/file1 
----------. 1 root root 0 3月  11 18:37 /dir10/file1

[alice@tianyun ~]$ cat /dir10/file1 
cat: /dir10/file1: 权限不够
[alice@tianyun ~]$ rm -rf /dir10/file1 
[alice@tianyun ~]$ touch /dir10/file2

问题1:

[root@localhost ~]# ll /root/install.log
-rw-r--r--. 1 root root 46571 6月   1 23:37 /root/install.log
[alice@tianyun ~]$ cat /root/install.log
cat: /root/install.log: 权限不够

问题2: alice能删除/下的任何文件吗?

[root@localhost ~]# chmod 777 /
[root@localhost ~]# ll -d /
drwxrwxrwx. 27 root root 4096 6月   4 11:32 /
[alice@tianyun ~]$ rm -rf /etc

再次认识一下文件和目录:

88bf必发唯一娱乐官网 3

文件权限操作命令

chmod

chmod[OPTION]… OCTAL-MODE FILE…
-R: 递归修改权限

chmod[OPTION]… MODE[,MODE]… FILE…
MODE:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ –

chmod[OPTION]… –reference=RFILE FILE…
参考RFILE文件的权限,将FILE的修改为同RFILE

基本权限 ACL

文件权限管理之: ACL设置基本权限(r、w、x)
UGO设置基本权限: 只能一个用户,一个组和其他人
ACL 设置基本权限: r,w,x

特殊权限

SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1)
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限

=ACL基本用法=

设置:
[root@localhost ~]# touch /home/test.txt
[root@localhost ~]# ll /home/test.txt    
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt

[root@localhost ~]# getfacl /home/test.txt
[root@localhost ~]# setfacl -m u:alice:rw /home/test.txt              //增加用户alice权限
[root@localhost ~]# setfacl -m u:jack:- /home/test.txt                //增加用户jack权限
[root@localhost ~]# setfacl -m o::rw /home/test.txt

查看/删除:
[root@localhost ~]# ll /home/test.txt 
-rw-rw-r--+ 1 root root 0 10-26 13:59 /home/test.txt
[root@localhost ~]# getfacl /home/test.txt

[root@localhost ~]# setfacl -m g:hr:r /home/test.txt
[root@localhost ~]# setfacl -x g:hr /home/test.txt                     //删除组hr的acl权限
[root@localhost ~]# setfacl -b /home/test.txt                          //删除所有acl权限

SUID

suid 放在所有者权限的x位,表现为大S
只能作用在二进制的可执行的程序上才有意义,不能作用在非二进制可执行程序,所有用户在执行可执行二进制程序时继承所有者的权限
88bf必发唯一娱乐官网,权限设定:
chmod u+s FILE…
chmod u-s FILE…

=查看帮助=

[root@localhost ~]# man setfacl
/EXAMPLES
[root@localhost ~]# getfacl file1 |setfacl  --set-file=- file2       //复制file1的ACL权限给file2

SGID

sgid 放在所属组权限的x位,表现为大S
同suid,所有用户在执行可执行二进制程序时继承所属组的权限
权限设定:
chmod g+s FILE…
chmod g-s FILE…

=ACL高级用法=

mask:
用于临时降低用户或组(除属主和其他人)的权限
建议:为了方便管理文件权限,其他人的权限置为空
[root@localhost ~]# setfacl -m m::--- /home/file100.txt


default: 继承(默认)
要求: 希望alice能够对/home以及以后在/home下新建的文件有读、写、执行权限

思路:
步骤一: 赋予alice对/home读、写、执行权限
[root@localhost ~]# setfacl -m u:alice:rwx /home

步骤二: 赋予alice对以后在/home下新建的文件有读、写、执行权限 (使alice的权限继承)
[root@localhost ~]# setfacl -m d:u:alice:rwx /home

Sticky

Sticky (粘滞位)
放在other权限的x位,表现为大T(原本有执行权限表现为t,原本没有执行权限变现为T)
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR…
chmod o-t DIR…

高级权限 suid,sgid,sticky

问题1: 为什么会失败!

[root@localhost ~]# ll /root/install.log
-rw-r--r--. 1 root root 46571 6月   1 23:37 /root/install.log
[alice@tianyun ~]$ cat /root/install.log
cat: /root/install.log: 权限不够

分析:
alice           /usr/bin/cat (alice)            /root/install.log
alice           /usr/bin/passwd (root)      /etc/shadow

高级权限的类型
suid 4
sgid 2
sticky 1 粘滞位

设置特殊权限
a、字符
chmod u+s file
chmod g+s file
chmod g+s dir
chmod o+t dir

b、数字
chmod 4777 file
chmod 7777 file
chmod 2770 dir
chmod 3770 dir

大X

X(x权限特殊形式)
针对目录增加x权限
对文件
1 无执行的文件,不会增加x权限
2 任意三种人有执行权限,也会增加x权限

示例1:suid 普通用户通过suid提权 <针对文件>

在进程文件(二进制,可执行)上增加suid权限
[root@localhost ~]# chmod u+s /bin/cat
[root@localhost ~]# chmod u+s /bin/rm
[alice@tianyun ~]$ cat /root/install.log

普通用户可以修改密码:
alice           /usr/bin/passwd      /etc/shadow

[alice@tianyun ~]$ ll /etc/shadow
---------- 1 root root 1487 6月   4 13:43 /etc/shadow

[alice@tianyun ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月  17 2012 /usr/bin/passwd

[alice@tianyun ~]$ passwd 
更改用户 alice 的密码 。
为 alice 更改 STRESS 密码。
(当前)UNIX 密码:

[root@localhost ~]# ps aux |grep passwd
root      3674  0.0  0.0 165764  1884 pts/1    S+   14:34   0:00 passwd

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生效顺序:所有者,自定义用户,自定义组,其他人

为多用户或者组的文件和目录赋予访问权限rwx
•mount -o acl /directory
•getfacl file |directory
•setfacl -m u:wang:rwx file|directory
•setfacl -Rm g:sales:rwX directory
•setfacl -M file.acl file|directory
•setfacl -m g:salesgroup:rw file| directory
•setfacl -m d:u:wang:rx directory
•setfacl -x u:wang file |directory
•setfacl -X file.acl directory

ACL文件上的group权限是mask
值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl可看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
base ACL 不能删除
setfacl-k dir 删除默认ACL权限
setfacl–b file1清除所有ACL权限
getfaclfile1 | setfacl–set-file=-file2 复制file1的acl权限给file2

mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective
Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效setfacl-m
mask::rxfile
–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
setfacl –restore acl.txt
getfacl -R /tmp/dir1

示例2:sticky 用户只能删除自己的文件 <针对目录>

[root@localhost ~]# mkdir /home/dir1
[root@localhost ~]# chmod 777 /home/dir1
测试:user1在/home/dir1建立文件, user2尝试删除!

[root@localhost ~]# chmod o+t /home/dir1
[root@localhost ~]# ll -d /home/dir1
rwxrwxrwt 2 root root 4096 09-02 02:26 /home/dir1
谁可以删除:
root
文件的所有者
目录的所有者

示例3:sgid 新建文件继承目录属组 <针对目录>

[root@localhost ~]# mkdir /home/hr
[root@localhost ~]# chgrp hr /home/hr/
[root@localhost ~]# chmod g+s /home/hr
[root@localhost ~]# ll -d /home/hr/
drwxr-sr-x. 2 root hr 4096 Dec  5 16:03 /home/hr/

[root@localhost ~]# touch /home/hr/file9
[root@localhost ~]# ll /home/hr/
-rw-r--r--. 1 root hr   0 Dec  5 16:03 file9

=================================================================
小知识:注意以下目录的正确权限,否则会导致程序不能正常运行
[root@wangcy ~]# ll -d /tmp /var/tmp/
drwxrwxrwt 14 root root 4096 07-26 10:15 /tmp
drwxrwxrwt  2 root root 4096 07-24 19:02 /var/tmp/
=================================================================
                文件                                                 目录
suid      执行的时候以所有者身份执行

sqid                                                                继承属组 

sticky                                                              用户只能删除自己的文件

进程掩码 mask umask

mask;
用于临时降低用户或组(除属主和其他人)的权限
mask决定了他们的最高权限
建议:为了方便文件管理,其他人的权限置为空

文件权限管理之: 进程umask

进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限

shell (vim,touch)      =======umask======>    新文件或目录权限
vsftpd                  =======umask======>    新文件或目录权限 
samba                   =======umask======>    新文件或目录权限 
useradd                 =======umask======>    用户HOME

示例1: 在shell进程中创建文件

[root@localhost ~]# umask                                     //查看当前用户的umask权限
0022
[root@localhost ~]# touch file800
[root@localhost ~]# mkdir dir800
[root@localhost ~]# ll -d dir800 file800 
drwxr-xr-x. 2 root root 4096 3月  11 19:40 dir800
-rw-r--r--. 1 root root    0 3月  11 19:40 file800

示例2:修改shell umask值(临时)

[root@localhost ~]# umask 000
[root@localhost ~]# mkdir dir900
[root@localhost ~]# touch file900
[root@localhost ~]# ll -d dir900 file900 
drwxrwxrwx. 2 root root 4096 3月  11 19:44 dir900
-rw-rw-rw-. 1 root root    0 3月  11 19:44 file900

示例3:修改shell umask值(永久)

[root@localhost ~]# vim /etc/profile   
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi
[root@localhost ~]# source /etc/profile       //立即在当前shell中生效

示例4:通过umask决定新建用户HOME目录的权限

[root@localhost ~]# vim /etc/login.defs 
UMASK           077
[root@localhost ~]# useradd gougou
[root@localhost ~]# ll -d /home/gougou/
drwx------. 4 gougou gougou 4096 3月  11 19:50 /home/gougou/

[root@localhost ~]# vim /etc/login.defs
UMASK           000
[root@localhost ~]# useradd yangyang
[root@localhost ~]# ll -d /home/yangyang/
drwxrwxrwx. 4 yangyang yangyang 4096 3月  11 19:53 /home/yangyang/

文件属性 chattr

文件权限管理之: 文件属性
注:设置文件属性(权限),针对所有用户,包括root

[root@localhost ~]# touch file100 file200 file300
[root@localhost ~]# lsattr file100 file200 file300 
-------------e- file100
-------------e- file200
-------------e- file300

[root@localhost ~]# man chattr
[root@localhost ~]# chattr +a file100 
[root@localhost ~]# chattr +i file200 
[root@localhost ~]# chattr +A file300

[root@localhost ~]# lsattr file100 file200 file300 
-----a-------e- file100
----i--------e- file200
-------A-----e- file300

[root@localhost ~]# echo 111 > file100                    //以覆盖的方式写入
bash: file100: Operation not permitted
[root@localhost ~]# rm -rf file100 
rm: cannot remove `file100': Operation not permitted
[root@localhost ~]# echo 111 >> file100                  //以追加的方式写入,例如日志文件

[root@localhost ~]# echo 111 > file200
bash: file200: Permission denied
[root@instructor ~]# echo 111 >> file200
bash: file200: Permission denied
[root@localhost ~]# rm -rf file200 
rm: cannot remove `file200': Operation not permitted

[root@localhost ~]# chattr -a file100
[root@localhost ~]# chattr -i file200
[root@localhost ~]# chattr -A file300