用户和组管理
文章目录
1.用户和组管理
先把实验环境centos7.5主机名改好:
1 2 3 |
[root@localhost ~]# hostname wenhs5479 [root@localhost ~]# bash [root@wenhs5479 ~]# |
1.1 用户和组的概念
- 系统上的每个进程(运行的程序)都要做为特定用户运行。
- 每个文件是由一个特定的用户拥有。
- 访问文件和目录是受到用户限制的。
- 进程能够以何种方式访问文件和目录,是由与进程相关联的用户决定的。组:更加方便、有效的对文件赋权的一种方式 。
Authentication:认证
Authorization:授权
Accouting:审计
1.2 用户分类
- UID范围是0-65535及2的16次方
- 超级管理员的UID是0
- 1-200是系统用户,有系统分配给进程使用
- 201-999是系统用户,用来运行服务账户,不需要登录系统(动态分配)
- 1000-65535是普通用户
- 注意:在Linux7之前的惯例是UID1-499是系统用户(为守护类进程获取系统资源而完成权限指派的用户),UID500-60000是普通用户(为了完成交互式登录使用的用户)
1.3 Linux安全上下文
运行中的程序:进程(process)
- 以进程发起者的身份运行
1 2 3 4 |
[root@wenhs5479 ~]# ps -ef |grep vim root 86222 83478 0 09:53 pts/2 00:00:00 vim aaa root 86244 86089 0 09:53 pts/3 00:00:00 grep --color=auto vim [root@wenhs5479 ~]# |
1 2 3 4 |
[root@wenhs5479 ~]# ps -ef |grep vim test 86407 86345 0 09:55 pts/2 00:00:00 vim aaa root 86413 86089 0 09:55 pts/3 00:00:00 grep --color=auto vim [root@wenhs5479 ~]# |
- 进程所能够访问的所有资源的权限取决于进程的发起者的身份
Linux通过安全上下文的概念完成用户权限的指派。
- 先判断用户是否是某文件的属主
- 再判断用户是否属于某个组
- 最后定其为其他用户
1.4 Linux用户组类别
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组
基本组:优先使用基本组,由系统分配给系统进程使用,用户的默认组
附加组(额外组):默认组以外的其它组, 基本组不能满足授权要求,创建附加组,用户可以属于多个附加组
2. Linux用户和组相关的配置文件
配置文件 | 作用 |
---|---|
/etc/passwd | 用户及其属性信息(名称、uid、基本组id等等) |
/etc/group | 组及其属性信息 |
/etc/shadow | 用户密码及其相关属性 |
/etc/gshadow | 组密码及其相关属性。在用户执行基本组切换时使用 |
配置文件 | /etc/passwd | /etc/group | 注释说明(用户) |
---|---|---|---|
第一字段 | 用户名 | 组名 | 用户的账户名称 |
第二字段 | 密码占位符 | 组密码 | 存放账户的口令,暂时是x表示,密码保存在/etc/shadow中 |
第三字段 | UID | GID | 用户标识号 |
第四字段 | GID | 以当前组为附加组的用户列表(分隔符为逗号) | 组标识号 |
第五字段 | 用户的描述信息 | 用户的详细信息 | |
第六字段 | 用户家目录 | 用户家目录,root家目录是/root普通用户的家目录在/home/username,可自定义 | |
第七字段 | 用户的登录shell | 用户登陆的linux使用的shell cat/etc/shells |
配置文件 | /etc/shadow | 注释说明 |
---|---|---|
第一字段 | 登录名 | 用户的账户名称 |
第二字段 | 加密后的密码 | 用户密码,这是加密过的口令(未设置密码为!!) |
第三字段 | 最近一次更改密码的日期 | 从1970年到最近一次更改密码时间之间过了多少天 |
第四字段 | 密码的最小使用期限 | 密码最少使用几天才可以更改密码(0表示无限制) |
第五字段 | 密码的最大使用期限 | 密码使用多少天需要修改密码(默认99999永不过期) |
第六字段 | 密码警告时间段 | 密码过期前多少天提醒用户更改密码(默认过期提前7天警告) |
第七字段 | 密码禁用期 | 在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定 |
第八字段 | 帐号的过期日期 | 从1970年起,账户在这个日期前可使用,到期后失效 |
第九字段 | 保留字段 | 保留 |
2.2 加密方法
单向加密特点: - 雪崩效应(初始条件的微小改变,将会引起结果的巨大改变) - 定长输出MD5: - Message Digest,128位定长输出 - SHA1:Secure Hash Algorithm,160位定长输出 - SHA224:224位定长输出SHA256:256位定长输出 - SHA384:384位定长输出 - SHA512:512位定长输出
2.3 Linux用户密码加密方式
Linux密码是使用的单向加密方式进行加密。
想一个问题,如果两个同事使用的是同样的密码,那么在配置文件中是不是就显示密码一样呢?如果一样是不是就不安全了呢?那么又如何解决此问题呢?
答案是在加密前给用户设置的密码加上一点杂质,再对这个杂质+用户密码一起使用单向加密。由于单向加密的雪崩效应,就算两人设置的密码是一样的,但因为杂质的不同,最终的结果也会截然不同。
密码复杂性策略:
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 足够长
- 使用随机密码,不要使用有意义的单词或数字
- 定期更换,不要使用最近曾经使用过的密码
3. 用户和组相关的管理命令
3.1.1 用户创建命令useradd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
用法:useradd [选项] 登录 useradd -D useradd -D [选项] 选项: -b, --base-dir BASE_DIR 新账户的主目录的基目录 -c, --comment COMMENT 新账户的 GECOS 字段,注释信息 -d, --home-dir HOME_DIR 新账户的主目录,指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件 -D, --defaults 显示或更改默认的 useradd 配置,直接打印/etc/default/useradd文件的内容或配合其它选项(例如-s SHELL)直接修改/etc/default/useradd文件中的默认值 -e, --expiredate EXPIRE_DATE 新账户的过期日期 -f, --inactive INACTIVE 新账户的密码不活动期 -g, --gid GROUP 新账户主组的名称或 ID,指定用户所属基本组,可为组名或GID -G, --groups GROUPS 新账户的附加组列表,附加组,可以有多个,用逗号隔开。组groupname必须事先存在 -h, --help 显示此帮助信息并推出 -k, --skel SKEL_DIR 使用此目录作为骨架目录 -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值 -l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库 -m, --create-home 创建用户的主目录 -M, --no-create-home 创建用户时不给其创建家目录 -N, --no-user-group 不创建同名的组 -o, --non-unique 允许使用重复的 UID 创建用户 -p, --password PASSWORD 加密后的新账户密码 -r, --system 创建一个系统账户 -R, --root CHROOT_DIR chroot 到的目录 -s, --shell SHELL 新账户的登录 shell,这里的shell最好使用/etc/shells里面有的shell, /etc/shells指定了当前系统可用的安全shell -u, --uid UID 新账户的用户 ID,[UID_MIN,UID_MAX]定义在/etc/login.defs文件中 -U, --user-group 创建与用户同名的组 -Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER |
例子:
1 2 3 4 5 6 7 8 9 10 11 |
[root@wenhs5479 ~]# groupadd -g 1234 wenhs-test [root@wenhs5479 ~]# useradd -u 5479 -g 1234 -G root -c wenhs-test -d /home/wenhs-test -s /bin/bash wenhs [root@wenhs5479 ~]# id wenhs uid=5479(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root) [root@wenhs5479 ~]# su wenhs -c id uid=5479(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@wenhs5479 ~]# su - wenhs 上一次登录:二 3月 5 10:46:31 CST 2019pts/2 上 [wenhs@wenhs5479 ~]$ pwd /home/wenhs-test [wenhs@wenhs5479 ~]$ |
3.1.2 用户删除命令userdel
1 2 3 4 5 6 7 8 9 10 |
用法:userdel [选项] 登录 选项: -f, --force force some actions that would fail otherwise e.g. removal of user still logged in or files, even if not owned by the user -h, --help 显示此帮助信息并推出 -r, --remove 删除主目录和邮件池,删除用户的同时删除其家目录(userdel默认不会删除其家目录) -R, --root CHROOT_DIR chroot 到的目录 -Z, --selinux-user 为用户删除所有的 SELinux 用户映射 |
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@wenhs5479 ~]# ls /home/ test wenhs-test [root@wenhs5479 ~]# userdel wenhs [root@wenhs5479 ~]# ls /home/ test wenhs-test [root@wenhs5479 ~]# [root@wenhs5479 ~]# rm -rf /home/wenhs-test [root@wenhs5479 ~]# ls /home/ test [root@wenhs5479 ~]# useradd -u 5479 -g 1234 -G root -c wenhs-test -d /home/wenhs-test -s /bin/bash wenhs 正在创建信箱文件: 文件已存在 [root@wenhs5479 ~]# ls /home/ test wenhs-test [root@wenhs5479 ~]# userdel -r wenhs [root@wenhs5479 ~]# ls /home/ test [root@wenhs5479 ~]# |
3.1.3 查看用户帐号的信息命令id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
用法:id [OPTION] ... [USER] 打印指定USER的用户和组信息, 当前用户或(当省略USER时)。 -a ignore,与其他版本兼容 -Z, --context 仅打印当前用户的安全上下文 -g, --group 仅打印有效的组ID -G, --groupss 打印所有组ID -n, --name 为-ugG打印名称而不是数字 -r, --real 使用-ugG打印真实ID而不是有效ID -u, --user 仅打印有效的用户ID -z, --zero 分隔带有NUL字符的条目,而不是空格; 不允许使用默认格式 --help 显示此帮助信息并退出 --version 显示版本信息并退出 如果不附带任何选项,程序会显示一些可供识别用户身份的有用信息。 |
例子
1 2 3 4 5 6 7 |
查看当前登录的用户的信息: [root@wenhs5479 ~]# id uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@wenhs5479 ~]# id root uid=0(root) gid=0(root) 组=0(root) |
3.1.4 修改用户帐号属性的命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
usermod 修改用户属性 用法:usermod [选项] 登录 选项: -c, --comment 注释 GECOS 字段的新值 -d, --home HOME_DIR 用户的新主目录 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态 -g, --gid GROUP 强制使用 GROUP 为新主组 -G, --groups GROUPS 新的附加组列表 GROUPS,不使用-a选项,会覆盖此前的附加组 -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中, 并不从其它组中删除此用户 -h, --help 显示此帮助信息并推出 -l, --login LOGIN 新的登录名称 -L, --lock 锁定用户帐号,被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号 -m, --move-home (仅于 -d 一起使用),改变用户家目录的同时把原来家目录的文件移动到新的家目录中 -o, --non-unique 允许使用重复的(非唯一的) UID -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码 -R, --root CHROOT_DIR chroot 到的目录 -s, --shell SHELL 该用户帐号的新登录 shell -u, --uid UID 用户帐号的新 UID -U, --unlock 解锁用户帐号 -Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射 chsh 修改用户的默认shell 语法:chsh [options] [username] -s SHELL |
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@wenhs5479 ~]# usermod -u 1111 -a -G test -e 2019-3-12 wenhs [root@wenhs5479 ~]# id wenhs uid=1111(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root),1000(test) [root@wenhs5479 ~]# usermod -d /opt/wenhs -m wenhs [root@wenhs5479 ~]# su - wenhs [wenhs@wenhs5479 ~]$ pwd /opt/wenhs [wenhs@wenhs5479 ~]$ [root@wenhs5479 ~]# tail -2 /etc/passwd test❌1000:1000:test:/home/test:/bin/bash wenhs❌1111🔢wenhs-test:/opt/wenhs:/bin/bash [root@wenhs5479 ~]# usermod -L wenhs [root@wenhs5479 ~]# tail -1 /etc/shadow wenhs:!$6$4lQmyzDt$3l.uEIwhu6kb5Df.6knVKxYHneVkTkovZL0PtNmjQU7LyOB9mTayyS3Vdba/sznEQl40AdLN9P3ZwNOsL6DEb/:17960:0:99999:7::17967: [root@wenhs5479 ~]# usermod -U wenhs [root@wenhs5479 ~]# tail -1 /etc/shadow wenhs:$6$4lQmyzDt$3l.uEIwhu6kb5Df.6knVKxYHneVkTkovZL0PtNmjQU7LyOB9mTayyS3Vdba/sznEQl40AdLN9P3ZwNOsL6DEb/:17960:0:99999:7::17967: [root@wenhs5479 ~]# chsh -s /bin/sh wenhs Changing shell for wenhs. Shell changed. [root@wenhs5479 ~]# tail -1 /etc/passwd wenhs❌1111🔢wenhs-test:/opt/wenhs:/bin/sh |
3.1.5 切换用户命令su
切换用户的方式 | 特点 |
---|---|
su USERNAME | 非登录式切换,即不会读取目标用户的配置文件 |
su - USERNAME | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
用法: su [选项] [-] [USER [参数]...] 将有效用户 id 和组 id 更改为 USER 的 id。 单个 - 视为 -l。如果未指定 USER,将假定为 root。 选项: -m, -p, --preserve-environment 不重置环境变量 -g, --group <组> 指定主组 -G, --supp-group <组> 指定一个辅助组 -, -l, --login 使 shell 成为登录 shell -c, --command <命令> 使用 -c 向 shell 传递一条命令 --session-command <命令> 使用 -c 向 shell 传递一条命令 而不创建新会话 -f, --fast 向shell 传递 -f 选项(csh 或 tcsh) -s, --shell <shell> 若 /etc/shells 允许,则运行 shell -h, --help 显示此帮助并退出 -V, --version 输出版本信息并退出 |
例子:
1 2 3 4 5 6 7 8 |
[root@wenhs5479 ~]# su wenhs -c pwd /root [root@wenhs5479 ~]# su - wenhs 上一次登录:二 3月 5 11:39:52 CST 2019pts/2 上 -sh-4.2$ su - 密码: 上一次登录:二 3月 5 09:51:32 CST 2019从 192.168.131.100pts/3 上 [root@wenhs5479 ~]# |
bash的配置文件:
配置文件类型 | 配置文件路径 |
---|---|
全局配置 | /etc/profile |
全局配置 | /etc/profile.d/*.sh |
全局配置 | /etc/bashrc |
个人配置 | ~/.bash_profile |
个人配置 | ~/.bashrc |
配置文件类型 | 功能 |
---|---|
profile类 | 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本 |
bashrc类 | 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名 |
登录式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
3.2 密码管理
3.2.1 密码管理命令passwd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
用法: passwd [选项...] <帐号名称> -k, --keep-tokens 保持身份验证令牌不过期 -d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作) -l, --lock 锁定指名帐户的密码(仅限 root 用户) -u, --unlock 解锁指名账户的密码(仅限 root 用户) -e, --expire 终止指名帐户的密码(仅限 root 用户) -f, --force 强制执行操作 -x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作) -n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作) -w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作) -i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作) -S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作) --stdin 从标准输入读取令牌(只有根用户才能进行此操作),例:echo "redhat"|passwd --stdin user1 Help options: -?, --help 显示此帮助消息 --usage 显示简要用法信息 |
3.2.2 改变用户密码过期信息命令chage
1 2 3 4 5 6 7 8 9 10 11 12 |
用法:chage [选项] 登录 选项: -d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期” -E, --expiredate 过期日期 将帐户过期时间设为“过期日期” -h, --help 显示此帮助信息并推出 -I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态 -l, --list 显示帐户年龄信息 -m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数” -M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数” -R, --root CHROOT_DIR chroot 到的目录 -W, --warndays 警告天数 将过期警告天数设为“警告天数” |
3.2.3 密码生成工具openssl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
语法:openssl command [ command_opts ] [ command_args ] command //包含标准命令、消息摘要命令、加密命令 version //查看程序版本号 dgst //提取特征码 passwd //生成密码 rand //生成伪随机数 提取特征码 [root@wenhs5479 ~]# openssl dgst -md5 /etc/fstab MD5(/etc/fstab)= 01453950193b2f75895174159b092db1 生成密码 openssl passwd -1 -salt string //string一般为8位 [root@wenhs5479 ~]# openssl passwd -1 -salt wenhs123 Password: $1$wenhs123$hHZLFuQVNhKMU4bROKERX0 生成随机数 openssl rand -base64 NUM NUM表示随机数的长度 [root@wenhs5479 ~]# openssl rand -base64 20 A2H5Ny5/QrcfkYAcfM13beTMq7Q= |
3.3 组管理
3.3.1 创建组命令groupadd
1 2 3 4 5 6 7 8 9 10 11 12 |
用法:groupadd [选项] 组 选项: -f, --force 如果组已经存在则成功退出 并且如果 GID 已经存在则取消 -g -g, --gid GID 为新组使用 GID -h, --help 显示此帮助信息并推出 -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值 -o, --non-unique 允许创建有重复 GID 的组 -p, --password PASSWORD 为新组使用此加密过的密码 -r, --system 创建一个系统账户 -R, --root CHROOT_DIR chroot 到的目录 |
3.3.2 修改组信息命令groupmod
1 2 3 4 5 6 7 8 9 |
用法:groupmod [选项] 组 选项: -g, --gid GID 将组 ID 改为 GID -h, --help 显示此帮助信息并推出 -n, --new-name NEW_GROUP 改名为 NEW_GROUP -o, --non-unique 允许使用重复的 GID -p, --password PASSWORD 将密码更改为(加密过的) PASSWORD -R, --root CHROOT_DIR chroot 到的目录 |
3.3.3 删除组命令groupdel
1 2 3 4 5 |
用法:groupdel [选项] 组 删除组时只需要指定组名即可 选项: -h, --help 显示此帮助信息并推出 -R, --root CHROOT_DIR chroot 到的目录 |
3.3.4 给组设定密码命令gpasswd
1 2 3 4 5 6 7 8 9 10 11 12 13 |
用法:gpasswd [选项] 组 不带任何参数表示给组设密码 选项: -a, --add USER 向组 GROUP 中添加用户 USER -d, --delete USER 从组 GROUP 中添加或删除用户 -h, --help 显示此帮助信息并推出 -Q, --root CHROOT_DIR 要 chroot 进的目录 -r, --delete-password remove the GROUP's password -R, --restrict 向其成员限制访问组 GROUP -M, --members USER,... 设置组 GROUP 的成员列表 -A, --administrators ADMIN,... 设置组的管理员列表 除非使用 -A 或 -M 选项,不能结合使用这些选项。 |
3.3.5 切换组命令newgrp
将当前用户临时切换至新的基本组,这里需要用到gpasswd设置的组密码,使用newgrp登录至新的基本组后可以使用exit退出,退出后其原基本组不变
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@wenhs5479 ~]# groupadd www [root@wenhs5479 ~]# gpasswd www 正在修改 www 组的密码 新密码: 请重新输入新密码: [root@wenhs5479 ~]# su - test 上一次登录:二 3月 5 09:55:17 CST 2019pts/2 上 [test@wenhs5479 ~]$ id uid=1000(test) gid=1000(test) 组=1000(test),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [test@wenhs5479 ~]$ newgrp www 密码: [test@wenhs5479 ~]$ id uid=1000(test) gid=1235(www) 组=1235(www),10(wheel),1000(test) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [test@wenhs5479 ~]$ exit exit [test@wenhs5479 ~]$ id uid=1000(test) gid=1000(test) 组=1000(test),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 |