文章目录
- Linux下的用户
- 配置文件
- 用户管理 1) useradd 使用方法 参数: 使用举例: 2) adduser 3) 删除用户: usedel 4) 密码文件 1)每一段的具体含义如下: 2)给用户添加密码 3) 这里补充一下与用户相关的命令:
- 修改用户的信息 1)usermod 2) 举例 修改UID 修改shell 更改用户主目录
- 关于用户管理常见的面试题 1) 查找当前系统下能够登陆系统的用户 2) 统计当前系统下能够登陆系统的用户个数 3) 增加一个新用户admin,权限是root 总结:
1. Linux下的用户
Linux是一个多用户的系统,我们可以多个用户同时登陆Linux,在Linux中用户有三种角色:
- 超级用户: root 拥有对系统的最高的管理权限 ID=0
- 普通用户:(普通用户又包含系统用户和本地用户)
- 系统用户 UID:1-999(centos7版本) 1-499(centos6版本)
- 本地用户 UID:1000+
这个有个UID: 即每个用户的身份标示,类似于每个人的身份证号码.
虚拟用户: 虚拟用户:伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache
备注: 把Linux操作系统比作皇宫,root就相当于皇帝,系统用户就是皇宫里的太监,宫女,确保皇宫里的一些设施(服务)正常运行,打扫庭院。
而本地用户,就是外地官员或者大臣,偶尔被root授予尚方宝剑,可以行使皇帝的权利。
2. 配置文件
每个用户有三个信息可以证明自己: 一个是配置文件,一个是用户组文件,一个是用户对应的密码信息
名称|账号信息|说明
用户配置文件|/etc/passwd| 记录每个用户的基本属性,并且对所有用户可读,每一行记录一个用户,每行记录用冒号分割。
用户组文件|/etc/group|用户组的所有信息存放地|
用户对应密码文件|/etc/shadow|用户密码单独分离出来放在了shadow下,该文件只有root用户拥有读的权限。
3. 用户管理
1) useradd
使用方法
使用方法: useradd -d -u “UID” -g “初始组” -s “/bin/bash” 用户
参数:
-c comment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date 用YYYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁
用,-1表示禁用这个功能
-g initial_group 指定用户登录组的GID或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m 创建用户的HOME目录
-M 不创建用户的HOME目录(当默认设置里指定创建时,才用到)
-n 创建一个同用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认登录shell ,有时候禁止登陆使用/sbin/nologin
-u uid 为账户指定一个唯一的UID
useradd 命令背后发生了什么?
- 创建一个唯一的UID
- 添加一个用户名相同的用户组和一个唯一的GID,并将用户设置为该组
- 在/home目录下创建一个与用户同名的目录
- 设置shell为/bin/bash
- 唯独没有设密码,需要使用passwd设置
使用举例:
- 添加一个名为gaosh的用户,并使用bash作为登陆的shell
[root@zmkjedu71 ~]# useradd zmkjedu71
[root@zmkjedu71 ~]# tail -1 /etc/passwd
zmkjedu71:x:501:501::/home/zmkjedu71:/bin/bash
[root@zmkjedu71 ~]#
每一部分的作用:(文字版)
- 创建用户并指定用户ID
[root@zmkjedu71 ~]# useradd -u 1111 zmkjedu71 # 创建用户指定UID1111
[root@zmgaosh ~]# id xinsz08 #查看用户所属组,及uid和组ID信息
uid=1111(xinsz08) gid=1111(xinsz08) 组=1111(xinsz08)
[root@zmkjedu71 ~]# id zmkjedu71 #查看/etc/passwd新建用户
uid=501(zmkjedu71) gid=501(zmkjedu71) 组=501(zmkjedu71)
[root@zmkjedu71 ~]#
[root@zmkjedu71 ~]# ls /home/zmkjedu71/ -a #查看家目录默认模板
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
[root@zmkjedu71 ~]#
- 指定用户的主目录
[root@zmkjedu71 ~]# useradd -d /opt/zmkjedu71 zmkjedu71
[root@zmkjedu71 ~]# ls -a /opt/zmkjedu71 #可以看到家目录跑/opt/xinsz下了
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
[root@zmgaosh ~]# tail -1 /etc/passwd
xinsz:x:1112:1112::/opt/xinsz:/bin/bash
[root@zmkjedu71 ~]# tail -l /etc/passwd
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
qi:x:500:500:qijiangtao:/home/qi:/bin/bash
zmkjedu71:x:501:501::/home/zmkjedu71:/bin/bash
- 指定用户的主组 就相当于一个财务加到前台组,让财务偶尔也干前台
[root@zmkjedu71 ~]# useradd qiantai #创建了一个前台
[root@zmkjedu71 ~]# id qiantai
uid=502(qiantai) gid=502(qiantai) 组=502(qiantai)
[root@zmkjedu71 ~]# useradd -g qiantai caiwu # 把财务放在前台的组里
[root@zmkjedu71 ~]# id caiwu
uid=503(caiwu) gid=502(qiantai) 组=502(qiantai) #可以看到财务属于前台组,万一前台请假,财务顶上干前台
[root@zmkjedu71 ~]#
2) adduser
adduser是创建用户的另外一个命令,使用方法相同
[root@zmkjedu71 ~]# which adduser
/usr/sbin/adduser
[root@zmkjedu71 ~]# ll /usr/sbin/adduser
lrwxrwxrwx. 1 root root 7 5月 16 2021 /usr/sbin/adduser -> useradd
[root@zmkjedu71 ~]#
由此可见,adduser是useradd的软连接
3) 删除用户: usedel
选项: -r 汇联通家目录和/var/mail的目录一同删除
userdel 用户名 皇帝下令斩立决
userdel -r 用户名 皇帝下令斩立决并抄家灭族
[root@zmkjedu71 ~]# userdel -r zmkjedu71
[root@zmkjedu71 ~]#
4) 密码文件
密码文件放在/etc/shadow下:
[root@zmkjedu71 ~]# head -3 /etc/shadow
root:$6$hj26LR111XvCvl3H$17JIL/R19NlkRGdqSrH6wSSoaDH/c7RGVYFreHjU/LgSCnon5IlIE5LhrnDDqZr2btery9OyPSoS4fhwV2Gwf1:18762:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
[root@zmkjedu71 ~]#
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
1)每一段的具体含义如下:
- 账户名称
- 加密后的密码,如果这一栏的第一个字符为!或者*的话,说明这是一个不能登录的账户,从上面可以看出,ubuntu默认的就不启用root账户。
- 最近改动密码的日期(这个是从1970年1月1日算起的总的天数)
- 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是0的话,则没有限制
- 密码需要重新变更的天数:如果为99999则没有限制
- 密码过期预警天数
- 密码过期的宽恕时间:如果在5中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数
- 账号失效日期,过了这个日期账号就无法使用
- 保留的
2)给用户添加密码
方法1:
[root@zmkjedu71 ~]# useradd zmkjedu71
[root@zmkjedu71 ~]# passwd zmkjedu71
更改用户 zmkjedu71 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@zmkjedu71 ~]#
方法2:
[root@zmkjedu71 ~]# echo 123456 |passwd --stdin zmkjedu71
更改用户 zmkjedu71 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@zmkjedu71 ~]#
这里有个问题,如果两个不同的用户,他们的密码一样,在/etc/shadow中加密的hash值一样吗
- [ ] 一样
- [ ] 不一样 很明显这里选不一样,要不然太容易破解了
命令 | 作用 |
---|---|
id | 用户和组的信息 |
whoami | 查看当前有效用户名 |
who | 显示目前登入系统的用户信息。 |
w | 显示已经登陆系统的用户列表 |
users | 用于显示当前登录系统的所有用户的用户列表 |
4. 修改用户的信息
1)usermod
语法:usermod 【参数】用户名
常用参数:
-u UID
-d 宿主目录
-g 起始组
-G 附加组
-s 登录shell
-L 锁定
2) 举例
修改UID
[root@zmkjedu71 ~]# id zmkjedu71
uid=504(zmkjedu71) gid=504(zmkjedu71) 组=504(zmkjedu71)
[root@zmkjedu71 ~]# usermod -u 2222 zmkjedu71
[root@zmkjedu71 ~]# id zmkjedu71
uid=2222(zmkjedu71) gid=504(zmkjedu71) 组=504(zmkjedu71)
[root@zmkjedu71 ~]#
修改shell
[root@zmkjedu71 ~]# grep zmkjedu71 /etc/passwd
zmkjedu71:x:2222:504::/opt/zmkjedu71:/bin/bash
[root@zmkjedu71 ~]# usermod -s /sbin/nologin zmkjedu71
[root@zmkjedu71 ~]# grep zmkjedu71 /etc/passwd
zmkjedu71:x:2222:504::/opt/zmkjedu71:/sbin/nologin #可以看到变成了nologin
[root@zmkjedu71 ~]#
更改用户主目录
[root@zmkjedu71 ~]# usermod -m -d /opt/zmkjedu71 zmkjedu71
usermod:无改变
[root@zmkjedu71 ~]# grep zmkjedu71 /etc/passwd
zmkjedu71:x:2222:504::/opt/zmkjedu71:/sbin/nologin
#可以看到家目录变成了/opt/zmkjedu71
[root@zmkjedu71 ~]#
5. 关于用户管理常见的面试题
1) 查找当前系统下能够登陆系统的用户
[root@zmkjedu71 ~]# grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
qi:x:500:500:qijiangtao:/home/qi:/bin/bash
qiantai:x:502:502::/home/qiantai:/bin/bash
caiwu:x:503:502::/home/caiwu:/bin/bash
[root@zmkjedu71 ~]#
2) 统计当前系统下能够登陆系统的用户个数
[root@zmkjedu71 ~]# grep /bin/bash /etc/passwd |wc -l
5
[root@zmkjedu71 ~]#
3) 增加一个新用户admin,权限是root
[root@zmkjedu71 ~]# useradd admin
[root@zmkjedu71 ~]# grep admin /etc/passwd
admin:x:2223:2223::/home/admin:/bin/bash
[root@zmkjedu71 ~]#
总结:
今年,我有一个梦想:
我在gitee上汇总了一份运维的知识体系,包含了运维大大小小的知识点,准备用一年的时间来完成写作,目前正在进行,如果你有兴趣,可以看一下gitee上的知识框架,然后加我微信报名一起来写。
所有文章写完后,我会录制视频,视频收入会分给参与的小伙伴。
这份知识体系,是你从零基础入行运维的不二选择,欢迎小伙伴的加入梦想团队。
白嫖不好,创作不易,各位的点赞就是胜寒创作的最大动力,我们下篇文章再见!