zoukankan      html  css  js  c++  java
  • 《Linux就该这么学》培训笔记_ch05_用户身份与文件权限

    《Linux就该这么学》培训笔记_ch05_用户身份与文件权限

    文章最后会post上书本的笔记照片。

    文章主要内容

    用户身份与能力

    在Linux系统中,用户的身份号码即UID(User IDentification)具有唯一性,因此可通过用户的UID值来判断用户身份。

    RHEL7系统的用户身份:

    • 管理员UID为0:系统的管理员用户。(Linux系统的管理员之所以是root,是因为该用户的UID为0,与用户名叫什么无关。)
    • 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。这些用户默认的Shell解释器都是sbin/nologin代表这些用户不能登录到系统中
    • 普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。

    管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)。

    用户组:通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。即可以针对组而非具体的用户来设置权限。在Linux系统中创建用户时,将自动创建一个与该用户名同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组一个用户只有一个基本用户组,但是可以有多个扩展用户组

    useradd命令:用于创建新的用户,格式:useradd [选项] 用户名。创建用户账户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。默认设置可以用以下useradd命令参数自行修改。

    参数 作用
    -d 指定用户的家目录(默认为/home/username)
    -e 账户的到期时间,格式为YYYY-MM-DD.
    -u 指定该用户的默认UID
    -g 指定一个初始的用户基本组(必须已存在)
    -G 指定一个或多个扩展用户组
    -N 不创建与用户同名的基本用户组
    -s 指定该用户的默认Shell解释器
    1 useradd -d /home/SB -u 2222 -s /sbin/nologin liwh    #创建用户liwh,指定其家目录路径UID以及Shell解释器2 id liwh                                              #查看用户uid,gid和用户组信息。输出结果:uid=2222(liwh) gid=2222(liwh) groups=2222(liwh)

     groupadd命令:用于创建用户组,格式:groupadd [选项] 组名。

    1 groupadd SB    #创建用户组SB。(为了能够更加高效地指派系统中各个用户的权限,在工作中常常会把一群用户加入到同一个组里面,这样便可以针对一类用户统一安排权限。)

    usermod命令:用于修改用户的属性,格式:usermod [选项] 用户名。

    修改用户信息,可以直接修改/etc/passwd文件,也可以用usermod修改。不过修改用户名不建议用命令,直接修改/etc/passwd。

    参数 作用
    -c 填写用户账户的备注信息
    -d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
    -e 账户的到期时间,格式为YYYY-MM-DD
    -g 变更所属用户组
    -G 变更扩展用户组
    -L 锁定用户禁止其登录系统
    -U 解锁用户,允许其登录系统
    -s 变更默认终端
    -u 修改用户的UID
    1 id liwh                 #承接上面,输出结果:uid=2222(liwh) gid=2222(liwh) groups=2222(liwh)
    2 usermod -G SB liwh      #把liwh加入到SB用户组3 usermod -u 7777 liwh    #修改liwh的uid为7777
    4 id liwh                 #修改过后的liwh用户信息:uid=7777(liwh) gid=2222(liwh) groups=2222(liwh),2223(SB)

    passwd命令:用于修改用户密码、过期时间、认证信息等,格式:passwd [选项] [用户名]。

    关于passwd命令:

    • 普通用户只能使用passwd命令修改自身的系统密码;
    • root管理员有权限修改自己和其他所有人的密码,且不需要验证旧密码。root管理员完全拥有所有用户的管理权限。
    参数 作用
    -l 锁定用户,禁止其登录
    -u 解除锁定,允许用户登录
    --stdin 允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username
    -d 使该用户可用空密码登录系统
    -e 强制用户在下次登录时修改密码
    -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
    1 echo "123456" | passwd --stdin liwh    #修改liwh密码为123456
    2 passwd -l liwh                         #锁定liwh,禁止其登录
    3 passwd -S liwh                         #显示用户密码是否被锁定,以及密码采用的加密算法。因为liwh已被锁定,所以输出结果:...(Password locked.)
    4 passwd -u liwh                         #解除锁定liwh,允许其登录
    5 passwd -S liwh                         #再查查看密码是否已经解锁。因为liwh已解锁,所以输出结果:...(Password set,SHA512 crypt.)

     userdel命令:用于删除用户。格式:userdel [选项] 用户名。在执行删除操作时,该用户的家目录默认会保留下来,可以用-r参数在删除用户同时把家目录删除。

    常用参数:

    • -f:强制删除用户
    • -r:同时删除用户及用户家目录
    1 userdel -rf liwh    #强制删除用户liwh,同时删除其家目录

    文件权限与归属

    文件类型:

    •  -:普通文件。(最常见)
    • d:目录文件。(最常见)
    • l:链接文件。
    • b:块设备文件。(鼠标键盘)
    • c:字符设备文件。
    • p:管道文件。

    对于文件和目录的权限理解:

      文件 目录
    可读(r) 能够读取文件的实际内容 能够读取目录内的文件列表
    可写(w) 能够编辑、增删改文件的实际内容 能够在目录内增删以及重命名文件
    可执行(x) 能够运行脚本程序 能够进入该目录

    文件权限:可读(r)、可写(w)、可执行(x),也可以分别用数字4、2、1表示。

     

    权限的字符表示和数字表示转换实例:

    • rwxrw-r-- --> 421420400 --> 764
    • rw--w--wx --> 623
    • --xr-x-wx --> 153
    • rwx-wx--x --> 731

    下图是ls -l命令查到的文件的详细信息及其重要项的意义。

    文件的特殊权限

    SUID:一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。如果赋予了SUID权限,则所有者中的可执行权限位会从x/-变为s/S(原先权限位上有/没有x执行权限,在被赋予SUID权限后将变成s/S)。

    系统自带实例:ls -l命令查看/etc/shadow文件和/bin/passwd命令的详细信息。

    • /etc/shadow文件是保存用户密码的文件,默认权限为000,除了管理员外,其他所有用户都没有查看或编辑该文件的权限;
    • /bin/passwd命令是修改密码命令,其所有者的执行权限位为s,说明被赋予了suid权限,使得普通用户在执行passwd命令时能临时获取所有者(root)权限,从而通过命令修改/etc/shadow文件;

    SGID:如果赋予了SUID权限,则所属组中的可执行权限位会从x/-变为s/S

    1. 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);-->用的不多,因为设计原理和目的跟SUID差不多,所以基本上干脆用SUID。
    2. 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置);-->常用。在目录设置SGID,则用户在该目录创建文件,文件的默认的用户组将由用户自己的基本用户组变为目录的所属组,使得同组内的其他用户都能访问该文件

    SBIT:确保用户只能删除自己的文件,而不能删除其他用户的文件。如果赋予了SBIT权限,则其他用户中的可执行权限位会从x/-变为t/T

    chmod命令:用于设置文件或目录的权限。格式:chmod [参数] 权限 文件或目录名称。

    常用参数:

    • a:所有人
    • u:所有者
    • g:所有组
    • o:其他用户
    • r:可读权限
    • w:可写权限
    • x:可执行权限
    • s:suid或sgid权限(一般配合u或g参数使用,如果配合a参数,则代表同时设置suid和sgid)
    • t:sbit权限(一般配合o参数使用,配合u或g参数使用无任何效果,配合a参数使用效果等同于配合o参数)
    • +:添加权限
    • -:移除权限
    1 touch test          #创建文件,该文件初始权限rw-r--r--
    2 chmod 3760 test     #数字法赋予文件权限,第一个数字代表特殊权限3=-st(021),普通权限760=rwxrw----,结合起来就是rwxrwS--T
    3 chmod 654 test      #数字法赋予文件权限,654=0654,没有赋予特殊权限,654=rw-r-xr--
    4 chmod u+s test      #在上述基础之上添加suid,文件权限:rwSr-xr--
    5 chmod g+s test      #在上述基础之上添加sgid,文件权限:rwSr-sr--
    6 chmod o+t test      #在上述基础之上添加sbit,文件权限:rwSr-sr-T
    7 chmod a-s test      #在上述基础之上移除suid和sgid,文件权限:rw-r--r-T
    8 chmod a+rwx test    #在上述基础之上给文件赋予所有人都有读写执行的权限,文件权限:rwxrwxrwt

     chown命令:用于设置文件或目录的所有者和所属组。格式:chown [参数] 所有者:所属组 文件或目录名称。

    1 chown root:SB test    #设置test文件的所有者为root,所属组为SB

    文件的隐藏属性(RHCSA)

    隐藏权限不能直接被用户发觉,因为隐藏权限用ls -l命令是看不出来的。

    chattr命令:用于设置文件的隐藏权限。格式:chattr [参数] 文件。添加隐藏权限用“+参数”,移除隐藏权限用“-参数”。

    参数 作用
    i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
    a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)-->为/var/log/message设置,防止黑客修改日志
    S 文件内容在变更后立即同步到硬盘(sync)
    s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
    A 不再修改这个文件或目录的最后访问时间(atime)
    b 不再修改文件或目录的存取时间
    D 检查压缩文件中的错误
    d 使用dump命令备份时忽略本文件/目录
    c 默认将文件或目录进行压缩
    u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
    t 让文件系统支持尾部合并(tail-merging)
    x 可以直接访问压缩文件中的内容

     lsattr命令:用于显示文件的隐藏权限。格式:lsattr [参数] 文件。

    1 touh fuck         #创建文件fuck
    2 chattr +i fuck    #为文件fuck添加隐藏权限无法修改文件(包括删除)
    3 rm -rf fuck       #强行删除文件fuck,发现即使是root用户,拥有足够权限,也删除不了,是因为隐藏权限的关系
    4 lsattr fuck       #查看文件的隐藏权限只有lsattr命令能查出文件的隐藏权限
    5 chattr -i fuck    #针对查出来的隐藏权限,把隐藏权限移除
    6 rm -rf fuck       #现在删除文件就能成功

    文件访问控制列表

    文件的访问控制列表(ACL):针对指定用户或用户组设置文件或目录的操作权限。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。

    若针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

    setfacl命令:用于管理文件的ACL规则,格式:setfacl [参数] 文件名称。

    常用参数:

    • -R:递归参数,针对目录文件时使用;
    • -m:针对普通文件时使用;
    • -b:删除文件或目录的ACL;

    getfacl命令:用于显示文件上设置的ACL信息,格式:getfacl 文件名称。

    1 setfacl -Rm u:linuxprobe:rwx /root    #为/root目录设置ACL,允许用户linuxprobe进行读写执行操作
    2 ls -ld /root                          #查看/root目录详细信息,会发现平时文件权限的最后一个点(.)变成加号(+),说明该文件或目录设置了ACL
    3 su - linuxprobe                       #完整切换到linuxprobe用户
    4 cat /root/anaconda-ks.cfg             #/root是root用户的家目录,只有root能访问,但经过设置ACL后,linuxprobe也能访问/root的内容
    5 exit                                  #退出linuxprobe登录
    6 getfacl /root                         #查看/root的ACL详细信息
    7 setfacl -b /root                      #删除文件/目录的ACL

    su命令与sudo服务

     Linux系统为了安全性考虑,使得许多系统命令和服务只能被root管理员来使用,但是这让普通用户受到了更多的权限束缚,从而导致无法顺利完成特定的工作任务。

    su命令:可以在当前用户不退出登录的情况下,顺畅地切换到其他用户。从root切换到普通户不用密码验证,但从普通用户切换root需要密码验证,因为这是必要的安全检查。

    1 su root            #切换到root用户(需要密码验证)
    2 su - linuxprobe    #减号(-)表示完全切换到新的用户,环境信息也变更为新用户的相应信息

    通过切换用户命令使得普通用户可以切换到root用户来完成相应工作(前提是普通用户知道root密码),但这种方式很容易暴露root密码,增大被黑客获取的几率,这种做法不安全。

    sudo命令:用于把特定命令的执行权限赋予给指定用户。通过合理配置sudo服务,可以保证普通用户能够完成特定的工作,也可以避免泄露root管理员密码。

    参数 作用
    -h 列出帮助信息
    -l 列出当前用户可执行的命令
    -u 用户名或UID值 以指定的用户身份执行命令
    -k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
    -b 在后台执行指定的命令
    -p 更改询问密码的提示语

    sudo命令具有以下功能:

    • 限制用户执行指定的命令:
    • 记录用户执行的每一条命令;
    • 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
    • 验证密码的后5分钟内(默认值)无须再让用户再次验证密码

    visudo命令:用于配置用户权限。使用该命令配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错只有root管理员才能用visudo命令

    sudo命令的配置文件中。配置用户权限的格式:用户 允许使用的主机=(以什么身份) 允许执行命令的列表 。其中命令列表中的命令要用绝对路径。不知道具体命令的绝对路径可以用whereis命令查看。

    1 visudo
    2 98 root ALL=(ALL) ALL                           #98行是已有的配置信息,作一个参考,在99行开始编辑linuxprobe用户的权限信息
    3 99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff  #NOPASSWD参数使得用户执行sudo命令时无需密码验证
    4 su - linuxprobe #完整切换到linuxprobe
    5 poweroff #正常执行poweroff命令,普通用户没有权限执行poweroff命令
    6 sudo poweroff #通过sudo执行poweroff,可以执行

    书本笔记

    -----/*看过许多光怪陆离的风景,才知俗世中最可畏是人心*/-----
  • 相关阅读:
    转载:QTableView中嵌入可视化组件
    pyqt声音输入
    pyqt二进制和图片的转换
    LeetCode(92):反转链表 II
    LeetCode(91):解码方法
    LeetCode(90):子集 II
    LeetCode(89):格雷编码
    LeetCode(88):合并两个有序数组
    LeetCode(87):扰乱字符串
    LeetCode(86):分隔链表
  • 原文地址:https://www.cnblogs.com/kaminwu/p/10893228.html
Copyright © 2011-2022 走看看