zoukankan      html  css  js  c++  java
  • Linux文件权限基础

    重大失误操作:

    chmod -R +x /   --》更改根目录下的所有文件的权限为可执行权限
    chmod -R 777 /  --》没安全性可言了
    rm -rf /        --》删除根下面的全部文件

    设置用户不能登录系统

    1. 可以在/etc/shadow文件里的密码字段前面添加!!
    2. 可以禁用用户,或者修改/etc/passwd文件里用户的shell为/sbin/nologin。用户都不能登录系统。

    访问权限

    • -r 可读(read):允许查看文件内容、显示目录列表
    • -w 可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
    • -x 可执行(execute):允许运行程序、切换目录

    归属(所有权)

    • -u 文件拥有者(owner):拥有该文件或目录的用户帐号
    • -g 属组(group):拥有该文件或目录的组帐号
    • -o 其它人(others):除了属主和属组的其他人
    • -a 所有的人(all)

    这里写图片描述


    read权限

    1. 对文件而言,就是查看里面的内容
      • cat,vim,less,more等
    2. 对目录而言,就是查看目录里的内容
      • ls

    write (写)

    1.对文件而言,就是修改里面的内容
    vi
    2.对目录而言,就是新建、删除、重命名、移动
    mkdir 、touch 、rm、mv、cp

    execute 可执行

    1. 对文件而言,就是执行这个文件里的命令。例如执行脚本文件。
    2. 对目录而言,就是进入目录 可以使用cd 命令进入。
    # su xiaoniu  
    切换用户到xiaoniu,继承切换前root用户的环境变量,原来在什么路径,切换后还是在什么路径。

    chmod命令

    这里写图片描述
    chmod 是用来修改权限 :

    • u:user
    • g:group
    • o:others
    • a:all
    • +:是增加权限
    • -:是去掉权限
    • =:直接等于某些权限
    • -R:递归修改指定目录下所有文件、子目录的权限
      这里写图片描述

    例子1:(推荐用数字修改!)

    # chmod o+x,g+w passwd 
    --》其他人增加执行,小组增加写的权限# chmod o=r,g=r,u=r passwd 
    --》passwd文件的属主,属组,其他,均为读# chmod 444 passwd 
    --》passwd文件的属主,属组,其他,均为读。# chmod +x passwd 
    --》所有的用户都会增加一个x权限# chmod a+w passwd 
    --》所有的用户增加一个w权限# chmod a-xw passwd 
    --》所有用户同时去掉w和x的权限 # chmod a=rwx  hunan  -R 
    --》修改hunan目录及子目录的权限为rwx 

    umask 权限掩码(当前用户新建文件和目录的时候默认的权限)

    root用户下默认新建文件的权限为644,新建目录的权限755 。
    [root@liupeng lianxi]# umask      
    --》查看用户的权限掩码
    0022               
    --》(组和其他人去掉写的权限)前面的0是特殊权限位
    #umask -S  查看当前用户的权限设置
    u=rwx,g=rx,o=rx

    umask用法:

    $ umask 077  
    --》直接修改权限掩码,但是这种方式修改只是临时有效,重启恢复原来的 

    vim /etc/bashrc 此文件里规定里umask的默认值
    UID大于199同时用户名和组名相同,umask值就是002,否则为022。

    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
       umask 002
    else
       umask 022
    fi

    系统默认umask

    不推荐修改系统默认umask
    用户属于那个组,会自动继承这个组的权限

    练习:

     1.新建文件夹/perm
     2.进入/perm,复制/etc/hosts文件到当前目录下
     3.修改hosts文件的权限为,属主有读写执行,属组有读执行,其他人没有任何权限
     4.新建xiaoxu目录,修改权限为任何人都有读写执行的权限
     5.修改xiaoxu的权限为只有属主有读写执行,其他任何人都没有读写执行的权限
     6.修改xiaoxu的权限为所有的人都没有读写执行的权限
     7.查看/etc/passwd和/etc/shadow文件的权限
     8.查看/tmp目录的权限
     9.查看/root目录的权限
     10.查看/home/目录下所有目录的权限

    答案8:

    drwxr-xr-x.   2 root        root       12288 Apr 13 09:05 sbin

    PS:
    权限部分。代表这目录设置了selinux权限,受selinux权限策略的影响
    selinux 是linux下为了保障linux的安全,使用的一套安全措施。(可以理解为一个防火墙)
    建议linux服务器将此功能禁用,因为太安全会影响机器的性能和我们实验的效果。

    # getenforce  --》查看selinux的状态
    Disabled          --》说明selinux禁用了
    # getenforce  
    Enforcing    --》说明selinux是强制开启的状态
    selinux禁用步骤:
     1.# vim /etc/sysconfig/selinux
    SELINUX=disabled  --》修改为disabled
     2.重新启动机器,下次会自动禁用selinux
    临时让selinux无效
    # getenforce
    Enforcing
    # setenforce 0
    # getenforce
    Permissive
    如果你使用getenforce查看的selinux的状态是disabled 就不需要使用上面的命令了。

    chown 命令(修改属主和属组)

    $ chown xiaoniu:root songshan --》错误,会报错。
    普通用户不能执行这个命令chown ,只能root用户执行。

    具体例子:

    # chown xiaoniu songshan    --》只把属主改为xiaoniu
    # ll -d songshan    --》songshan是文件夹
    drwxrwxr-x 2 xiaoniu kkk 4096 May 25 11:18 songshan
    ②# chown xiaoniu:root songshan    --》属主为xiaoniu 属组为root 
    [root@teacher lianxi]# ll -d songshan
    drwxrwxr-x 2 xiaoniu root 4096 May 25 11:18 songshan
    PS# chown xiaoniu.root songshan  使用.和:效果一样# chown -R kkk.kkk shenongcheng --》将shennongcheng目录及子目录的属主和属组都修改为kkk
    # chown  :shaolinshi songshan --》修改属组为shaolinshi 

    chgrp 修改属组(与用chown 属主:属组修改,效果一样)

    # ll
    total 36
    -rw-r--r-- 1 root    root          0 May 25 10:13 dengchao
    drwxr-xr-x 2 root    root       4096 May 25 11:14 huashan
    drwxrwxrwx 3 root    root       4096 May 25 10:07 hunan
    drwxr-xr-x 2 root    root       4096 May 25 11:31 wudangshan
    drwxr-xr-x 2 root    root       4096 May 25 10:13 zhongguohehuoren
    # groupadd wudang
    # chgrp wudang wudangshan    --》把wudangshan加到wudang组里
    # ll -d wudangshan
    drwxr-xr-x 2 root wudang 4096 May 25 11:31 wudangshan

    练习:

     1.进入/tmp目录
     2.新建用户zhaomin,然后使用zhaomin登录,进入/tmp目录
     3.新建目录dadu
     4.新建用户wuji
     5.将dadu目录的属主修改为wuji所有,属组修改为wudang所有。
     6.新建目录 mingjiao/guangmingding目录
     7.修改mingjiao目录及子目录的属主和属组都为wuji

    newgrp 修改用户的有效组,当用户属于多个组的时候,可以更改

    chattr 修改文件的特殊属性

    chattr:修改linux文件系统里文件的特殊的属性

    • a属性表示只能追加,不能删除里面的内容;
    • i属性表示写保护,不能修改。

    具体例子:

    # chattr +i /etc/passwd  --》给/etc/passwd文件添加i属性,相当于锁住了。不能修改此文件了。
    # useradd  xiaochen123
    useradd: cannot open /etc/passwd  --》不能添加用户# chattr +a jiuyangshengong/ --》添加a属性,只能追加,不能删除了。
    # lsattr -d jiuyangshengong/    --》查看此文件的ACL访问控制列表。
    -----a-------e- jiuyangshengong/
    PS:即,加了a属性后,只能新建文件、文件夹,但是建立后不能删除。

    练习:

    1.新建目录taohuadao,要求taohuadao目录不能被删除,只能往目录里新建文件或者目录
    2.新建一个空文件honghuamiji ,要求只能往honghuamiji里追加内容不能删除里面的内容
    3.新建目录wudang,组wudang目录下新建空文件zhangsanfeng,要求不能删除wudang目录下所有的文件
    4.复制/etc/passwd到当前目录下,设置passwd文件不能被修改
    5.去掉honghuamiji文件的特殊属性,要求能删除里面的内容

    suid 权限位(黄马卦、尚方宝剑)、sgid

    当某个命令具有suid权限位的时候,普通用户在执行这个命令的时候,会具有root用户的权限

    查看passwd命令的suid权限位

    # ll /etc/shadow  --》默认只有root用户可以修改
    ---------- 1 root root 2791 May 25 14:12 /etc/shadow
    # which passwd
    /usr/bin/passwd
    # ll /usr/bin/passwd  
        passwd文件默认具有suid权限位,普通用户修改密码的时候,是以root用户的身份去修改密码的,这样可以达到修改/etc/shadow文件里的密码的作用
    -rwsr-xr-x. 1 root root 25980 Feb 17  2012 /usr/bin/passwd

    练习:把tail命令加suid权限位

    # which tail
    /usr/bin/tail
    ②# ll /usr/bin/tail
    -rwxr-xr-x 1 root root 62636 Apr 17  2012 /usr/bin/tail
    ③# chmod u+s /usr/bin/tail  --》授予tail命令suid权限位# ll /usr/bin/tail
    -rwsr-xr-x 1 root root 62636 Apr 17  2012 /usr/bin/tail
    ⑤# su - weixiaobao$ tail -1 /etc/shadow
    weixiaobao:$6$Of8lblam$iToAGG5QzEVF3uFZITkKpctHIkLPOxABKc6zjt6I9ZYXny6/W2NK5WOkLnUBgG67f2fZfsGyzWO6RAbYdRTJH0:15850:0:99999:7:::
    PS# chmod u-s /usr/bin/tail  取消tail命令suid权限位

    建议:不要将所有的命令都赋予suid权限位,这样对系统不好,不安全!!

    操作对象 特殊权限 功能
    文件 SUID:以文件属主的权限执行文件
    SGID:以文件属组的权限执行文件

    sticky 粘滞位

    给某个目录设置粘滞位权限后,所有的用户互相之间不能删除别人的目录和文件,就算目录的权限为777。
    

    具体例子:

    # mkdir /houcheshi
    # chmod 777 /houcheshi
    # ll -d /houcheshi
    drwxrwxrwx 2 root root 4096 May 25 15:55 /houcheshi
    # chmod1777 /houcheshi/
    # su lihao
    $ ls
    [lihao@teacher houcheshi]$ touch wahaha
    [lihao@teacher houcheshi]$ ll
    total 0
    -rw-rw-r-- 1 lihao lihao 0 May 25 16:02 wahaha
    
    # su tanghailong
    [tanghailong@teacher houcheshi]$ ls
    wahaha
    [tanghailong@teacher houcheshi]$ ll
    total 0
    -rw-rw-r-- 1 lihao lihao 0 May 25 16:02 wahaha
    $ rm -rf wahaha  删除不成功,因为设置了粘滞位
    rm: cannot remove `wahaha': Operation not permitted
    $ ll -d /houcheshi/
    drwxrwxrwt 2 root root 4096 May 25 16:02 /houcheshi/

    难点:
    如果对父目录有完全控制(读写执行)的权限,可以对目录下的文件进行删除,但是对父目录下的子目录里的文件就不能进行完全控制了,需要看权限。

    一个用户属于某个组,会自动继承这个组里的权限

    练习:

    1.新建3个组,wudang、shaolin、huashan
    2.新建用户qingshu 加入到wudang组
    3.新建用户xiaozhao 加入到shaolin组
    4.新建用户linghu,liuyang加入到huashan组
    5.新建一个目录wulin要求qingshu有读写执行的权限,xiaozhao有读执行的权限,linghu没有任何权限,如何实现?

    [root@teacher lianxi]# mkdir wulin
    [root@teacher lianxi]# ll -d wulin
    drwxr-xr-x 2 root root 4096 May 25 16:40 wulin
    [root@teacher lianxi]# chown qingshu wulin
    [root@teacher lianxi]# ll -d wulindrwxr-xr-x 2 qingshu root 4096 May 25 16:40 wulin
    [root@teacher lianxi]# chown :shaolin wulin
    [root@teacher lianxi]# ll -d wulin/
    drwxr-xr-x 2 qingshu shaolin 4096 May 25 16:40 wulin/
    [root@teacher lianxi]# chmod 750 wulin
    [root@teacher lianxi]# ll -d wulin/
    drwxr-x--- 2 qingshu shaolin 4096 May 25 16:40 wulin/

    ACL访问控制列表、getfacl、setfacl

    ACL(Access Control List):访问控制列表
    一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。

    getfacl -》 get file access control lists -》查看/获得
    setfacl -》set file access control lists -》设置

    语法:
    设置ACL:setfacl指令
    格式: setfacl 选项 规则 文件
    常用选项

    • -m:新增或修改ACL中的规则(–modify)
    • -b: 删除所有ACL规则(–remove-all)
    • -x: 删除指定的ACL规则 (–remove)

    规则:
    ACL类型

    • 存取型ACL(Access ACL):文件或目录 (默认)
    • 预设型ACL(Default ACL):只能对目录(格式:在存取型ACL的基础上加了个d:)

    预设型ACL(Default ACL)
    格式:

    • setfacl –m default:类型:特定的用户或组:权限
    • setfacl –m d:类型:特定的用户或组:权限。

    设置了预设型ACL的目录,其下的所有文件或者子目录就都具有了主目录的ACL权限,并且子目录也同样有预设的ACl权限(会继承父目录的权限)。

    具体例子:

    # setfacl -m m::r gongda  设置最大权限为读,所有的用户都生效
    # getfacl gongda/
    # file: gongda/
    # owner: root
    # group: root
    user::rwx
    user:linghu:rwx #effective:r--    实际权限
    group::r-x  #effective:r--
    group:huashan:---
    group:wudang:rwx    #effective:r--
    group:shaolin:---
    mask::r--    最大权限
    other::r-x

    标准例子2:

    # mkdir jingzhou
    # useradd liubiao 新建用户liubiao
    # ls
    gongda  hunantv  jingzhou
    # setfacl  -m d:u:liubiao:rwx jingzhou -》设置默认权限
    # getfacl jingzhou/
    # file: jingzhou/
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    default:user::rwx
    default:user:liubiao:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    • 对文件夹的操作的权限,主要是看当前目录里有什么权限,如果父目录(当前目录)有rwx的权限,是可以在父目录(这个目录)下新建文件夹或文件;
    • 但是,如果对父目录(这个目录)下的子文件夹没有w权限,是不能新建文件夹的。

    setfacl、getfacl命令练习

    1.新建3个组,shuiguo,mifen ,shaokao
    2.新建3个用户,pingguo属于shuiguo组,
    jingshi属于mifen组
    yueyang属于shaokao组
    3.在根目录下新建目录food,再将/etc/passwd
    文件复制到food目录下
    4.设置权限,passwd文件能被shuiguo组读写,
    jingshi这个用户能读写执行
    yueyang这个用户不能进行任何操作
    5.然后去验证
  • 相关阅读:
    三行Python代码查询IP
    剑指offer面试题29:数组中出现次数超过一半的数字
    【简】题解 AWSL090429 【数塔问题】
    Re.常系数齐次递推
    Re.多项式除法/取模
    【翻译】A simple stone game
    Re.多项式求逆
    Re.FFT
    题解 P4783 【【模板】矩阵求逆】
    关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546507.html
Copyright © 2011-2022 走看看