1.用户和组管理
先把实验环境centos7.5主机名改好:
[root@localhost ~]# hostname wenhs5479
[root@localhost ~]# bash
[root@wenhs5479 ~]#
1.1 用户和组的概念
a.系统上的每个进程(运行的程序)都要做为特定用户运行。
b.每个文件是由一个特定的用户拥有。
c.访问文件和目录是受到用户限制的。
d.进程能够以何种方式访问文件和目录,是由与进程相关联的用户决定的。组:更加方便、有效的对文件赋权的一种方式 。
Authentication:认证
Authorization:授权
Accouting:审计
1.2 用户分类
a. UID范围是0-65535及2的16次方
b.超级管理员的UID是0
c. 1-200是系统用户,有系统分配给进程使用
d.201-999是系统用户,用来运行服务账户,不需要登录系统(动态分配)
e.1000-65535是普通用户
f.注意:在Linux7之前的惯例是UID1-499是系统用户(为守护类进程获取系统资源而完成权限指派的用户),UID500-60000是普通用户(为了完成交互式登录使用的用户)
1.3 Linux安全上下文
运行中的程序:进程(process)
- 以进程发起者的身份运行
- root:vim
[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 ~]#
- test:vim
[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 加密方法
对称加密:加密和解密使用同一个密钥
公钥加密:每个密码都成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密:也叫散列加密,提取数据特征码,能加密不能解密,常用于做数据完整性校验
单向加密特点:
- 雪崩效应(初始条件的微小改变,将会引起结果的巨大改变)
- 定长输出
- 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
用法: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
例子:
[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
用法: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 用户映射
例子:
[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
用法: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 显示版本信息并退出
如果不附带任何选项,程序会显示一些可供识别用户身份的有用信息。
例子
查看当前登录的用户的信息:
[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 修改用户帐号属性的命令
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
例子:
[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:x:1000:1000:test:/home/test:/bin/bash
wenhs:x:1111:1234: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:x:1111:1234:wenhs-test:/opt/wenhs:/bin/sh
3.1.5 切换用户命令su
切换用户的方式 | 特点 |
---|---|
su USERNAME | 非登录式切换,即不会读取目标用户的配置文件 |
su - USERNAME | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码
用法:
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 输出版本信息并退出
例子:
[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
用法: 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
用法: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
//语法: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
用法: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
用法: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
用法:groupdel [选项] 组
删除组时只需要指定组名即可
选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
3.3.4 给组设定密码命令gpasswd
用法: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退出,退出后其原基本组不变
例子:
[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