Swollen

导航

4. Linux用户、组和权限管理

Linux用户、组和权限管理

内容概述

  • Linux的安全模型
  • 用户和组相关文件
  • 用户和组管理命令
  • 理解并设置文件权限
  • 默认权限
  • 特殊权限
  • 文件访问控制列表

1 Linux安全模型

资源分派:

  • Authentication:认证,验证用户身份 (用户名密码,指纹,面容等)

  • Authorization:授权,不同的用户设置不同权限

  • Accouting|Audition:审计

当用户登录成功时,系统会自动分配令牌 token,包括:用户标识和组成员等信息

1.1 用户

Linux中每个用户是通过 User Id (UID)来唯一标识的

  • 管理员:ID为0的用户,一般默认为root用户。

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

    • 系统用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后)

      对守护进程获取资源进行权限分配,是给各种service用的账号

    • 登录用户:500+ (CentOS6以前), 1000+(CentOS7以后)

      给用户进行交互式登录使用

1.2 用户组

Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。

Linux中,用户组默认不起实质性的作用,除非针对一个用户组进行明确的授权。

所以,即便一个用户被添加到了root组,也不能有root用户的全部权限,也只是普通用户。

  • 管理员组:root, 0

  • 普通组:

    • 系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配
    • 普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用

1.3 用户和组的关系

  • 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
  • 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组

Linux中允许用户和用户组同名,Windows中则不允许。

范例:

[root@centos8 ~]#id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)

其中:

  • uid为用户的User ID

  • gid为用户的主组

  • groups中都一个为主组,后面的是附加组

1.4 安全上下文

Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份

资源能否能被访问,是由运行者的身份决定,非程序本身

比如:分别以root 和wang 的身份运行 /bin/cat /etc/shadow ,得到的结果是不同的;

范例:

wang@centos8 ~]$cat /etc/shadow
cat: /etc/shadow: Permission denied

[root@centos8 ~]#cat /etc/shadow
root:$6$zsrWEC56PrKifAEz$hylCuGySe.H6l6O2MRvbtqy/VZgnZbau.y57dE85.YHq03MTJVV4UvQ
VIDcYA1IJzbgpWE0vTU.BtPHLbNBNn0:18246:0:99999:7:::
bin:*:18027:0:99999:7:::
daemon:*:18027:0:99999:7:::
adm:*:18027:0:99999:7:::
lp:*:18027:0:99999:7::

2 用户和组的配置文件

2.1 用户和组的主要配置文件

  • /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
  • /etc/shadow:用户密码及其相关属性
  • /etc/group:组及其属性信息
  • /etc/gshadow:组密码及其相关属性

2.2 /etc/passwd文件格式

  • login name:登录用名(wang)
  • passwd:密码 (x),出于系统安全,密码储存在/etc/shadow
  • UID:用户身份编号 (1000)
  • GID:登录默认所在组编号 (1000)
  • GECOS:用户全名或注释
  • home directory:用户主目录 (/home/wang)
  • shell:用户默认使用shell (/bin/bash)
cat /etc/passwd
<Login Name>:<Password(x)>:<UID>:<GID>:<GECOS>:<Home Directory>:<Shell>

2.3 /etc/shadow文件格式

  • 登录用名
  • 用户密码:一般用sha512加密
  • 从1970年1月1日起到密码最近一次被更改的时间
  • 密码再过几天可以被变更(0表示随时可被变更)
  • 密码再过几天必须被变更(99999表示永不过期)
  • 密码过期前几天系统提醒用户(默认为一周)
  • 密码过期几天后帐号会被锁定
  • 从1970年1月1日算起,多少天后帐号失效

更改密码加密算法:

authconfig --passalgo=sha256 --update

密码的安全策略

  • 足够长
  • 使用数字、大写字母、小写字母及特殊字符中至少3种
  • 使用随机密码
  • 定期更换,不要使用最近曾经使用过的密码

范例:生成随机密码

[root@centos8 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12
sFg6C8g5FAfe

[root@centos8 ~]#openssl rand -base64 9
hvMkPmAyIrXMQInt

#生成随机密码
[root@centos8 ~]#yum -y install expect
[root@centos8 ~]#mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2

#生成随机密码的网站:
https://suijimimashengcheng.51240.com

2.4 /etc/group文件格式

  • 群组名称:就是群组名称
  • 群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
  • GID:就是群组的 ID
  • 以当前组为附加组的用户列表(分隔符为逗号)

2.5 /etc/gshdow文件格式

  • 群组名称:就是群的名称
  • 群组密码:
  • 组管理员列表:组管理员的列表,更改组密码和成员
  • 以当前组为附加组的用户列表:多个用户间用逗号分隔

2.6 文件操作

  • vipw和vigr
  • pwck和grpck

3 用户和组管理命令

用户管理命令:

  • useradd
  • usermod
  • userdel

用户组帐号维护命令:

  • groupadd
  • groupmod
  • groupdel

3.1 用户创建

useradd 命令可以创建新的Linux用户

格式:

useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]

常见参数:

  • -u UID
  • -o 配合-u 选项,不检查UID的唯一性
  • -g GID 指明用户所属基本组,可为组名,也可以GID
  • -c "COMMENT“ 用户的注释信息
  • -d HOME_DIR 以指定的路径(不存在)为家目录
  • -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
  • -G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
  • -N 不创建私用组做主组,使用users组做主组
  • -r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
  • -m 创建家目录,用于系统用户
  • -M 不创建家目录,用于非系统用户
  • -p 指定加密的密码

例如:

[root@rocky8 ~]#rpm -q --scripts postfix
preinstall scriptlet (using /bin/sh):
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -
r -u 89 postfix 2>/dev/null

useradd 命令默认值设定由/etc/default/useradd​定义

[root@centos8 ~]#cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期后的帐号锁定的宽限期,-1表示不锁定
EXPIRE= #对应/etc/shadow文件第8列,即用户帐号的有效期
SHELL=/bin/bash
SKEL=/etc/skel #用于生成新建用户家目录的模版文件
CREATE_MAIL_SPOOL=ye

显示或更改默认设置

useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GRO

创建新用户的时候,会默认将/etc/skel/下的文件拷贝到用户的家目录。

root@admin:~# ls -a /etc/skel/
.  ..  .bash_logout  .bashrc  .profile

#创建test用户,同时创建家目录并显示所有文件
root@admin:~# useradd -m test
root@admin:~# ls -a /home/test
.  ..  .bash_logout  .bashrc  .profile

#在 /etc/skel创建一个临时测试文件
root@admin:~# touch /etc/skel/abc
root@admin:~# ls -a /etc/skel/
.  ..  abc  .bash_logout  .bashrc  .profile

#创建test1用户,同时创建家目录并显示所有文件
root@admin:~# useradd -m test2
root@admin:~# ls -a /home/test2/
.  ..  abc  .bash_logout  .bashrc  .profile

每个用户都有自己的邮箱信息,会在用户创建的时候储存在/var/spool/mail/<User>中。

3.2 用户属性修改

修改用户属性

格式:

usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

常见选项:

  • -u UID: 新UID
  • -g GID: 新主组
  • -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
  • -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: 设定非活动期限,即宽限

3.3 删除用户

删除Linux 用户,若所属用户组仅有此用户,则会一并删除。

格式:

userdel [-r] [-f] [用户帐号]

常见参数:

  • -f, --force 强制
  • -r, --remove 删除用户家目录和邮

范例: 强制删除用户和数据

root@centos8 ~]#useradd test
[root@centos8 ~]#id test
uid=1001(test) gid=1001(test) groups=1001(test)

#在另一终端用test登录
[root@centos8 ~]#su - test
[test@centos8 ~]$

#删除正在登录的用户失败
[root@centos8 ~]#userdel -r test
userdel: user test is currently used by process 29909
[root@centos8 ~]#id test
uid=1001(test) gid=1001(test) groups=1001(test)

#强制删除用户
[root@centos8 ~]#userdel -rf test
userdel: user test is currently used by process 29909
[root@centos8 ~]#id test
id: ‘test’: no such us

3.4 删除用户组

删除用户组

语法:

groupdel [群组名称]

用户组里面有用户,必须先把用户移动或删除了,才能删除组。

3.5 查看用户相关的ID信息

查看用户的UID,GID等信息

语法:

id [OPTION]... [User Name]

常见参数:

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

posted on 2022-11-26 03:59  Swollen_D  阅读(314)  评论(0编辑  收藏  举报