Linux用户和组管理

Posted by Wh0ami-hy on October 5, 2023

1. 用户和组配置文件

安全3A

  • Authentication  认证(确定验证身份)
  • Authorization  授权
  • Accounting Audition  审计

用户user

令牌 token,identity

用户账号在登录时会获取令牌

权限是根据ID号划分的

Linux 用户:Username,UID

  • 管理员:root,0
  • 普通用户:1-60000 自动分配
    • 系统用户(对进程的运行进行权限分配):1-499、1-999 (CentOS7)
    • 登录用户(交互式登录):500+、1000+ (CentOS7)

系统用户一般是给应用程序使用的,系统用户没有家目录,给应用程序使用的用户对应的shell类型一般是nologin类型

组group

组是多个用户的集合

Linux中允许用户和组重名(Windows不允许)

用户和组是多对多的关系

Linux 组:Groupname,GID

  • 管理员组:root,0
  • 系统组:1-499、1-999
    • 系统组:1-499、1-99
    • 普通组:500+、100+

安全上下文

每个运行中的程序(进程)都有其对应的运行者的身份(用户),进程所能够访问资源的权限取决于进程的运行者的身份

组的类别

用户的主要组(primary group)

  • 用户必须属于一个且只能属于一个主组
  • Linux中新建一个用户,系统会自动创建一个同名的组,作为新建用户的主组

用户的附加组(supplementary group)

  • 一个用户可以属于零个或多个辅助组

用户和组的配置文件

/etc/passwd:用户及其属性信息

  • 格式username:password:UID:GID:GECOS:home_directory:shell

/etc/group:组及其属性信息

  • 格式groupname:password:GID:user_list

/etc/shadow:用户密码及其相关属性

  • 格式username:password:last_password_change:min_days:max_days:warn_days:inactive_days:expire_date:reserved

/etc/gshadow:组密码及其相关属性

  • 格式groupname:password:admin_list:member_list
  • !!表示禁用
  • !表示锁定

密码

生成随机口令 openssl rand -base64 12

密码期限 minday、maxday、warnday、inactiveday

2. 用户管理命令

操作用户和组的配置文件

vipw(vi etc/passwd)和 vigr(vi etc/group)

具有编辑文件与语法检查功能

pwck和 grpck

检查命令是否正确

用户管理命令

用户创建useradd [options]

默认值设定/etc/default/useradd文件中

  • -D 显示默认设置
  • -u UID
  • -o配合-u选项,不检查UID的唯一性
  • -g GID 指明用户所属基本组,可为组名,也可以是GID
  • -c "COMMENT"用户的注释信息
  • -d HOME_DIR 以指定的路径(不存在)为家目录
  • -s SHELL 指明用户的默认shell程序,可用的shell在/etc/shells中,通常使用/sbin/nologin/bin/bash
  • -G GROUP1[,GROUP2.…]为用户指明附加组,组须事先存在
  • -N不创建私用组做主组,使用users组做主组
  • -r创建系统用户CentOS 6:lD<500,CentOS 7:lD<1000
  • -m强制创建家目录,用于系统用户
  • -M强制不创建家目录,用于非系统用户

批量创建用户newusers /etc/passwd格式的文件

批量修改口令echo username:password | chpasswd

用户属性修改 usermod [options]

  • -u UID新UID
  • -g GID新主组
  • -G GROUP1[,GROUP2..[,GROUPN]]]新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
  • -s SHELL 新的默认SHELL
  • -c 'COMMENT'新的注释信息
  • -d HOME新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
  • -l login_name新的名字
  • -L 锁定用户,会在/etc/shadow密码栏增加!
  • -U 解锁用户,会将/etc/shadow密码栏的!拿掉
  • -e YYYY-MM-DD 指明用户账号过期日期
  • -f INACTIVE 设定非活动期限

删除用户 userdel [options]

  • -r删除用户家目录
  • 正在登录的用户无法直接删除

查看用户相关的ID信息

id [options]... [USER]

  • -u 显示UID
  • -g 显示GID
  • -G 显示用户所属的组的ID
  • -n 显示名称,需配合u、g、G使用

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

su [options...] [-] [user [args...]]切换用户的方式

  • su UserName 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
  • su - UserNamesu -l UserName登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
  • root用户su至其他用户无须密码,非root用户切换时需要密码
  • 换个身份执行命令 su [-] UserName -c 'command'

设置密码

passwd [OPTIONS] UserName 修改指定用户的密码

  • -d删除指定用户密码
  • -l 锁定指定用户
  • -u解锁指定用户
  • -e强制用户下次登录修改密码
  • -f强制操作
  • -n mindays指定最短使用期限
  • -x maxdays最大使用期限
  • -w warndays提前多少天开始警告
  • -i inactivedays非活动期限
  • --stdin 从标准输入接收用户密码 echo "password" | passwd --stdin username

修改用户密码策略

chage [OPTION]...

  • -d LAST_DAY
  • -E EXPIRE_DATE
  • -I INACTIVE
  • -m MIN_DAYS
  • -M MAX_DAYS
  • -W WARN_DAYS
  • -l 显示密码策略

用户相关的其他命令

chfn指定个人信息

chsh指定shell

3. 用户和组管理

组的维护命令

创建组 groupadd [options]

  • -g GID指明GID号
  • -r 创建系统组 CentOS 6:ID<500,CentOS 7:ID<1000

修改和删除组 groupmod [options]

  • -n groupname 修改组名
  • -g GID 修改GID

组删除 groupdel groupname 附加组可以直接删,主组不能直接删

更改组密码

gpasswd [options]

  • -a user 添加用户user进某个组
  • -d user 从指定组中移除用户user
  • -A user1,user2... 设置有管理权限的用户列表

newgrp 临时切换主组,如果用户本不属于此组,则需要组密码

更改和查看组成员

groupmems [options] [action]

options

  • -g 指定某个组 action
  • -a 指定用户加入组
  • -d 从组中删除用户
  • -p 从组中清楚所有成员
  • -l 显示组成员列表

查看用户所属组列表 groups [OPTION].[USERNAME]

4. 权限管理

权限所有者:所有者权限、所有组权限、路人权限

权限类型

  • 文件:read(看文件内容)、write(修改文件内容)、excute(执行)
  • 文件夹:read(浏览目录下的文件列表)、write(在目录下创建、删除文件)、excute(访问目录下的文件)

执行权限为目录的基础权限,没有执行权限则无法进入到目录,无法查看目录内容,无法在目录中创建、修改、删除里面的文件,就是什么也做不了

文件权限

chown [OPTION]... [OWNER][:[GROUP]] FILE...设置文件的所有者

  • -R递归

chgrp [OPTION].….GROUP FILE... 设置文件的属组信息

  • -R 递归

chmod who opt per file 模式法设置文件权限,chmod u-w file 给file文件的所有者减去写权限

  • who:u文件所有者、g文件所有组、o路人、a所有人
  • opt:+加权限、-减权限、=重新分权限
  • per:r读权限、w写权限、x执行权限

数字法(八进制数字)设置文件权限 略…

5. 默认权限umask和特殊权限

默认权限umask

umask 命令在创建新文件和目录时自动应用一些权限限制

umask [options] [mask] 其中,mask 是一个八进制数字,用于设置掩码。如果未提供 mask 参数,则 umask 命令将显示当前的掩码设置。掩码是一个八进制数字,表示要从默认权限中屏蔽的权限位

  • -S模式方式显示
  • -p输出可被调用

非特权用户umask是002

root的umask是022

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

Linux文件系统上的特殊权限

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属组为原程序文件的属组

SUID权限,占据属主的执行权限位,作用于二进制可执行文件,该文件在执行时将具有拥有者的权限

  • 相应权限位显示s说明属主拥有x权限
  • 相应权限位显示S 说明属主没有x权限

SGID权限,占据属组的执行权限位,作用于二进制可执行文件,该文件在执行时将具有所属组的权限。作用于目录上,当用户在此目录新建文件时,此新文件的所属组继承目录的所属组

  • 相应权限位显示s 说明属组拥有x权限
  • 相应权限位显示S 说明属组没有x权限

Sticky权限,占据other的执行权限位,作用于目录上,只有目录的所有者、文件的所有者和 root 用户才能删除或重命名目录中的文件。其他用户只能在目录中创建、修改和访问自己的文件,不能删除其他用户的文件

  • 相应权限位显示t 说明other拥有x权限
  • 相应权限位显示T 说明other没有x权限

设定文件特定属性

更改文件或目录的属性的命令。它用于设置或清除文件系统级别的特殊属性,以增加文件的安全性或保护文件免受意外修改

lsattr 显示特定属性

chattr +i filename 不能删除,改名,更改

chattr -i filename 清除文件的不可修改属性

chattr +a filename 只能追加内容

chattr -a filename 清除文件的只追加属性

6. ACL权限管理

传统权限是根据所有者,所属者和其它人这三种进行设置的,这种设置方法非常不灵活

如要实现除了wang用户不能访问文件file1外,其他用户都可以访问,则传统的权限管理无法实现

ACL权限

Access Control List,实现灵活的权限管理。ACL功能允许对文件和目录进行更精细的权限控制,可以对用户或用户组进行个别授权,实现细粒度的访问控制

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

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

ACL生效顺序:所有者,自定义用户,自定义组,其他人

getfacl [option] file/directory命令用于获取ACL权限

  • -R:递归地获取ACL规则,包括文件夹及其内容

setfacl [option] [permissions] file/directory命令用于设置ACL权限

  • -m:修改ACL规则。
  • -x:移除ACL规则。
  • -R:递归地应用ACL规则到文件夹及其内容。

常用的命令:

  • setfacl -m u:wang:rwx file|directory
  • setfacl -Rm g:sales:rwX directory
  • setfacl -M file.acl file|directory
  • setfacl -m g:salesgroup:rw file|directory
  • setfacl -m d:u:wang:rx directory
  • setfacl -x u:wang file|directory
  • setfacl -X file.acl directory

getfacl 可看到特殊权限:flags

通过ACL赋予目录默认x权限,目录内文件也不会继承x权限base ACL不能删除

setfacl -k dir 删除默认ACL权限 setfacl -b file1清除所有ACL权限

mask权限

对最高权限的限制,超过mask权限的其他权限将失效

ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限

mask只影响除所有者和other的之外的人和组的最大权限

Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(EffectivePermission)

用户或组的设置必须存在于mask权限设定范围内才会生效

备份和恢复ACL

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

备份getfacl -R /tmp/dir1 > acl.txt

还原setfacl --restore acl.txt


本站总访问量