04用户和组管理

用户和组管理

1. 何为用户何为组?

1.1 用户和组概念

  • 用户存在的目的是为了实现资源的分派。
  • Authentication:认证(系统需要对用户的身份进行确认)
  • Authorization:授权(系统分配一定的权限给用户,给你你才能用)
  • Accouting:审计(系统可以对用户的行为进行监测)

1.2 用户分类

Linux用户分为管理员和普通用户两种:

用户类别用户ID
管理员0
普通用户1-65535

其中普通用户又分为系统用户和登录用户两种:

用户类别用户ID
系统用户1-499(为守护类进程获取系统资源而完成权限指派的用户)
登录用户500-60000(为了完成交互式登录使用的用户)

1.3 Linux安全上下文

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

  • 以进程发起者的身份运行
  • root:cat
  • tom:cat
  • 进程所能够访问的所有资源的权限取决于进程的发起者的身份

Linux通过安全上下文的概念完成用户权限的指派。

  • 先判断用户是否是某文件的属主
  • 再判断用户是否属于某个组
  • 最后定其为其他用户

1.4 Linux用户组类别

用户组类别特性
私有组创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组
基本组用户的默认组
附加组(额外组)默认组以外的其它组

2. Linux用户和组相关的配置文件

2.1 各配置文件说明

配置文件作用
/etc/passwd用户及其属性信息(名称、uid、基本组id等等)
/etc/group组及其属性信息
/etc/shadow用户密码及其相关属性
/etc/gshadow组密码及其相关属性。在用户执行基本组切换时使用
配置文件/etc/passwd/etc/group
第一字段用户名组名
第二字段密码占位符组密码
第三字段UIDGID
第四字段GID以当前组为附加组的用户列表(分隔符为逗号)
第五字段用户的描述信息
第六字段用户家目录
第七字段用户的登录shell
配置文件/etc/shadow
第一字段登录名
第二字段加密后的密码
第三字段最近一次更改密码的日期
第四字段密码的最小使用期限
第五字段密码的最大使用期限
第六字段密码警告时间段
第七字段密码禁用期
第八字段帐号的过期日期
第九字段保留字段

2.2 加密方法

对称加密:加密和解密使用同一个密钥

公钥加密:每个密码都成对出现,一个为私钥(secretkey),一个为公钥(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 用户管理

3.1.1 用户创建命令useradd
  • 语法:useradd [option] USERNAME
  • -u :[UID_MIN,UID_MAX]定义在/etc/login.defs文件中
  • -g :指定用户所属基本组,可为组名或GID
  • -G groupname,…:附加组,可以有多个,用逗号隔开。组groupname必须事先存在
  • -c “COMMENT”:注释信息
  • -d /path/to/directory:指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件
  • -s shell:这里的shell最好使用/etc/shells里面有的shell,/etc/shells指定了当前系统可用的安全shell
[root@localhost ~]# groupadd -g 500 wangwei
[root@localhost ~]# useradd -u 500 -g 500 -G 1000 -c "qwer" -d /opt/wangwei -s /bin/sh wangwei
正在创建信箱文件: 文件已存在
[root@localhost ~]# id wangwei
uid=500(wangwei) gid=500(wangwei) 组=500(wangwei),1000(ww)
[root@localhost ~]# tail /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
gg:x:1001:1001::/home/gg:/bin/bash
wangwei:x:500:500:qwer:/opt/wangwei:/bin/sh

解决上面文件已存在问题

[root@localhost ~]# useradd ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1000(ww) 组=1000(ww)
[root@localhost ~]# ls /home/
ww
[root@localhost ~]# userdel -r ww
[root@localhost ~]# id ww
id: ww: no such user
[root@localhost ~]# ls /home/
[root@localhost ~]# rm -rf /var/spool/mail/ww       //删除这个就不会出现上面的提示了
[root@localhost ~]# useradd ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1000(ww) 组=1000(ww)

  • -M :创建用户时不给其创建家目录
  • -r :添加一个系统用户
  • -D :直接打印/etc/default/useradd文件的内容或配合其它选项(例如-s SHELL)直接修改/etc/default/useradd文件中的默认值
[root@localhost ~]# useradd -r -M -s /sbin/nologin dage
[root@localhost ~]# ls /home
wangwei
[root@localhost ~]# tail -5 /etc/passwd
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
gg:x:1001:1001::/home/gg:/bin/bash
wangwei:x:500:500:qwer:/opt/wangwei:/bin/sh
dage:x:499:499::/home/dage:/sbin/nologin
[root@localhost ~]# su - dage
su: 警告:无法更改到 /home/dage 目录: 没有那个文件或目录
This account is currently not available.
3.1.2 用户删除命令userdel
  • 语法:userdel [option] USERNAME
  • -r:删除用户的同时删除其家目录(userdel默认不会删除其家目录)
[root@localhost ~]# useradd ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1000(ww) 组=1000(ww)
[root@localhost ~]# ls /home/
ww
[root@localhost ~]# userdel -r ww
[root@localhost ~]# id ww
id: ww: no such user
[root@localhost ~]# ls /home/
3.1.3 查看用户帐号的信息命令id
  • id :查看用户的帐号属性信息
  • -u :查看UID
  • -g :查看GID
  • -G :查看Groups
[root@localhost ~]# useradd ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1000(ww) 组=1000(ww)
[root@localhost ~]# id -u ww
1000
[root@localhost ~]# id -g ww
1000
[root@localhost ~]# id -G ww
1000

3.1.4 修改用户帐号属性的命令

usermod : 修改用户属性

  • 语法:usermod [options] username
  • -u UID
  • -g GID
[root@localhost ~]# id 500
uid=500(ww) gid=1000(ww) 组=1000(ww)
[root@localhost ~]# usermod -u 1000 ww
[root@localhost ~]# groupadd -g 1500 gdx
[root@localhost ~]# tail /etc/group
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
sshd:x:74:
ww:x:1000:
gdx:x:1500:
[root@localhost ~]# usermod -g 1500 ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1500(gdx) 组=1500(gdx)

  • -a -G groupname:不使用-a选项,会覆盖此前的附加组
[root@localhost ~]# usermod -a -G ww ww
[root@localhost ~]# id ww
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww)

  • -d -m:改变用户家目录的同时把原来家目录的文件移动到新的家目录中
[root@localhost ~]# ll /home
总用量 0
drwx------. 2 ww gdx 62 9月   3 17:31 ww
[root@localhost ~]# cd /home/ww
[root@localhost ww]# ls
[root@localhost ww]# touch nbb
[root@localhost ww]# mkdir nmm
[root@localhost ww]# ls
nbb  nmm
[root@localhost ww]# cd
[root@localhost ~]# ls /opt
[root@localhost ~]# usermod -md /opt/ww ww
[root@localhost ~]# ll /home/
总用量 0
[root@localhost ~]# ll /opt/
总用量 0
drwx------. 3 ww gdx 84 9月   3 18:14 ww
[root@localhost ~]# ll /opt/ww
总用量 0
-rw-r--r--. 1 root root 0 9月   3 18:14 nbb
drwxr-xr-x. 2 root root 6 9月   3 18:14 nmm

  • -e YYYY-MM-DD:指明用户帐号过期日期
  • -f INACTIVE :设定非活动期限
  • -L :锁定帐号。被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
  • -U :解锁帐号
[root@localhost ~]# tail -1 /etc/shadow
ww:!!:18142:0:99999:7:::    //默认没有密码  !!
[root@localhost ~]# passwd ww 
更改用户 ww 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# tail -1 /etc/shadow
ww:$6$mXk0iXk9$HvBnTKfQsCAsVmHACSXzRHvcSnhAO9uMqXFbEF3P1jnd6dhkVd2E1fJpx.93wunhUN4f94taoPopQcDJhSout/:18142:0:99999:7:::
    //设置密码成功
[root@localhost ~]# usermod -L ww
[root@localhost ~]# tail -1 /etc/shadow
ww:!$6$mXk0iXk9$HvBnTKfQsCAsVmHACSXzRHvcSnhAO9uMqXFbEF3P1jnd6dhkVd2E1fJpx.93wunhUN4f94taoPopQcDJhSout/:18142:0:99999:7::: //有!,用户被锁定
[root@localhost ~]# usermod -U ww
[root@localhost ~]# tail -1 /etc/shadow
ww:$6$mXk0iXk9$HvBnTKfQsCAsVmHACSXzRHvcSnhAO9uMqXFbEF3P1jnd6dhkVd2E1fJpx.93wunhUN4f94taoPopQcDJhSout/:18142:0:99999:7:::      //解除锁定

chsh 修改用户的默认shell

  • 语法:chsh [options] [username]
  • -s SHELL
[root@localhost ~]# tail -1 /etc/passwd
ww:x:1000:1500::/opt/ww:/bin/bash
[root@localhost ~]# chsh -s /bin/sh ww
Changing shell for ww.
Shell changed.
[root@localhost ~]# tail -1 /etc/passwd
ww:x:1000:1500::/opt/ww:/bin/sh
[root@localhost ~]# usermod -s /bin/bash ww     //等同于chsh -s.....
[root@localhost ~]# tail -1 /etc/passwd
ww:x:1000:1500::/opt/ww:/bin/bash

3.1.5 切换用户命令su
切换用户的方式特点
su USERNAME非登录式切换,即不会读取目标用户的配置文件
su - USERNAME登录式切换,即会读取目标用户的配置文件。完全切换
su -不指定用户时默认切换至root用户

root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码

  • 语法:su [options] [-] [USER [arg]…]
  • -c ‘COMMAND’:切换身份执行命令,命令执行结束后又回到原来的身份
[root@localhost ~]# su - ww
上一次登录:二 9月  3 18:20:57 CST 2019从 192.168.120.1pts/2 上
[ww@localhost ~]$ su -
密码:
上一次登录:二 9月  3 17:20:06 CST 2019从 192.168.120.1pts/1 上
[root@localhost ~]# su - ww -c 'ls'
nbb  nmm
[root@localhost ~]# su - ww
上一次登录:二 9月  3 18:37:58 CST 2019pts/1 上
[ww@localhost ~]$ ls
nbb  nmm
[ww@localhost ~]$ su -
密码:
上一次登录:二 9月  3 18:36:31 CST 2019pts/1 上
[root@localhost ~]# 

bash的配置文件:

配置文件类型配置文件路径
全局配置/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置/.bash_profil
/.bashrc
配置文件类型功能
profile类为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
bashrc类为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名

登录式shell如何读取配置文件?

  • /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非登录式shell如何读取配置文件?

  • ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

3.2 密码管理

3.2.1 密码管理命令passwd
  • 语法:passwd [options] [USERNAME]
  • –stdin:从标准输入获取用户密码。

    例:echo "redhat"|passwd --stdin user1
[root@localhost ~]# echo '12345678' | passwd --stdin ww
更改用户 ww 的密码 。
passwd:所有的身份验证令牌已经成功更新。

  • -l :锁定用户
  • -u :解锁用户
  • -d :删除用户密码
[root@localhost ~]# echo '12345678' | passwd --stdin ww
更改用户 ww 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd -l ww
锁定用户 ww 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u ww
解锁用户 ww 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -d ww
清除用户的密码 ww。
passwd: 操作成功

  • -n mindays :指定最短使用期限
  • -x maxdays :指定最长使用期限
  • -w warndays :提前多少天开始警告
  • -i inactivedays :非活动期限,密码过期后到禁用前的这段时间
[root@localhost ~]# passwd -n 5 ww
调整用户密码老化数据ww。
passwd: 操作成功
[root@localhost ~]# passwd -x 666 ww
调整用户密码老化数据ww。
passwd: 操作成功
[root@localhost ~]# passwd -w 7 ww
调整用户密码老化数据ww。
passwd: 操作成功
[root@localhost ~]# passwd -i 7 ww
调整用户密码老化数据ww。
passwd: 操作成功
[root@localhost ~]# tail -1 /etc/passwd
ww:x:1000:1500::/opt/ww:/bin/bash
[root@localhost ~]# tail -1 /etc/group
gdx:x:1500:
[root@localhost ~]# tail -1 /etc/shadow
ww::18142:5:666:7:7::

3.2.2 改变用户密码过期信息命令chage
  • 语法:chage [options] USERNAME
  • -d :最近一次的修改时间
[root@localhost ~]# chage -d 2019-19-30 ww
[root@localhost ~]# tail -1 /etc/shadow
ww::18473:5:666:7:7:18159:

  • -E :过期时间
[root@localhost ~]# chage -E 2019-9-20 ww
[root@localhost ~]# tail -1 /etc/shadow
ww::18142:5:666:7:7:18159:

  • -I :非活动时间
  • -m :最短使用期限
  • -M :最长使用期限
  • -W :警告时间
[root@localhost ~]# chage -I 8 ww
[root@localhost ~]# chage -m 8 ww
[root@localhost ~]# chage -M 8 ww
[root@localhost ~]# chage -W 8 ww
[root@localhost ~]# tail -1 /etc/shadow
ww::18473:8:8:8:8:18159:

3.2.3 密码生成工具openssl
  • 语法:openssl command [ command_opts ] [ command_args ]
  • command//包含标准命令、消息摘要命令、加密命令
  • version :查看程序版本号
  • dgst :提取特征码
[root@localhost ~]# ls
a  anaconda-ks.cfg
[root@localhost ~]# openssl dgst -md5 a
MD5(a)= d41d8cd98f00b204e9800998ecf8427e
[root@localhost ~]# openssl dgst -sha1 a
SHA1(a)= da39a3ee5e6b4b0d3255bfef95601890afd80709
[root@localhost ~]# openssl dgst -sha256 a
SHA256(a)= e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

  • passwd :生成密码
[root@localhost ~]# openssl passwd -1 -salt wangwei
Password:               //123456
$1$wangwei$piYyx/fSDo/fVAPxUfSnL0
[root@localhost ~]# openssl passwd --help
Usage: passwd [options] [passwords]
where options are
-crypt             standard Unix password algorithm (default)
-1                 MD5-based password algorithm                                 //-1取自这个算法
-apr1              MD5-based password algorithm, Apache variant
-salt string       use provided salt
-in file           read passwords from file
-stdin             read passwords from stdin
-noverify          never verify when reading password from terminal
-quiet             no warnings
-table             format output as table
-reverse           switch table columns
[root@localhost ~]# openssl passwd -1 -salt wangweiqwe
Password:               //123456
$1$wangweiq$NM.q3wO0kNqGnZUP8xLoy0

  • rand :生成伪随机数
[root@localhost ~]# openssl rand -base64 10
Ww9o7IdL6ikhWg==
[root@localhost ~]# openssl rand -base64 20
gZX9HPFFFoLv30gSVYP92lbploU=
[root@localhost ~]# openssl rand -base64 30     //数字代表随机数长度
vVmgkmOufeeCQLaWrNxIBD+iFuYrXUjzsFCiPUBh

3.3 组管理

3.3.1 创建组命令groupadd
  • 语法:groupadd [options] GROUP
  • -g GID :指定GID
  • -r :添加一个系统组
[root@localhost ~]# groupadd -r -g 400 qqqq
[root@localhost ~]# tail /etc/group
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
sshd:x:74:
ww:x:1000:ww
gdx:x:1500:
qqqq:x:400:
3.3.2 修改组信息命令groupmod
  • 语法:groupmod [options] GROUP
  • -g GID :修改指定组的GID
  • -n groupname :修改组名
[root@localhost ~]# groupmod -g 399 qqqq
[root@localhost ~]# tail -1 /etc/group
qqqq:x:399:
[root@localhost ~]# groupmod -n wwww qqqq
[root@localhost ~]# tail -1 /etc/group
wwww:x:399:

3.3.3 删除组命令groupdel
  • 语法:groupdel [options] GROU
  • 删除组时只需要指定组名即可
[root@localhost ~]# groupdel wwww
[root@localhost ~]# tail -1 /etc/group
gdx:x:1500:
[root@localhost ~]# tail /etc/group
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
sshd:x:74:
ww:x:1000:ww
gdx:x:1500:

3.3.4 给组设定密码命令gpasswd
  • 语法:gpasswd [option] GROUP
  • -a, --add USER:将用户添加至组
  • -d, --deleteUSER:将用户从组中删除
  • -r, --delete-password:删除组密码
  • 不带任何参数表示给组设密码
[root@localhost ~]# groupadd ss
[root@localhost ~]# tail -1 /etc/group
ss:x:1501:
[root@localhost ~]# gpasswd -a ww ss
正在将用户“ww”加入到“ss”组中
[root@localhost ~]# id ww
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww),1501(ss)
[root@localhost ~]# gpasswd -d ww ss
正在将用户“ww”从“ss”组中删除
[root@localhost ~]# gpasswd -a ww ss
正在将用户“ww”加入到“ss”组中
[root@localhost ~]# gpasswd ss
正在修改 ss 组的密码
新密码:
请重新输入新密码:

[root@localhost ~]# gpasswd -r ss
[root@localhost ~]# su - ww
上一次登录:二 9月  3 19:34:34 CST 2019pts/1 上
[ww@localhost ~]$ newgrp ss
[ww@localhost ~]$ id
uid=1000(ww) gid=1501(ss) 组=1501(ss),1000(ww),1500(gdx) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

3.3.5 切换组命令newgrp

将当前用户临时切换至新的基本组,这里需要用到gpasswd设置的组密码,使用newgrp登录至新的基本组后可以使用exit退出,退出后其原基本组不变

  • 语法:newgrp [-] [group]
[root@localhost ~]# id ww
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww),1501(ss)
[root@localhost ~]# su - ww
上一次登录:二 9月  3 18:52:45 CST 2019从 192.168.120.1pts/2 上
[ww@localhost ~]$ newgrp ss     //临时切换到ss
密码:
[ww@localhost ~]$ id
uid=1000(ww) gid=1501(ss) 组=1501(ss),1000(ww),1500(gdx) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ww@localhost ~]$ exit
exit
[ww@localhost ~]$ id 
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww),1501(ss) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

户临时切换至新的基本组,这里需要用到gpasswd设置的组密码,使用newgrp登录至新的基本组后可以使用exit退出,退出后其原基本组不变

  • 语法:newgrp [-] [group]
[root@localhost ~]# id ww
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww),1501(ss)
[root@localhost ~]# su - ww
上一次登录:二 9月  3 18:52:45 CST 2019从 192.168.120.1pts/2 上
[ww@localhost ~]$ newgrp ss     //临时切换到ss
密码:
[ww@localhost ~]$ id
uid=1000(ww) gid=1501(ss) 组=1501(ss),1000(ww),1500(gdx) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ww@localhost ~]$ exit
exit
[ww@localhost ~]$ id 
uid=1000(ww) gid=1500(gdx) 组=1500(gdx),1000(ww),1501(ss) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值