美文网首页
作业-第04周--课堂-Day16-Linux系统权限知识及应用

作业-第04周--课堂-Day16-Linux系统权限知识及应用

作者: MineG | 来源:发表于2019-03-23 19:14 被阅读0次

    Day16 课堂笔记

    1. Linux文件及目录权限

    1 普通文件对应读、写、执行权限的详细说明

    1)可读r:表示具有可读、浏览文件内容(即读取文件实体block)的权限
    2)可写w:表示具有新增、修改、删除文件内容的权限。
    3)可执行x:表示具有执行文件的权限。
    其中对于可读r,这里有两点需要说明:

    • 如果没有可读r配合,那么使用vi编辑文件时会提示无法编辑(但可强制编辑),可以使用echo等命令进行重定向或追加。
    • 删除文件或者创建文件的权限受父目录(上一级目录)的权限控制,与文件本身的可写w权限无关。

    对于可执行x,需要注意以下三点:

    • 首先文件本身要能够执行(命令或脚本)。
    • 如果是普通用户,同时还需要具备可读r的权限才能执行文件。
    • root用户只要有可执行x的权限就能执行文件。

    2 目录对应读、写、执行权限的详细说明

    1)可读r:表示具有浏览目录下面文件及子目录内容的权限。
    2)可写w:表示具有增加、删除或修改目录内文件的权限。但是,如果没有可执行x的配合,即使有w权限,也无法删除或创建文件。
    3)可执行x:表示具有进入目录的权限。

    3. Linux权限体系核心知识

    3.1 权限实践环境准备

    1 规划三种不同用户角色

    • incahome(家、组)
    • oldboy 家庭男主人,用来代表用户(User)角色,是文件的所有者
    • oldgirl 女主人(和所有者oldboy属于相同组,oldboy的家人)用来代表用户组incahome的角色
    • test 其他人 其他(others)人,用来代表其他用户角色

    2 创建对应的用户及用户组角色

    如果用户之前已经创建了:

    [root@oldboyedu ~]# groupadd incahome
    [root@oldboyedu ~]# useradd oldboy
    useradd: user 'oldboy' already exists
    [root@oldboyedu ~]# usermod -g incahome oldboy
    [root@oldboyedu ~]# id oldboy
    uid=1000(oldboy) gid=1004(incahome) groups=1004(incahome),1000(oldboy)
    

    如果此前没有创建oldboy,可以执行下面命令,而不需要usermod命令

    [root@oldboyedu ~]# useradd oldboy -g incahome
    
    [root@oldboyedu ~]# useradd oldgirl -g incahome
    useradd: user 'oldgirl' already exists
    [root@oldboyedu ~]# id oldgirl
    uid=1001(oldgirl) gid=1001(oldgirl) groups=1001(oldgirl)
    [root@oldboyedu ~]# usermod -g incahome oldgirl
    [root@oldboyedu ~]# id oldgirl
    uid=1001(oldgirl) gid=1004(incahome) groups=1004(incahome)
    [root@oldboyedu ~]# useradd test
    

    3 创建用于测试的目录及文件环境

    [root@oldboyedu ~]# mkdir -p /oldboy
    [root@oldboyedu ~]# echo "echo oldboyLinux" >/oldboy/test.sh
    [root@oldboyedu ~]# chmod +x /oldboy/test.sh
    

    4 打开远程登录窗口并登录

    Xshell SSH 远程登录不同窗口用户角色说明

    3.2 通过实践测试文件对应权限

    1 测试默认情况下不同用户的对应权限

    待测试文件及目录默认属性如下:

    [root@oldboyedu  ~]# ls -ld /oldboy/
    drwxr-xr-x 2 root root 21 Mar 21 01:15 /oldboy/
    [root@oldboyedu  ~]# ls -l /oldboy/test.sh 
    -rwxr-xr-x 1 root root 17 Mar 23 16:43 /oldboy/test.sh
    

    下面是测试的命令集合:

    测试可读 r的命令为:cat  /oldboy/test.sh 
    测试可写w的命令为:echo "echo oldboy" >>  /oldboy/test.sh 
    测试执行x 的命令为: /oldboy/test.sh 
    测试可删除的命令为:rm -f  /oldboy/test.sh 
    

    经过测试,你会发现三个用户的测试结果一致,以oldboy用户为例:

    [oldboy@oldboyedu  ~]$ cat /oldboy/test.sh 
    echo oldboyLinux
    [oldboy@oldboyedu  ~]$ echo "echo oldboy" >>  /oldboy/test.sh 
    -bash: /oldboy/test.sh: Permission denied
    [oldboy@oldboyedu  ~]$ /oldboy/test.sh 
    oldboyLinux
    [oldboy@oldboyedu  ~]$ rm -f  /oldboy/test.sh
    rm: cannot remove ‘/oldboy/test.sh’: Permission denied
    

    2 在root窗口将文件对应的用户改为oldboy,用户组改为incahome

    [root@oldboyedu  ~]# chown oldboy.incahome /oldboy/test.sh
    [root@oldboyedu  ~]#  ls -l /oldboy/test.sh 
    -rwxr-xr-x 1 oldboy incahome 17 Mar 23 16:43 /oldboy/test.sh
    
    

    测试oldboy用户

    [oldboy@oldboyedu  ~]$ whoami 
    oldboy
    [oldboy@oldboyedu  ~]$ cat /oldboy/test.sh 
    echo oldboyLinux
    [oldboy@oldboyedu  ~]$ echo "echo oldboy" >>  /oldboy/test.sh 
    [oldboy@oldboyedu  ~]$ cat /oldboy/test.sh 
    echo oldboyLinux
    echo oldboy
    [oldboy@oldboyedu  ~]$ /oldboy/test.sh 
    oldboyLinux
    oldboy
    

    测试oldgril用户

    [oldgirl@oldboyedu  ~]$ whoami 
    oldgirl
    [oldgirl@oldboyedu  ~]$ cat /oldboy/test.sh
    echo oldboyLinux
    echo oldboy
    [oldgirl@oldboyedu  ~]$ echo "echo oldboy" >>  /oldboy/test.sh 
    -bash: /oldboy/test.sh: Permission denied
    [oldgirl@oldboyedu  ~]$ /oldboy/test.sh 
    oldboyLinux
    oldboy
    [oldgirl@oldboyedu  ~]$ rm -f  /oldboy/test.sh
    rm: cannot remove ‘/oldboy/test.sh’: Permission denied
    

    3 重点测试oldboy用户对文件的w删除权限及test用户的执行权限

    test.sh中的其他用户权限的r权限去掉,具体步骤如下:

    [root@oldboyedu  ~]# whoami 
    root
    [root@oldboyedu  ~]# chmod 751 /oldboy/test.sh 
    [root@oldboyedu  ~]# ls -l /oldboy/test.sh
    -rwxr-x--x 1 oldboy incahome 29 Mar 23 16:50 /oldboy/test.sh
    

    下面测试oldboy用户下是否有删除test.sh的权限

    [oldboy@oldboyedu  ~]$ whoami 
    oldboy
    [oldboy@oldboyedu  ~]$ rm -f  /oldboy/test.sh
    rm: cannot remove ‘/oldboy/test.sh’: Permission denied
    

    测试test用户下是否有执行test.sh的权限

    [test@oldboyedu  ~]$ whoami 
    test
    [test@oldboyedu  ~]$ /oldboy/test.sh 
    bash: /oldboy/test.sh: Permission denied
    

    4 修改/oldboy目录的权限,并测试oldboy用户对oldboy目录下test.sh的删除权限

    具体步骤如下:

    [root@oldboyedu  ~]# whoami 
    root
    [root@oldboyedu  ~]# chmod 000 /oldboy/test.sh 
    [root@oldboyedu  ~]# ls -l /oldboy/test.sh
    ---------- 1 oldboy incahome 29 Mar 23 16:50 /oldboy/test.sh
    [root@oldboyedu  ~]# chown -R oldboy /oldboy
    [root@oldboyedu  ~]# ls -ld /oldboy
    drwxr-xr-x 2 oldboy root 21 Mar 23 16:39 /oldboy
    

    测试步骤如下:

    [oldboy@oldboyedu  ~]$ whoami 
    oldboy
    [oldboy@oldboyedu  ~]$ cat /oldboy/test.sh 
    cat: /oldboy/test.sh: Permission denied
    [oldboy@oldboyedu  ~]$ echo "echo oldboy" >>  /oldboy/test.sh 
    -bash: /oldboy/test.sh: Permission denied
    [oldboy@oldboyedu  ~]$ /oldboy/test.sh 
    -bash: /oldboy/test.sh: Permission denied
    [oldboy@oldboyedu  ~]$ rm -f  /oldboy/test.sh
    [oldboy@oldboyedu  ~]$ ls -l /oldboy/test.sh
    ls: cannot access /oldboy/test.sh: No such file or directory
    

    3.3 通过实践测试目录属性对应的权限

    1 针对当下目录/oldboy属性测试权限

    [root@oldboyedu  ~]# ls -ld /oldboy/
    drwxr-xr-x 2 oldboy root 6 Mar 23 17:06 /oldboy/
    

    测试oldboy用户:

    [oldboy@oldboyedu  ~]$ whoami 
    oldboy
    [oldboy@oldboyedu  ~]$ ls -ld /oldboy/
    drwxr-xr-x 2 oldboy root 6 Mar 23 17:06 /oldboy/
    [oldboy@oldboyedu  ~]$ touch /oldboy/{1..3}.txt
    [oldboy@oldboyedu  ~]$ ls /oldboy/
    1.txt  2.txt  3.txt
    [oldboy@oldboyedu  ~]$ ls -l /oldboy/
    total 0
    -rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 1.txt
    -rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 2.txt
    -rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 3.txt
    [oldboy@oldboyedu  ~]$ cd /oldboy/
    [oldboy@oldboyedu  /oldboy]$ pwd
    /oldboy
    [oldboy@oldboyedu  /oldboy]$ rm -f 1.txt 
    [oldboy@oldboyedu  /oldboy]$ ls
    2.txt  3.txt
    

    测试oldgirl用户:

    [oldgirl@oldboyedu  ~]$ 
    [oldgirl@oldboyedu  ~]$ whoami 
    oldgirl
    [oldgirl@oldboyedu  ~]$ ls -ld /oldboy/
    drwxr-xr-x 2 oldboy root 32 Mar 23 17:10 /oldboy/
    [oldgirl@oldboyedu  ~]$ ls /oldboy/
    2.txt  3.txt
    [oldgirl@oldboyedu  ~]$ ls -l /oldboy/
    total 0
    -rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 2.txt
    -rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 3.txt
    [oldgirl@oldboyedu  ~]$ touch /oldboy/{a..c}.txt
    touch: cannot touch ‘/oldboy/a.txt’: Permission denied
    touch: cannot touch ‘/oldboy/b.txt’: Permission denied
    touch: cannot touch ‘/oldboy/c.txt’: Permission denied
    [oldgirl@oldboyedu  ~]$ cd /oldboy/
    [oldgirl@oldboyedu  /oldboy]$ pwd
    /oldboy
    [oldgirl@oldboyedu  /oldboy]$ ls
    2.txt  3.txt
    [oldgirl@oldboyedu  /oldboy]$ rm -f 2.txt 
    rm: cannot remove ‘2.txt’: Permission denied
    

    2 测试oldboy目录权限中x和w与r的配合,以及r和w与x的配合

    将文件的权限和用户及组调整为如下属性:

    [root@oldboyedu  ~]# whoami 
    root
    [root@oldboyedu  ~]# chmod 736 /oldboy/
    [root@oldboyedu  ~]# chown oldboy.incahome /oldboy/
    [root@oldboyedu  ~]# ls -ld /oldboy/
    drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:10 /oldboy/
    

    使用oldgir用户测试:

    [oldgirl@oldboyedu  /oldboy]$ whoami
    oldgirl
    [oldgirl@oldboyedu  /oldboy]$ ls -ld /oldboy/
    drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:10 /oldboy/
    [oldgirl@oldboyedu  /oldboy]$ ls /oldboy/
    ls: cannot open directory /oldboy/: Permission denied
    [oldgirl@oldboyedu  /oldboy]$ touch /oldboy/m.txt
    [oldgirl@oldboyedu  /oldboy]$ cd /oldboy/
    [oldgirl@oldboyedu  /oldboy]$ ls
    ls: cannot open directory .: Permission denied
    [oldgirl@oldboyedu  /oldboy]$ rm -f m.txt
    

    使用test用户测试:

    [test@oldboyedu  ~]$ whoami 
    test
    [test@oldboyedu  ~]$ ls -ld /oldboy/
    drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:21 /oldboy/
    [test@oldboyedu  ~]$ ls /oldboy/
    ls: cannot access /oldboy/2.txt: Permission denied
    ls: cannot access /oldboy/3.txt: Permission denied
    2.txt  3.txt
    [test@oldboyedu  ~]$ ls -l /oldboy/
    ls: cannot access /oldboy/2.txt: Permission denied
    ls: cannot access /oldboy/3.txt: Permission denied
    total 0
    -????????? ? ? ? ?            ? 2.txt
    -????????? ? ? ? ?            ? 3.txt
    [test@oldboyedu  ~]$ touch /oldboy/n.txt
    touch: cannot touch ‘/oldboy/n.txt’: Permission denied
    [test@oldboyedu  ~]$ rm -f /oldboy/3.txt 
    rm: cannot remove ‘/oldboy/3.txt’: Permission denied
    [test@oldboyedu  ~]$ cd /oldboy/
    -bash: cd: /oldboy/: Permission denied
    

    4 设置及更改文件和目录权限的命令: chmod

    参数

    • -R 递归设置,对目录下所有文件和子目录生效

    (1)用户或用户组的定义:

    • u代表属主用户
    • g代表属组
    • o代表其他用户
    • a或者不写,代表所有

    (2)权限定义字母

    • r代表读权限,用数字4表示
    • w代表写权限,用数字2表示
    • x代表执行权限,用数字1表示
    • -代表没有权限,用数字0表示

    (3)权限增减字符定义

    • +:添加权限
    • -:取消权限
    • =:取消其他所有权限,然后赋予给定的权限。

    5 修改文件属性的用户和组:chown

    chown 用户.用户组 文件  这里的点可以用:替换。
    chown 用户 文件
    chown .用户组 文件   ====chgrp 用户组 文件
    

    6 企业环境下文件和目录的安全核心知识

    • 禁止普通用户删除和创建文件
    • 防止用户修改文件内容
    • 严苛的安全措施

    安全权限临界点:
    1 文件不想被修改被执行:644

    [root@oldboyedu /oldboy]# touch oldboy.txt
    [root@oldboyedu /oldboy]# ls -l
    total 4
    -rw-r--r-- 1 root    root  0 Oct  7 23:21 oldboy.txt
    

    2 目录不想被修改(删除移动创建)被执行(进入):755

    [root@oldboyedu  ~]# mkdir test
    [root@oldboyedu  ~]# ls -ld test/
    drwxr-xr-x 2 root root 6 Mar 23 17:43 test/
    

    博客:写博客。。。服务器的博客目录和文件的权限,防止被恶意篡改。

    企业真实案例:网站文件被恶意修改了。。。。打开网站后有弹窗广告(不是你网站的)

    用户打开网站,报警。
    原因:权限设置不到位。chmod -R 777 目录 开发人员习惯
    解决方案:
    1、备份

    tar zcvf /opt/oldboy_$(date +%F).tar.gz ./oldboy/
    

    2、找到被修改的文件

    [root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'
    /oldboy/oldboy.txt:<script>ddddddddddddd</scripts>
    /oldboy/test.sh:<script>ddddddddddddd</scripts>
    

    3、批量删除

    [root@oldboyedu /]# find /oldboy -type f |xargs sed -i '/ddddddddddddd/d'
    [root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'
    

    4、找到文件被篡改来源,并优化调整。

    亡羊补牢。

    5、写总结 故障报告。

    7 默认权限掩码及设置命令:umask

    1 文件默认权限计算

    1)假设umask值为022(所有位为偶数):

        6 6 6      #<-->文件的起始权限值
        0 2 2 —    #<-->umaskd 值
    ----------------------
        6 4 4
    

    1)假设umask值为045(所有位为偶数):

        6 6 6      #<-->文件的起始权限值
        0 4 5 —    #<-->umaskd 值
    ----------------------
        6 2 1      #<-->计算出来的权限。由于umask的最后一位数字是奇数5,所以,在其他用户组位在加1
        0 0 1      #<-->umask对应的奇数位加1
    ----------------------
        6 2 2      #<-->真实文件权限
    

    2 目录默认权限计算(umask没有奇偶之分)

        7 7 7      #<-->目录的起始权限值
        0 2 2 —    #<-->umaskd 值
    ----------------------
        7 5 5 
    

    8 特殊权限位

    Linux系统特殊权限位知识
    9位基础权限

    还有3位特殊权限位

    • suid位:
      suid(setuid)位通过S字符标识,
      存在于基本权限的用户权限位的x权限对应的位置,
      如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识,
      suid的s对应的数字权限为4,完整权限用八进制数4000表示。

    • sgid位:
      sgid(setgid)位同样是通过S字符来标识,
      但是,sgid位存在于基本权限的用户组权限位的x权限对应的位置,
      如果用户组权限位对应的x权限位上有x权限,则sgid就用小写的s标识,
      suid的s对应的数字权限为2,完整的权限用八进制数2000表示。

    • sticky(粘滞位)
      sticky(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,
      如果其他用户位的x权限位上有x权限,
      sticky(粘滞)位通过小写的t标识,对应的数字权限是1,
      完整的权限用八进制数1000表示。

    1 suid相关
    "4", "2", "1",加和放在基础权限数字的前面。

    修改方法:

    [root@oldboyedu /oldboy]# chmod 7755 abc
    

    预测:-rwsr-sr-t

    [root@oldboyedu /oldboy]# chmod 7755 abc
    [root@oldboyedu /oldboy]# ls -l abc
    -rwsr-sr-t 1 root root 0 Oct  7 23:42 abc
    
    [root@oldboyedu /oldboy]# chmod 7644 abc
    [root@oldboyedu /oldboy]# ls -l abc
    -rwSr-Sr-T 1 root root 0 Oct  7 23:42 abc
    

    工作中有啥用?

    suid到底有什么作用
    简单地说,suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,拥有和root管理员一样的身份和权限(默认情况)。

    [oldgirl@oldboyedu /]$ ll -ld oldboy/
    dr-x-wxrw-. 2 oldboy incahome 6 Oct  7 22:15 oldboy/
    

    oldgirl属于incahome,增加一个用户属于incahome,是不是也和oldgirl有同样权限。

    oldboy 给一个新用户设置suid,这个新用户的权限就和oldboy一样。

    查看哪些命令默认被设置了suid

    [root@oldboyedu  ~]# find /usr/bin -type f -perm 4755|xargs ls -l
    -rwsr-xr-x. 1 root root 64328 Oct 31 00:33 /usr/bin/chage
    -rwsr-xr-x. 1 root root 57664 Nov 20 22:22 /usr/bin/crontab
    -rwsr-xr-x. 1 root root 32096 Oct 31 05:32 /usr/bin/fusermount
    -rwsr-xr-x. 1 root root 78272 Oct 31 00:33 /usr/bin/gpasswd
    -rwsr-xr-x. 1 root root 44320 Oct 31 06:48 /usr/bin/mount
    -rwsr-xr-x. 1 root root 41872 Oct 31 00:33 /usr/bin/newgrp
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    -rwsr-xr-x. 1 root root 23656 Oct 31 06:26 /usr/bin/pkexec
    -rwsr-xr-x. 1 root root 32208 Oct 31 06:48 /usr/bin/su
    -rwsr-xr-x. 1 root root 32048 Oct 31 06:48 /usr/bin/umount
    

    suid核心知识小结

    1):suid功能是针对二进制命令或程序的,不能用在Shell等类似脚本文件上。
    2):用户对应的前三位权限的x为上,如果有s(S)就表示具备suid权限。
    3):suid的作用就是让普通用户可以在执行某个设置了suid的命令或程序时,拥有和属主(一般是root)一样的身份和权限。
    4):二进制命令程序需要有可执行权限x配合才行。
    5):suid对应的身份和权限仅在程序命令执行过程中有效。
    6):suid是一把双刃剑,是一个比较危险的功能,对系统安全有一定的威胁,企业里用户授权可以使用sudo等替代suid
    7):在进行安全优化时,系统默认设置的suid权限要取消掉。


    2 sgid相关
    作用之一:

    sgid的作用就是让普通用户可以在执行某个设置了sgid位的命令时,
    拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。

    locate搜索内容,默认从updatedb对应的数据库中查找
    updatedb更新locate查找内容对应的数据库。

    [root@oldboyedu ~]# updatedb
    [root@oldboyedu ~]#  ls -l /var/lib/mlocate/mlocate.db
    -rw-r----- 1 root slocate 1977042 Oct  8 00:47 /var/lib/mlocate/mlocate.db
    [root@oldboyedu ~]# file /var/lib/mlocate/mlocate.db
    /var/lib/mlocate/mlocate.db: data
    

    sgid基于目录的作用:
    让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限。


    sgid核心知识小结

    1)与suid不同的是,sgid既可以针对文件,也可以针对目录设置;
    2)sgid的权限是针对用户组权限位的。

    • 对应文件来说,sgid的功能如下:
      1)sgid仅对二进制命令及程序有效;
      2)二进制命令或程序,也需要有可执行权限x配合;
      3)执行命令的任意用户可以获得该命令执行期间所属组的身份和权限。
    • 对于目录(继承目录所属的组)来说,sgid的功能如下:
      1)linux里默认情况所有用户创建文件,默认用户和组都是自身。
      2)sgid可以让用户在此目录下创建的文件和目录具有和此目录相同的用户组设置

    相关文章

      网友评论

          本文标题:作业-第04周--课堂-Day16-Linux系统权限知识及应用

          本文链接:https://www.haomeiwen.com/subject/ffzrvqtx.html