文件权限管理

        三种用户:
            文件所有者  u   user
            文件所属组  g   group
            其他人      o   other

        
        三种权限:
            读      r   read
            写      w   write
            执行    x   excute


文件权限管理命令

    数字法:
    chmod 777 文件名
    
    字母法:
    chmod u+r,g+r,o-x 文件名

用户和组修改的指令

 chown 用户:属组 文件名
 chown 用户.属组 文件名
 chown tom: 文件名
 chown :属组 文件名
 chown 用户 文件名
 chown --reference=f1 f2
 chown -R tomcat:tomcat dir/

所属组修改

 chgrp -R 组名 文件名

umask
 超管:
     默认文件的权限:644
     
     默认文件夹的权限:755

 普通用户:
     默认文件的权限:664
     
     默认文件夹的权限:775

useradd 
 普通用户家目录:/home
 超管的家目录:/root


用户相关的配置文件

 /etc/passwd  7列信息
 /etc/shadow  
 /etc/group
 /etc/gshadow
 
 getent passwd

查看文本工具

 cat 
 nl
 tail -f
 head
 less
 more

用户不能登录Shell

创建用户mary和 harry,要求harry的uid为3000,shell设置为不可登陆shell
    不能登录:
        /bin/false
        /sbin/nologin
        
    useradd mary
    useradd -u 3000 -s /bin/false -c "测试用户" harry 

文件权限管理

setuid.png

1.设置文件所有者 shown

chown OWNER:GROUP	#同时修改所有者和属组
chown -R	#递归

2.设置文件的属组信息 chgrp

chgrp --reference=RFILE  	   #按照指定文件的的属性,来修改目标文件属性
chgrp -R	#递归

3.修改文件权限

修改文件权限chmod

4.新建文件目录权限控制umask

umask -p 	查看umask数值	
umask -S	按照字母表达式显示

永久设置:写入配置文件
/etc/bashrc
~/.bashrc

Linux文件特殊权限

SGID u+s

方法一:chmod u+s  文件
方法二:chmod 4644 文件

suid权限与执行权限位共用, 执行权限位出现小写s表示文件属主有执行权限, 大写S表示文件文件属主没有执行权限

SGID g+s

方法一: chmod g+s  文件
方法二: chmod 2644 文件

guid权限与属组执行权限位共用, 执行权限位出现小写s表示文件属组有执行权限, 大写S表示文件文件属组没有执行权限

Sticky o+t

方法一: chmod o+t  文件
方法二: chmod 1644 文件

sticky权限与其他用户执行权限位共用, 执行权限位出现小写s表示文件其他用户有执行权限, 大写T表示文件其他用户没有执行权限

隐藏权限 chattr +i & +a

chattr +i 	root用户和所有用户不能删除,移动,重命名文件,修改文件内容

chatrr +a 	只能追加内容, 不能删除,移动,重命名文件

sattr [文件名] 	查看隐藏权限

ACL权限

格式: setfacl -m [u/g]:user:[rwx] 文件

setfacl -m
# 设定 ACL 权限

setfacl -x 
# 删除指定用户或用户组权限

setfacl -b
#删除所有的 ACL 权限
- setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限

setfacl -R
- 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效
- 命令格式为 "setfacl -m u:用户名:权限 -R 文件名"(群组使用 g:群组名:权限)

getfacl 查看ACL权限

#设置文件acl权限
# setfacl -m u:test:rw file1.txt
#权限位后面多了一个"+",表示此文件拥有ACL权限

#查看文件acl权限
# getfacl 【文件名】

image.png

#删除tom用户ACL权限
setfacl -x u:xuan file1.txt

#对用户组设置ACL权限
setfacl -m g:admins:rwx file1.txt

#后面创建的用户都拥有此权限
setfacl -m d:u:admins:rwx file1.txt

#清空文件所有用户ACL权限
setfacl -b file1.txt

#复制file1的acl权限给file2
getfacl file1 | setfacl --set-file=-   file2 
-a	显示文件的ACL
-d	显示默认的ACL
-c	不显示注释标题
-e	显示所有的有效权限
-E	显示没有的有效权限
-R	递归到子目录

mask权限

#1. 一旦设置了ACL权限,就会产生一个mask权限代替group所属组权限
[root@centos7 /data ]# setfacl  -b file1.txt
[root@centos7 /data ]# setfacl -m u:xuan:rw file1.txt
[root@centos7 /data ]# chmod g=rw file1.txt
[root@centos7 /data ]# getfacl file1.txt

#2. 一旦setfacl对其他用户设置权限大于mask权限,mask权限会自动抬高权限
[root@centos7 /data ]# setfacl -m g:admins:rwx file1.txt
[root@centos7 /data ]# getfacl file1.txt
# file: file1.txt
# owner: root
# group: root

#3. 一旦修改了文件所属组权限,或者setfacl修改了mask权限; 除了文件属主用户权限和其他用户other权限不变以外,自定义用户和自定义组的ACL权限会被下降至mask相同权限
[root@centos7 /data ]# setfacl -m mask::r file1.txt
[root@centos7 /data ]# getfacl file1.txt

ACL备份还原

#备份 ACL
getfacl -R /tmp/dir > acl.txt

#消除 ACL权限
setfacl -R -b /tmp/dir

#还原 ACL权限,注意按照文件最后一个ACL权限进行还原
setfacl -R  --set-file=acl.txt /tmp/dir

#还原 ACL权限
setfacl --restore acl.txt

#查看 ACL权限
getfacl -R /tmp/dir

小结

ACL:
    权限更加灵活的管理。

    setfacl:
        useradd demo   wx

        useradd g1     rx

        mkdir /data

        setfacl -m u:demo:wx /data

        setfacl -x u:demo /data

        setfacl -m g:g1:rx /data

        setfacl -m d:u:test:rwx /data

        setfacl -m mask::rw /data
    
    getfacl:
        getfacl -c /data

权限备份:
    getfacl -c /data > databak.acl

    setfacl -b /data 

    setfata --set-file=databak.acl /data