文件权限

2017-10-19  本文已影响82人  Miracle001
ls -l install.log 
-rw-r--r-- 1(引用计数) root(所有者) root(所属组) 26195(大小) DEC 17 10:42(创建时间) install.log(文件名称)
        文件类型、属主u、属组g、其他o
    文件
        r-读-查看
        w-写-修改内容
        x-执行-把此文件提请内核,启动为一个进程
        二进制程序,没有r权限,有x权限,就能运行
    目录
        r-读-文件列表
        w-写-配合x使用,才生效,可以在目录中创建或者删除文件,不能修改
        x-执行-ls/cd/打开文件
        X-大写-只给目录x权限,不给文件x权限

        只给x权限,无r权限——>做网站,告诉你,就可以访问,不告诉你,就访问不了
        只有x权限,能cd进去,看不到文件,知道名字,可以cat file_name
        只有r权限:只能查看文件列表,不能cd进入目录
        w权限,配合x权限,才可以生效,删除文件必须要有x权限和w权限
        是否有权限删除文件,与文件本身无关,与文件所在目录有关;只有x权限,无r权限,也可行:echo xxx >> file(文件名要知道)
    
    root无论在什么情况下,都有rw权限。
        所有者、所属组都无x权限,root就无x权限;任何一个有x权限,root就有x权限;
    用户最终得到的权限(匹配顺序):
        所有者——所属组——other,一旦匹配,就不会向后匹配;
    一般情况,所有者权限最大、所属组次之,other最小
    suid ——> owner ——> 属主x位 ——> s ——> 4777      S(大写)属主无x权限
    sgid ——> group ——> 属组x位 ——> s ——> 2777      S(大写)属组无x权限
    stick bit ——> other ——> 其他x位 ——> t ——> 1777 T-other无x权限
    任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
    启动为进程后,进程的属主——>发起者,属组——>发起者所属的组
    进程访问文件时的权限,取决于进程的发起者
        进程发起者,同文件的属主,则应用文件属主权限
        进程发起者,同文件的属组,则应用文件属组权限
        都无,则应用文件“其他”权限

    可执行文件的SUID权限
        启动为进程后,进程的属主为原程序文件的属主
        用户执行程序时,继承程序所有者的权限
        suid只对二进制可执行程序有效
        suid设置在目录上,无意义
        chmod u+s file
        chmod u-s file
        chmod 4755 file  -rwsr-xr-x  
        chmod 755 file  -rwxr-xr-x 
        chmod u+s /bin/cat(nano)    所有人都能以root身份操作,黑客编辑一个nano工具软件
        访问/etc/shadow  root有权限,wang无权限
        passwd程序  root有权限,wang有权限(更改口令)  原因是passwd原属主和属组都是root

    可执行文件的sgid权限
        启动为进程后,进程的属组为原程序文件的属组
        chmod g+s file
        chmod g+s file
    目录上的sgid权限
        默认情况下,用户创建文件时,该文件的属组为此用户所属的主组
        一旦目录设定了sgid权限,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
        创建一个协作目录
        chmod g+s dir
        chmod g+s dir
        ll /bin/cat  -rwxr-sr-x 
    
    stick位
        一般情况下,用户对目录具有写权限时,可以删除该目录中的任何文件,不论该文件的权限或者拥有权
        在目录设置stick位后,只有文件的所有者或者root可以删除该文件
        stick设置在文件上,无意义
        chmod o+t dir
        chmod o-t dir 
        chmod 1770 dir 
            1770    -rwxrwx--t  有x权限 
                    -rwxrwx--T  无x权限
            3770    -rwxrws--t  
            7770    -rwsrws--t  
    chmod
        chmod [-R] {[ugoa] [+-=] [rwxst]} 文件/目录     对文件目录设置权限
        chmod [-R] {[ugoa] [+-=] [ugo]} 文件/目录   参考当前权限,设置其他权限
            chmod g=u testfile
            chmod o+u testfile 
        chmod -R a=rwX 目录名
            目录有x权限,其中的文件无x权限
            目录中的某个文件的任何一个人有x权限,目录和该文件所对应的3种人都会有x权限
            X权限没有对应的8进制
        数值设定
        chmod [-R] [n0]n1n2n3 文件名/目录名 
            n0 特殊权限
            n1 所有者 
            n2 所属组 
            n3 其他人
    chown 改属主/组
        chmod owner:group 文件/目录
        chown -R owner:group 文件/目录
        chown -R owner 文件/目录 
        chown -R :group 文件/目录
            -R递归,该文件夹的所有子文件变为相同属主/组,普通用户不能改文件属主
    chgrp 改文件属组
        chgrp -R group 文件/目录
            -R递归,普通用户可以改文件所属组,前提:该用户是新属组的成员
            文件系统vfat格式,不支持“所有者”“所属组”,所以命令行不通,报错     
    umask掩码
        从777或666中,将文件对应的权限位去掉,得到默认权限
            umask+默认权限 = 666(file)/777(dir)
            新建的文件权限:666-umask,如果有奇数,就加1;
            新建的目录权限:777-umask
        非特殊用户umask是002,root的umask是022,/etc/bashrc
        umask值只会影响新建文件的权限,原文件权限不受影响;
        umask值越大,默认权限越小,生产环境中,默认权限小有好处
            全局配置/etc/bashrc /etc/profile
            用户配置~wang/.bashrc 
        umask               查看当前umask值  
        umask 数字(3位数)   设定当前umask值,exit后,恢复原值
        vim .bashrc ——> 在文件最下方空白处添加:umask xxx(3位数) ——> . .bashrc        永久保存umask值
        umask -S(大写)        显示权限(u=,g=,o=) 
        umask u=,g=,o=      直接设定权限
        umask -p >> ~wang/.bashrc   输出可以被调用
        cat ~wang/.bashec   看到“umask -p”的输出内容
    练习
        两个不同的用户,创建文件同属一个组,可以互相访问文件,但是不可以互删文件
            sale组                   
            wang加入sale组,touch wang1/wang2,文件的属主是自己,属组是sale      useradd -g sale wang(新用户)   groupmems -g sale -a wang(已存在的用户)   sale~wang~wang1
            mage加入sale组,touch mage1/mage2,......                            useradd -g sale mage 
            dir目录的属组为sale,属主为root,设置为sticky,rwxrw---t               chown :sale dir ; chmod o+t dir ; 
        复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限
            cp /etc/fstab /var/tmp 
            chown wangcai:sysadmins /var/tmp/fstab
            chmod ug=rw,o= /var/tmp/fstab
        误删除了用户wangcai的家目录,请重建并恢复该用户家目录及相应的权限属性
            rm -rf /home/wangcai 
            cp -r /etc/skel /home/wangcai
            ll -d 文件夹 /home/wangcai     显示属性和权限
            chmod 700 /home/wangcai
            ll -d /home/wangcai
            chown -R wangcai:wangcai /home/wangcai
    设定文件的特定属性
        chattr +i file  不能删除、改名、更改,只能看,cat
        chattr -i file  能删除、改名、更改
        chattr +A file  能删除、改名、更改
        chattr +a file  只能追加内容  echo aaa >> file
        chattr -a file  恢复原有文件权限
        lsattr file     只显示特定属性
            chattr +i shadow    锁定文件
            lsattr shadow       文件权限---i------
            chattr +a shadow    
            lsattr shadow       文件权限---a------
            防止误操作和破环文件
            只读文件,加i后,该文件不能更改(安全加固方法)
访问控制列表

    ACL:实现灵活的权限管理
        设置权限的对象:文件所有者 文件所属组 其他人 以及更多的人
        centos7 默认创建的xfs和ext4文件系统具有ACL功能
        centos7之前的版本 默认创建的ext4文件系统无ACL功能,需要手动添加
        tune2fs -o acl /dev/sdb1
        mount -o acl /dev/sdb1 /mnt/test
    ACL生效生效顺序
        所有者——>自定义用户——>自定义组——>其他人 
        自定义组:一个用户,属于多个自定义组,用户的权限属于多个自定义组的累加权限
    为多个用户或者组的 文件和目录赋予访问权限rwx
        setfacl 
        getfacl     file/dir                    查看acl权限         
        setfacl -m u:wang:rwx       file/dir    原有的权限不改变,只是单独设定了wang的权限 
            su wang
            ll f1   -rw-r--r--+  主要+号
        setfacl -m g:salesgroup:rw  file/dir
        setfacl -m d:u:wang:rx      file/dir    增加默认权限
        setfacl -k  file/dir                    删除默认权限
            dir中的   f3(原来)  原文件权限保持原状
                    f4(新建)  新建文件继承目录的default权限
        setfacl -x d:u:wang:rx      file/dir    删除默认权限,虽然删除了权限,但是+仍然存在
        setfacl -X file.acl file/dir            删除多个ACL权限
        setfacl -M file.acl file/dir            增加多个ACL权限
            file.acl 的内容是 
                u:wang:-
                g:g1:rwx 
            把权限放在一个文件里,通过调用,来使用它
            cat > file.acl 
        setfacl -Rm g:salesgroup:rwX dir        通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
        setfacl -Rb file/dir                    清除所有ACL权限,普通权限不受影响

        文件(组)
            传统组的文件权限    所属组只有一个,不存在权限的多组累加
            自定义组的文件权限   权限多组累加
        不同文件
            f1  g1      f1和f2的权限是g1+g2 
            f2  g2  

    ACL文件上的group权限是mask值,而非传统的组权限
    mask值(高压线)
        自定义用户、自定义组、所属组的最大权限
        mask:-w-
        user:wang:rw- ——> -w- 有效
        group::r-- ——> --- 有效
        自定义用户和自定义组的权限不能超过mask权限
        设置ACL权限,mask权限也会自动改变
    实验
        ACL文件权限过大,想把用户权限降下来
        setfacl -m mask::r file 
            mask::r--
            其他用户:r-- ---
        自己可以设置ACL权限,但是真正生效的权限是受mask权限影响(决定);
            mask::- 拒绝访问    
        chmod g=r f1
        mask::r--
        设置ACL权限,所属组的权限=mask权限
    base ACL不能删除(所有者、其他人不能删除其权限)    
    getfacl file1 | setfacl --set-file=-(代表前面管道的标准输出) file2 
    getfacl file1 > file.acl   
        setfacl --set-file=file.acl 
    mask只影响除所有者和other的之外的人和组的最大权限
    mask需要与用户的权限进行逻辑与运算,才能变成有效权限
    用户和组的设置必须存在于mask权限设定范围内才会生效
    --set选项会把原有的ACL项都删除,用新的替代,注意:
        一定要包含UGO设置,不能像"-m"一样,只是添加ACL就可以
        setfacl --set u::rw,u:wang:rw,g::r,o::- file 
    备份和恢复ACL
        cp/mv  支持ACL
        cp -p ,否则ACL丢失
        tar工具不保留目录和文件的ACL
        备份 
            getfacl -R /tmp/dir1 > acl.txt
            setfacl -Rb /tmp/dir1  清除所有ACL权限(目录和文件)
        恢复 
            setfacl -R --set-file=acl.txt /tmp/dir1
            setfacl --restore acl.txt
        作业
            root root /testdir/dir 题目
            chgrp g1 /testdir/dir
            chmod g+s /testdir/dir
            setfacl -m -R g:g2:rwx /testdir/dir
            setfacl -m d:g:g2:rw /testdir/dir
            setfacl -m d:g:g3:r /testdir/dir
上一篇 下一篇

猜你喜欢

热点阅读