Linux就该这么学--第五章

  • 用户身份和能力

    • UID:用户的身份号码
    ◇ 0 管理员,系统的管理用户root
    ◇ 1-999 系统用户,默认的服务会有独立的系统用户负责运行,防止黑客提权
    ◇ >1000 普通用户



    • 命令补充
    ◇ useradd [选项] [用户名]:创建新用户
    ▪ 参数:
    - -d 指定用户的家目录,默认为/home/用户名
    - -e 账户的到期时间,格式为YYYY-MM-DD
    - -u 指定该用户的UID
    - -g 指定一个初始的用户基本组(必须已经存在)
    - -s 指定该用户的默认shell解释器,/sbin/nologin代表该用户不能登录到系统中
    - -N 不创建与用户同名的基本用户组
    - -G 指定一个或者多个扩展用户组

    ◇ group [选项] [群组名]:创建用户组

    ◇ usermod [选项] [用户名]:修改用户的属性
    ▪ 参数:
    - -c 填写用户账户的备注信息
    - -d -m 重新指定用户的家目录并自动把旧的数据转移过去
    - -e 账户的到期时间
    - -g 变更所属用户组
    - -G 变更扩展用户组
    - -L 锁定用户禁止其登录系统
    - -U 解锁用户,允许其登录系统
    - -s 变更默认终端
    - -u 修改用户的UID

    ◇ passwd [选项] [用户名]:修改用户密码、过期信息、认证信息
    ▪ 参数:
    - -l 锁定用户,禁止登录
    - -u 解锁用户,允许登录
    - --stdin 允许通过标准输入修改密码
    - -d 用户可以无密码登录
    - -e 强制用户在下次登录时修改密码
    - -S 显示用户的密码是否锁定,以及密码所采用的加密算法名称
    - -x 设置密码的有效期
    - -i 过期后停止用户账号

    ◇ userdel [选项] [用户名]:删除用户
    ▪ 参数:
    - -f 强制删除用户
    - -r 同时删除用户以及家目录

     

  • 文件权限与归属


    • 区分不同文件类型的字符
    ◇ - 普通文件
    ◇ d 目录文件
    ◇ l 链接文件
    ◇ b 块设备文件
    ◇ c 字符文件
    ◇ p 管道文件

    • 文件权限的字符与数字表示


    • 文件特殊权限
    ◇ 4为SUID=u+s,2为SGID=g+s,1为SBIT=o+t,一般使用u+s等字符进行权限附加,数字方式可能不生效,如果标志位出现大写的字母S、T(没有执行权限)等,相当于特殊权限未附加上,需要排除
    下面设置指令中的xxx在实际使用时需要换成权限数字
    ◇ SUID:对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
    如果对vim设置此权限后,可以编辑shadow等原先没有权限的文件,比较危险
    ▪ 前提条件:
    - 具有可执行权限的二进制程序
    - 所有者必须对欲设置SUID的文件具备可执行权限
    - 命令执行过程中,其他用户获取所有者的身份(灵魂附体)
    - SUID具有时间限制,即完成该程序执行后就消失
    ▪ 设置指令:
    - 设置
    → chmod 4xxx 文件
    → chmod u+s 文件
    - 取消
    → chmod 0xxx 文件
    → chmod xxx 文件
    → chmod u-s 文件

    ◇ SGID:让执行者临时拥有属主的权限(对拥有执行权限的二进制程序进行设置);在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
    其实,SGID基本与SUID相同,无非也就是一个设置所有者的权限,SGID为设置所属组的特殊权限,区别点在于:SGID也可以设置目录的相关SGID权限。
    ▪ 针对文件:
    - 可执行的二进制文件
    - 命令执行者(即所属组)对该文件具有执行权限
    - 执行时,执行者被所属组灵魂附体
    - 权限只在执行过程中有效
    ▪ 针对目录:
    - 普通用户对目录具备r和x权限,才可以进入到该目录
    - 普通用户在此目录中的有效组会变成目录的所属组
    - 如果普通用户对该目录具备w权限,新建文件的所属组为该目录的所属组
    ▪ 设置指令:
    - 设置
    → chmod 4xxx 文件/目录
    → chmod g+s 文件/目录
    - 取消
    → chmod 0xxx 文件/目录
    → chmod xxx 文件/目录
    → chmod g-s 文件/目录

    ◇ SBIT:粘滞位(保护位),目录中的文件只能被文件的所有者执行删除操作
    ▪ 说明
    - 只对目录有效
    - 普通用户对该目录有w和x权限
    - 若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;
    但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录
    ▪ 设置指令
    - 设置
    → chmod 1xxx 目录
    → chmod o+t 目录
    - 取消
    → chmod 0xxx 目录
    → chmod xxx 目录
    → chmod o-t 目录

    ◇ 总结:
    ▪ 作用范围和功能:
    - SUID作用于文件(二进制程序),此用户将继承此程序的所有者权限
    - SGID作用于文件(二进制程序)和目录。对于文件,此用户将继承此程序的所属组权限;对于目录,此文件夹下所有用户新建文件都自动继承此目录的用户组
    - SBIT作用于目录,设定后,目录中的用户只能删除、移动或改名自己的文件或目录

    ▪ 权限设置和注意事项
    - 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
    chmod u+s 添加SUID
    chmod g+s 添加SGID
    chmod +s 同时添加SUID和SGID
    chmod -s 同时删除SUID和SGID
    chmod o+t 添加SBIT
    chmod +t 添加SBIT
    chmod o-t 删除SBIT
    - 数字权限表示法添加/删除时
    → 数字权限法可以同时删除文件的所有三种超级权限
    chmod 0755 文件
    chmod 755 文件
    → 数字权限法只能删除目录的SBIT,不能删除目录的SUID和SGID
    → 数字权限法每次只能设置一种超级权限.添加权限时,
    对于文件,会删除掉原有的其他超级权限;
    对于目录,添加SUID或SGID时,SBIT会被删除
    - 所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限
    - 几个权限位映射参考
    → SUID: user, 占据属主的执行权限位;
    s: 属主拥有x权限
    S:属主没有x权限
    → SGID: group, 占据group的执行权限位;
    s: group拥有x权限
    S:group没有x权限
    → SBIT: other, 占据ohter的执行权限位
    t: other拥有x权限
    T:other没有x权限


    • 补充命令:
    ◇ chmod [参数] [权限] [文件或目录名称]:设置文件或者目录的权限(-R 对目录进行递归操作)
    ◇ chown [参数(-Rf)] [所有者:所属组] [文件或目录名称]:设置文件或目录的所有者和所属组(-R 对目录进行递归操作)

  •  

    文件的隐藏属性和控制列表

    • chattr [参数] [文件]:设置文件的隐藏权限,给文件添加某项隐藏功能,则在chattr后加“+参数”,删除隐藏功能为“-参数”
    ◇ 参数
    ▪ i 无法对文件进行修改;如果对目录设置此权限,则仅能修改其中的子文件内容而不能新建或删除文件
    ▪ a 仅允许追加内容,无法覆盖/删除内容
    ▪ S 文件内容在变更后立即同步到硬盘(sync)
    ▪ s 彻底从硬盘中删除,不可恢复(用0填充原文件所在的硬盘区域)
    ▪ A 不再修改文件或目录的最后访问时间(atime)
    ▪ b 不再修改文件或目录的存取时间
    ▪ D 检查压缩文件中的错误
    ▪ d 使用dump命令备份时忽略本文件或目录
    ▪ c 默认将文件或目录进行压缩
    ▪ u 当删除文件后依然保留其在硬盘中的数据,方便日后恢复
    ▪ t 让文件系统支持尾部合并(tail-merging)
    ▪ X 可以直接访问压缩文件中的内容

    • lsattr [参数] [文件]:查看文件的隐藏权限

    • setfacl [参数] [文件名称]:管理文件的Acl规则。文件的ACL提供的是在所有者、所属组、其他人的读写执行权限之外的特殊权限控制,setfcal可以针对单一用户或者用户组、单一文件或目录进行读写执行权限的控制。
    ◇ 参数:
    ▪ -R 针对目录时使用(-Rm)【setfacl -Rm u:linuxprobe:rwx /root】
    ▪ -m 针对普通文件时使用
    ▪ -b 删除所有的的ACL设定参数
    ▪ -x 删除后续的acl 参数,不可与-m 合用
    ▪ -d 只对目录有效,在该目录新建的文件会引用此预设值,即为目录添加默认的acl权限,此目录下创建目录和文件都会继承此权限信息
    ◇ 实例:
    ▪ 针对用户的设定方式【 u:用户名:权限】:
    - setfacl -m u:user:rwx testfile 设定user对testfile有rwx权限
    - setfacl -R -m u:user:rwx testdirectory 设定user对testdirectory目录下所有文件有RWX权限
    - setfacl -x u:user testdirectory/ 掉user对testdirectory的x权限
    - setfacl -b 去掉所有acl权限
    - setfacl -d -m u:user:rwx testdirectory/ 为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
    ▪ 针对群组的权限设定【g:群组名:权限】:
    - setfacl -m g:mygroup1:rx acl_test1

    • getfacl [文件/目录]:显示文件或目录上设置的ACL信息

    • id :查看当前登录用户的uid、gid、groups

    • su - 用户名:切换用户,加-代表完全切换的意思,即把环境变量信息已变更为新用户的响应信息

    • sudo [参数] [命令]:给普通用户提供额外的权限来完成root管理员才能完成的任务,验证密码后5分钟之内无需再次验证。
    ◇ 参数:
    ▪ -h 列出帮助信息
    ▪ -l 列出当前用户可执行的命令
    ▪ -u 用户名或者UID值 以指定的用户身份执行命令
    ▪ -k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
    ▪ -b 在后台执行指定的指令
    ▪ -p 更改询问密码的提示语

    • visudo:一次性解决使用sudo命令之后需要输入用户密码的痛点
    ◇ 只有root用户才能使用的命令
    ◇ 在root ALL=(ALL) ALL 下一行添加一行信息【谁可以使用 允许使用的主机=(以谁的身份) 可执行的命令列表】,例如linuxprobe ALL=(ALL) ALL
    如果不想每次都输入密码,则变为linuxprobe ALL=(ALL) NOPASSWD:ALL
    ◇ 使用sodo -l查看可以执行的命令
    ◇ 可执行的命令列表ALL不符合安全要求,如果想要让用户使用某一个命令,则将ALL替换成相应的路径,使用 whereis+命令 查看命令的安装路径(显示的第一个路径)
    例如: linuxprobe ALL=(ALL) /usr/bin/cat,让linuxprobe能够使用cat指令查看一些只能root才能查看的文件,使用时,需要在cat前加sudo

     

     

     

posted @ 2019-03-17 21:47  飞琼君  阅读(239)  评论(0编辑  收藏  举报