第六章 Linux的用户,组和权限

用户,组和权限

介绍安全3A

资源分派

  • Authentication:认证
  • Authorization:授权
  • Accouting|Audition:审计

用户user

  • 令牌token,identity

  • Linux用户:username/UID

  • 管理员:root, 0

  • 普通用户:1-60000 自动分配

    • 系统用户 1-499,1-999(CentOS7)

      • 对守护进程获取资源进行权限分配
    • 登录用户:500+,1000+(CentOS7)

      • 交互式登录

组group

  • Linux组:Groupname/GID
  • 管理员组:root,0
  • 普通组:
    • 系统组:1-499,1-999(CentOS7)
    • 普通组:500+, 1000+(CentOS7)

安全上下文

Linux安全上下文

  • 运行中的程序:进程(process)

  • 以进程发起者的身份运行:

    • root:/bin/cat
    • mage:/bin/cat
  • 进程所能够访问资源的权限取决于进程的运行者的身份

组的类别:

Linux组的类别

  • 用户的主要组(primary group)
  • 用户必须属于一个且只有一个主组
  • 组名同用户名,且仅包含一个用户,私有组
  • 用户的附加组(supplementary group)
  • 一个用户可以属于零个或多个辅助组

用户和组相关文件

  • Linux用户和组的主要配置文件:
    • /etc/passwd:用户及其属性信息(用户名:密码:用户ID:组ID:用户全名:主目录:登录shell)
    • /etc/group:组及其属性信息(组名:密码:组ID:成员)
    • /etc/shadow:用户相关口令
    • /etc/gshadow:组相关口令

用户和组管理命令

用户管理命令

  • useradd
    • useradd [options] LOGIN
    • -u UID
    • -o 配合-u选项,不检查UID的唯一性
    • -g GID 指明用户所属基本组,可为组名,也可以GID
    • -c “COMMENT” 用户的注释信息
    • -d HOME_DIR 以指定的路径(不存在)为家目录
    • -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
    • -G GROUP[,GROUP2,…] 为用户指明附加组,组须事先存在
    • -N 不创建私用组做主组,使用users组做主组
    • -r 创建系统用户CentOS 6 : ID<500,CentOS 7 : ID < 1000
    • -m 创建家目录,用于系统用户
    • -M 不创建家目录,用于非系统用户
  • usermod
    • -u UID:新UID
    • -g GID:新主组
    • -G GROUP1[,GROUP2,…]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
      • 例: usermod -G groupname username
    • -s SHELL:新的默认SHELL
    • -c ‘COMMENT’ :新的注释信息
    • -d HOME:新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
    • -l login_name:新的名字
    • -L Lock指定用户,在/etc/shadow 密码栏的增加!
    • -U:unlock指定用户,将/etc/shadow 密码栏的!去掉
    • -e YYYY-MM-DD:知名用户账号过期日期
    • -f INACTIVE:设定非活动期限
    • -a 追加
  • userdel
    • userdel wang:删除用户,保留数据
    • userdel -r wang:删除用户和该用户的数据,包括邮箱。

组账号维护命令

  • groupadd
  • groupmod
  • groupdel

新建用户的相关文件和命令

  • /etc/default/useradd:创建用户的默认值
  • /etc/skel/* ::创建用户生成家目录的模板
  • /etc/login.defs
  • newusers passwd:(创建passwd格式一样的文件,将需要复制的账号信息复制到文件中)格式文件 批量创建用户
  • chpasswd: 批量修改用户口令

切换用户或以其他用户身份执行命令

  • su [options…] [-] [user [args…]]

  • 切换用户的方式:

    • su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
    • su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
  • root su 至其他用户无需密码;非root用户切换时需要密码

  • 换个身份执行命令:

    • su [-] UserName -c ‘COMMAND’
  • 选项:-l --login

    • su -l UserName 相当于su -UserName

设置密码

  • passwd [OPTIONS] UserName:修改指定用户的密码
  • 常用选项
    • -d:删除指定用户密码
    • -l:锁定指定用户
    • -u:解锁指定用户
    • -e:强制用户下次登陆修改密码
    • -f:强制操作
    • -n mindays:指定最短使用期限
    • -x maxdays:指定最大使用期限
    • -w warndays:提前多少天开始警告
    • -i inactivedays:非活动期限
    • –stdin:从标准输入接收用户密码
      • 示例:echo “PASSWORD” | passwd --stdin USERNAME

修改用户密码策略

  • chage [option]… LOGIN

    • -d LAST_DAY
    • -E --expiredate EXPIRE_DATE
    • -I --inactive INACTIVE
    • -m --mindays MIN_DAYS
    • -M --maxdays MAX_DAYS
    • -W --warndays WARN_DAYS
    • -l :显示密码策略
  • 示例:

    • chage -d 0 tom 下一次登录强制重设密码
    • chage -m 0 -M 42 -W 14 -I 7 tom
    • chage -E 2016-09-10 tom

用户相关的其他命令

  • chfn 指定个人信息
  • chsh 指定shell
  • finger

更改组密码

  • 组密码:gpasswd

  • gpasswd [OPTION] GROUP

    • -a user 将user添加至指定组中
    • -d user 从指定组中移除用户user
    • -A user1,user2,…设置有管理权限的用户列表
  • newgrp命令:临时切换主组

    • 如果用户本不属于此组,则需要组密码

更改和查看组成员

  • groupmems [options] [action]

  • options:

    • -g, --group groupname 更改为指定组(只有root)
  • actions:

    • -a,–add username 指定用户加入组
    • -d, --delete username 从组中删除用户
    • -p,–purge 从组中清除所有列表
    • -l,–list 显示组成员列表
  • groups [OPTION].[USERNAME]… 查看用户所属组列表

理解并设置文件权限

第六章 Linux的用户,组和权限

文件权限

第六章 Linux的用户,组和权限

  • 文件的权限主要针对三类对象进行定义

    • owner 属主,u
    • group 属组,g
    • other 其他,o
  • 每个文件针对每类访问者都定义了三种权限

    • r Readable:读
    • w Writeable:写
    • x excutable:执行

修改文件的属主和属组

  • 修改文件属主:chown

    • chown [OPTION]…[OWNER][:[GROUP]] FILE...
    • 用法说明:
    • OWNER
    • OWNER:GROUP
    • :GROUP,用冒号,也可用.替换
    • -R:递归
    • chown [OPTION]… --reference=RFILE FILE…
  • 修改文件的属组:chgrp

    • chgrp [OPTION]… GROUP FILE…
    • chgrp [OPTION]… --reference=RFILE FILE…
    • -R递归

chown username filename:修改文件所属主

chgrp groupname filename:修改文件所属组

修改文件权限

  • chmod [OPTION] … OCTAL-MODE FILE
    • -R:递归修改权限
  • chmod [OPTION]…MODE[,MODE]…FILE…
    • MODE:
      • 修改一类用户的所有权限
        • u= g= o= ug= a= u=,g= :(u(用户属主),g(所属组),o(其它用户),0ug(用户和所属组),a(all所有))
      • 修改一类用户某位或某些位权限
        • u+ u- g+ g- o+ o- a+ a- + -
  • chmod [OPTION]… --reference=RFILE FILE…
    • 参考文件的权限,将FILE的修改为同RFILE
模式法:
  • chmod who opt per file
  • who:u(所属者),g(所属组),o(其他人),a(所有人)
  • opt:+(加权限),-(减权限),=(赋值权限)
  • per:r,w,x
  • 例如:
    • chmod u+x fileName :给fileName的所属组加上执行权限
数字法
  • 有权限写1,没权限写0
  • r:4,w:2,​x:​1
  • 有奇数一定有执行权限
  • 例如:
    • chmod 777 fileName : 给fileName的所属主和所属组和其它用户都加满权限

目录的权限

读(read):可以列出文件名

执行(excutable):可以进入目录,可以访问目录中文件内容

写(write):配合x权限创建和删除文件

默认权限

特殊权限

  • SUID,SGID,Sticky
  • 三种常用权限:r,w,x user,group, other
  • 安全上下文
  • 前提:进程有属主和属组;文件有属主和属组
    • 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
    • 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属组
    • 进程的访问文件时的权限,取决于进程的发起者
      • 进程的发起者,同文件的属主:则应用文件属主权限
      • 进程的发起者,属于文件属组;则应用文件属组权限
      • 应用文件“其它”权限

SUID:

  • 权限 4

  • 作用于可执行的二进制的程序

  • 功能:用户执行此程序时,将继承此程序所有者的权限

SGID:

  • 权限 2
  • 作用于可执行的二进制的程序

  • 功能:用户执行此程序时,将继承此程序所有者的权限

  • 作用在文件夹上,将来新建的文件将自动继承此目录的所属组

Sticky:

  • 权限 1

  • 作用于目录

  • 功能:只有删除自己的文件

ACL 访问控制列表

  • ACL:Access Control List,实现灵活的权限管理

  • 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

  • CentOS7 默认创建的xfs和ext4文件系统具有ACL功能

  • CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

    • tune2fs -o acl /dev/sdb1
    • mount -o acl /dev/sdb1 /mnt/test
  • ACL生效顺序:所有者,自定义用户,自定义组,其它人

  • setfacl -m u:wang:0 fileName :对于fileName文件wang不能读,不能写,不能执行

  • setfacl -m u:mage:rw fileName :对于fileName文件,mage有读写权限

  • setfacl -m g:users:rw fileNam:对于fileName文件,users的组的所有用户都有读写权限

  • getfacl fileName : 查看fileName的用户对应的权限

  • setfacl -b fileName:清除fileName的acl权限

  • 备份和恢复

  • 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上 -p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

    • getfacl -R /tmp/dir1 > acl.txt
    • setfacl -R -b /tmp/dir1
    • setfacl -R --set-fli=acl.txt /temp/dir
    • setfacl --restore acl.txt
    • getfacl -R /tmp/dir1

设定文件特定属性

  • chattr +i fileName:fileName不能删除,改名,更改
  • chattr -i fileName :删除fileName权限i
  • chattr +a fileName:只能追加fileName内容
  • chattr -a fileName:去掉追加fileName内容的权限
  • lsattr fileName : 显示fileName特定属性

新建文件和目录的默认权限

  • umask值可以用来保留在创建文件权限

    • 新建文件的默认权限:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
    • 新建目录的默认权限:777-umask
  • 功能:将777 | 666 中对应的权限去掉,得出默认权限

  • 非特权用户umask是002

  • root的umask是 022

  • umask:查看

  • umask number: 设定umask 值为number

    • 示例:umask 002
    • umask u=rw,g=r,o=
  • umask -S 模式方式显示

  • umask -p 输出可被调用

  • 全局设置:/etc/bashrc 用户设置:~/.bashrc

密码加密

  • 加密机制:

    • 加密:明文 – > 密文
    • 解密:密文–> 明文
  • 单向加密:哈希算法,原文不同,密文必不同

    • 相同算法定长输出,获得密文不可逆推出原始数据
    • 雪崩效应:初始条件的微小改变,引起结果的巨大改变
    • md5:message digest,128bits
    • sha1:secure hash algorithm, 160bits
    • sha224:224bits
    • sha256:256bits
    • sha384:384bits
    • sha512:512bits
  • 更改加密算法:
    -S 模式方式显示

  • umask -p 输出可被调用

  • 全局设置:/etc/bashrc 用户设置:~/.bashrc

密码加密

  • 加密机制:

    • 加密:明文 – > 密文
    • 解密:密文–> 明文
  • 单向加密:哈希算法,原文不同,密文必不同

    • 相同算法定长输出,获得密文不可逆推出原始数据
    • 雪崩效应:初始条件的微小改变,引起结果的巨大改变
    • md5:message digest,128bits
    • sha1:secure hash algorithm, 160bits
    • sha224:224bits
    • sha256:256bits
    • sha384:384bits
    • sha512:512bits
  • 更改加密算法:

    • authconfig --passalgo=sha256 --update