Linux-8 用户管理
什么是用户?
-
Linux/Windows通过用户来管理和维护系统;
- Windows下的管理员用户:Administrator
- Linux下的管理员用户:root
-
Windows/Linux都是多用户系统
- Windows同一时间只能使用1个用户
- Linux可以多用户同时登陆,互相之间不影响
-
用户识别的本质(Linux如何识别用户)
- 人类:看用户名
- Linux识别用户通过UID(用户的id号码)
- root用户的UID是0
[root@destiny ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@destiny ~]# id root uid=0(root) gid=0(root) groups=0(root)
-
Linux用户分类
用户分类 作用 特点 root(uid 0) 管理维护整个系统 老子天下第一 普通用户(uid>=1000) 只能查看和管理自己的一亩三分地 管理特定服务 虚拟用户(傀儡用户)(uid 1~1000) 让linux下面服务正常运行所需要的 为了服务正常运行所需要,并不需要登录到系统,设置密码,切换用户 [root@destiny ~]# id hanyi uid=1000(hanyi) gid=1000(hanyi) groups=1000(hanyi)
为什么要有用户
- Linux系统日常维护需要使用用户
- 服务/进程运行也是需要用户
用户相关文件-/etc/passwd(熟练)
- /etc/passwd并不是用来记录密码
- 记录的是用户的信息:用户名、uid、家目录、命令解释器
- 格式:用户名:密码:UID:GID:用户说明信息:用户的家目录:用户使用的命令解释器shell
- 密码:存放账户的口令,暂用x表示,密码保存在/etc/shadow
- UID:user id 身份证号码 用户id
- GID:group id 户口本号码、家庭号码 组id
- 一般UID和GID是一样的
- root家目录是/root,普通用户家目录存在/home/username(可自定义)
- 用户使用的命令解释器
- /bin/sh和/bin/bash是普通用户或者root用户
- /sbin/nologin说明该用户是虚拟用户/傀儡用户
- /bin/sh是/bin/bash的软链接,在一般的linux系统当中,使用sh调用执行脚本相当于打开了bash的POSIX标准模式,也就是说 /bin/sh 相当于 /bin/bash --posix
- /bin/sh执行过程中,若出现命令执行失败,则会停止执行;/bin/bash执行过程中,若命令执行失败,仍然会继续执行
- Ubuntu原来的命令解释器叫做/bin/dash
- unix的命令解释器叫做csh或者tcsh
用户相关文件-/etc/shadow(了解)
[root@destiny ~]# man 5 shadow
[root@destiny ~]# cat /etc/shadow
-
密码信息
字段名称 注释说明 1.用户登陆名 //用户的账号名称 2.加密后的密码 //用户密码,这时加密过的口令 ------------------了解---------------------------------------------- 3.最近一次密码更改时间 //从1970年到最近一次更改密码时间之间过了几天 4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制) 5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期) 6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认是过期提前7天警告) 7.密码到期后保持活动的天数 //在此期限内,用户依然可以登录系统并更改密码,指定天数过后,账户 被锁定 8.账户到期标志 //从1970年起,账户在这个日期前可使用,到期后失效 9.标志 //保留
-
查询某个特定的用户是否存在
-
使用grep
[root@destiny ~]# grep "test" /etc/passwd | wc -l 1 -->说明用户存在;则跳过判断; 2 -->说明用户不存在;则进行创建操作;
-
使用id
id username [root@destiny ~]# id root uid=0(root) gid=0(root) groups=0(root) $? # 判断上一次的命令是否执行成功;0 成功;其他任何数字都是失败;
-
-
创建用户会在系统的哪个配置中保存信息
-
/etc/passwd:用户信息;
-
root:x:0:0:root:/root:/bin/bash #以冒号为分隔符
第一列:用户名称
第二列:用户的密码;x——>不可见——>/etc/shadow
第三列:用户的UID
第四列:用户组的GID
第五列:用户的描述信息;(手机号;等等)
第六列:用户的家目录
第七列:用户的登录Shell类型 /bin/bash——>正常登录 /sbin/nologin——>禁止登陆
-
-
/etc/shadow:密码信息;
-
bin:*:18535:0:0:99999:7:2:66275:
第一列:用户名称
第二列:用户的密码;(一段不可读的密文;(* !! 说明这个用户没有密码;))
第三列:最近一次变更密码,用户从1970年 到现在过了多少天;
第四列:密码的最短使用天数;0为不限制;
第五列:密码最长使用的天数;99999为不限制;
第六列:密码到期前7天,系统会警告
第七列:密码到期后,密码过期后2天强制提示用户更改密码
第八列:账户失效时间,从1970年起,账户在这个日期前可使用,到期后失效;
-
-
管理用户和密码的方式,不仅仅只有用户+密码这一种
- 密钥;
- 堡垒机;
- ldap;
-
-
如何创建用户,删除用户,修改用户?
-
创建用户
-
useradd
-
adduser
-
[root@destiny ~]# which useradd /usr/sbin/useradd [root@destiny ~]# which adduser /usr/sbin/adduser # 它们都在同一个目录下 [root@destiny ~]# ll /usr/sbin/adduser lrwxrwxrwx. 1 root root 7 Dec 6 16:55 /usr/sbin/adduser -> useradd
-
#1. 创建bgx用户,UID5001,基本组students,附加组sa 注释信息:2019 new student,登录shell:/bin/bash # 先创建组 [root@destiny ~]# groupadd sa [root@destiny ~]# groupadd students # 再创建用户 useradd # -u:指定UID -g:指定组名称 -G:指定附加组名称 -c:附加描述信息(可忽略) -s:指定登录Shell窗口的类型 [root@destiny ~]# useradd -u 5001 -g students -G sa -c "2019 new student" -s /bin/bash bgx [root@destiny ~]# id bgx uid=5001(bgx) gid=1002(students) groups=1002(students),1001(sa) #2. 创建mysql系统 用户, # -M:不建立用户家目录, # -s:指定nologin使其用户无法登录系统 # -r:创建系统用户 [root@destiny ~]# useradd mysql -r -M -s /sbin/nologin [root@destiny ~]# id mysql uid=996(mysql) gid=994(mysql) groups=994(mysql)
-
基本组:原生家庭;
附加组:认来的;
——————————>有一些操作无法执行;但是附加组是有权限的;加入附加组;就具备操作这类资源的权限;
-
-
修改用户
-
usermod
-
#选项 # -u:指定要修改用户的UID # -g:指定要修改用户基本组 # -G:指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组 # -d:指定要修改用户家目录 # -s:指定要修改用户的bash Shell # -c:指定要修改用户注释信息 # -l:指定要修改用户的登录名 # -L:指定要锁定的用户 # -U:指定要解锁的用户 # 1.检查此前创建的用户信息 [root@destiny ~]# grep "bgx" /etc/passwd bgx:x:5001:1002:2019 new student:/home/bgx:/bin/bash # 2.修改bgx用户uid,gid,附加组 [root@destiny ~]# groupadd -g 5008 network_sa [root@destiny ~]# groupadd -g 5009 devops [root@destiny ~]# usermod -u 6001 -g5008 -a -G 5009 bgx # 3.修改bgx用户的注释信息,用户家目录,登录shell,登录名 [root@destiny ~]# usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx #检查是否修改成功 [root@destiny ~]# grep "bgx" /etc/passwd change_bgx:x:6001:5008:2019 new student:/bgx:/bin/sh [root@destiny ~]# id change_bgx uid=6001(change_bgx) gid=5008(network_sa) groups=5008(network_sa),1001(sa),5009(devops) [root@destiny ~]# ll -d /bgx drwx------. 2 change_bgx network_sa 62 Jan 12 08:44 /bgx
-
-
删除用户
-
userdel
-
#选项 -r:删除用户同时删除它的目录 # 1.删除user1用户,但不删除用户家目录和mail spool [root@destiny ~]# userdel user1 # 2.-r参数可以连同用户家目录一起删除(慎用) [root@destiny ~]# userdel -r user1 # 有进程正在使用该用户,无法删除;只有进程退出后,用户没有被占用,才可以处理; [root@destiny ~]# userdel www userdel: user www is currently used by process 2559
-
-
与用户相关的还有很多命令,以下简单列举一些,但都不是常用命令,所以了解即可
- 使用finger命令查询用户信息以及登录信息,示例:finger UserName
- 使用chfn命令修改用户信息,示例:chfn UserName
- 使用chsh命令修改用户登录Bash Shell,示例:chsh UserName
- 使用who、whoami、w检查用户登陆情况
-
-
如何为用户设定密码,又如何修改密码?
-
不能太简单;容易被暴力破解;
-
太复杂;记不住;
不用记住密码;就要复杂;——>专门存储密码的文件或软件;lastpass 1password
使用passwd命名来实现:
-
超级管理员
- 随意修改任何人的密码
- 密码强度可以随意
-
普通用户执行
- 仅修改自己的,不可以修改其他人
- 密码强度必须要满足8个字符及以上
-
passwd使用方法:
交互式修改密码:
passwd username
#root用户 [root@destiny ~]# passwd dba Changing password for user dba. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. #普通用户 [dba@destiny ~]# passwd dba passwd: Only root can specify a user name. [root@destiny ~]# passwd Changing password for user dba. Changing password for dba. (current) UNIX password: New password: BAD PASSWORD: The password is shorter than 8 characters New password: Retype new password: passwd: all authentication tokens updated successfully.
非交互式修改密码:
[dba@destiny ~]# echo "123" | passwd --stdin dba Changing password for user dba. passwd: all authentication tokens updated successfully.
强度较高的密码:
# -l 长度 # -d 数字 # -c 小写 # -C 大写 # -s 特殊字符 [root@destiny ~]# mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1 0BAuH|8hz0 [root@destiny ~]# mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1 6jj|JsF90Y #设定一个随机密码 [root@destiny ~]# echo "$(mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1)" | tee ok.txt | passwd --stdin dba Changing password for user dba. passwd: all authentication tokens updated successdully. [root@destiny ~]# cat ok.txt Hp7uHEc=32
-
-
用户创建的流程
-
系统创建用户参考的两个配置文件
-
/etc/login.defs
[root@destiny ~]# grep -vE "^#|^$" /etc/login.defs MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # 定义普通用户的UID范围 UID_MIN 1000 UID_MAX 60000 # 定义系统用户的UID范围 SYS_UID_MIN 201 SYS_UID_MAX 999 # 定义组的GID范围 GID_MIN 1000 GID_MAX 60000 #定义系统组的GID范围 SYS_GID_MIN 201 SYS_GID_MAX 999 CREATE_HOME yes UMASK 077 USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512
-
/etc/default/useradd
# useradd defaults file GROUP=100 HOME=/home #把用户的家目录建在/home中 INACTIVE=-1 #是否启用账号过期停权,-1表示不启用 EXPIRE= #账号终止日期,不设置表示不启用 SHELL=/bin/bash #新用户默认所有的shell类型 SKEL=/etc/skel #配置新用户家目录的默认文件存放路径 CREATE_MAIL_SPOOL=yes #创建mail文件
-
-
当使用useradd创建用户时,创建的用户家目录下会存在.bash_*环境变量相关的文件,这些环境变量文件默认从/etc/skel目录中拷贝。这个默认拷贝环境变量为u之是由/etc/defaults/useradd配置文件中定义的
#故障案例,在当前用户家目录执行了rm -rf .*,喜爱次登陆系统时出现-bash-4.1$,如何解决: -bash-4.1$ cp -a /etc/skel/.bash* ./ -bash-4.1$ exit [root@destiny ~]# #重新连接即可恢复
-
如果在创建时,我们自行指定了参数,那么优先使用定义的;如果没有定义则使用默认配置(/etc/login.defs | /etc/default/useradd)
用户组如何管理
-
什么是组?
在整个网络中,各个访问网络的用户的权限可能是各不相同的,可以将具有相同权限的用户划为一组。
-
组的分类
- 默认组:创建与用户同名的组;
- 基本组:用户的主要的组; -g 指定
- 附加组:额外指定的组; -G 指定
- useradd kk -G video,book
- 创建kk用户;创建一个默认组kk;
- 将kk用户添加到video组 和 book组;
-
创建组
groupadd
选项:-g :指定gid
[root@destiny ~]# groupadd g1 -g 1456 [root@destiny ~]# tail -1 /etc/group g1:x:1456:
- 四列:
- 组名称
- 组密码
- 组gid
- 附加组成员
- 四列:
-
修改组
groupmod
[root@destiny ~]# tail -1 /etc/group g1:x:1456: [root@destiny ~]# groupmod g1 -g 5656 [root@destiny ~]# tail -1 /etc/group g1:x:5656:
-
删除组
groupdel
[root@destiny ~]# groupdel g1
-
组中存在成员怎么办?
-
附加组还是基本组
-
附加组:
如果组中只有附加组成员,直接删除;用户附加组信息会自动被移除;
-
基本组
-
直接创建用户,会创建一个同名的组
[root@destiny ~]# useradd nice [root@destiny ~]# id nice uid=1007(nice) gid=1010(nice) groups=1010(nice) #用户存在,不可以直接删除组 [root@destiny ~]# groupdel nice groupdel: cannot remove the primary group of user 'nice'
-
创建一个组;有一些成员加入,该如何删除该组;
[root@destiny ~]# useradd zhangsan -g dev [root@destiny ~]# useradd lisi -g dev [root@destiny ~]# id zhangsan uid=1007(zhangsan) gid=1010(dev) groups=1010(dev) [root@destiny ~]# id lisi uid=1008(lisi) gid=1010(dev) groups=1010(dev) [root@destiny ~]# groupdel dev groupdel: cannot remove the primary group of user 'zhangsan' # 移除所有用户即可删除该组
-
-
-
-