Linux是一个多用户多任务的操作系统,可以满足多个用户可以同时登陆系统,并且可以发起多个进程在系统中运行。为了考虑到每个用户自身的隐私,因此不同的用户可以访问的文件是不同的。
要实现用户账号的管理,要完成的工作主下几个方面:
1.用户账号的添加、删除和修改
2.用户组的添加、修改和删除
3.密码(口令)的管管理
一、用户账号的添加、删除和修改(useradd usermod userdel)
①用户的类别
管理员:具有使用系统所有权限的超级用户
普通用户:即一般用户,其使用系统的权限受限
系统用户:保障系统运行的用户,用于运行服务程序
登录用户:系统资源的正常使用者,权限受限
②用户标识 UID(UserID)
可以理解为用户的“***”,大多数linux系统采用16bits二进制数字来表示UID,范围 为0-65535。
管理员:0
系统用户:
CentOS 5,6:1-499
CentOS7 1-999
普通用户:
CneOS 5/6 :500+
CentOS 7:1000+
③用户组:
组类别:
管理员组
普通用户组
系统组
普通组
④组标示:GID(GroupID)
管理员组
普通用户组
系统组
CentOS 5,6:1-499
CentOS7 1-999
登录组:
CneOS 5/6 :500+
CentOS 7:1000+
⑤组的分类:
1.以用户为核心
用户的主组:基本组
用户的附加组:额外组
2.根据组内容纳的用户来划分
私有组:与用户名相同,且只有此用户
公共组:组内包含了多个用户
⑥添加用户 useradd
useradd [OPTION] name
-c:注释信息
-d: /PATH/TO/HOME_DIR ,指定一个路径作为家目录,目标路径不能实现存在,否则会有警告,不会复制skel的文件给用户。
-g:用户的基本组组名或GID
-G:用户所属的附加组(额外组)列表,如果有多个用户彼此间用逗号隔开,中间没有空格
-k:从哪里复制样本目录
[root@localhost ~]# useradd -c "test" -d /home/sam -g testgroup -G lin sam
[root@localhost ~]# id sam
uid=1005(sam) gid=1002(testgroup) groups=1002(testgroup),1001(lin)
-m:强制创建家目录
-M:不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为yes
[root@localhost ~]# useradd -M test1
[root@localhost ~]# ls /home
lin marry sam
-r:创建一个管理用户 , 默认不在/home创建家目录,而是/root
[root@localhost ~]# useradd -r test2
[root@localhost ~]# tail -1 /etc/passwd
test2:x:991:986::/home/test2:/bin/bash
-s:指明用户默认shell,默认为空,让让系统根据 /etc/default/useradd 中的 SHELL变量选择默认的登录shell
-u:指明用户 ID 。数值必须唯一,并且非负。除非使用了 -o 选项。默认使用大于等于/etc/login.defs中UID_MIN,
[root@localhost ~]# useradd -s /bin/csh -u 1999 test3
[root@localhost ~]# tail -1 /etc/passwd
test3:x:1999:1999::/home/test3:/bin/csh
-D:显示创建用户时的默认设置;相当于查看cat/etc/default/user
-s 设置默认shell
-e, --expiredate:用户账号过期期限,过期会锁定,日期以YYYY-MM-DD
-f, --inactive INACTIVE:密码过期后,账户被彻底禁用之前的天数。0 表示 立即禁用,-1 表示禁用这个功能(不会被锁定)
[root@localhost ~]# useradd -s /bin/sh -e 2019-10-10 -f 10 test4
[root@localhost ~]# tail -1 /etc/shadow
test4:!!:16873:0:99999:7:10:18179:
[root@localhost ~]# tail -1 /etc/passwd
test4:x:2001:2001::/home/test4:/bin/sh
4.修改用户权限usermod:
usermod [options] name
-c:注释信息,
[root@localhost ~]# tail -1 /etc/passwd
test4:x:2001:2001::/home/test4:/bin/sh
[root@localhost ~]# usermod -c test4 test4
[root@localhost ~]# tail -1 /etc/passwd
test4:x:2001:2001:test4:/home/test4:/bin/sh
-d:修改家目录路径,一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中
-e:改变账号过期时间。
-g:改变基本组
[root@localhost mnt]# usermod -e 2018-08-03 -g root test4
-G:修改所属的附加组id,修改时会覆盖原有的附加组,一同使用
[root@localhost mnt]# usermod -G 1118 test4
-a,表示为用户添加新的附加组
-l:修改当前用户的用户名
-s:修改shell
[root@localhost mnt]# usermod -s /bin/tcsh test4
-u:基本ID号。UID
[root@localhost mnt]# usermod -u 1876 test4
-L:用来锁定用户密码,会在用户加密的密码之前防止一个"!"
-U:用来解锁用户密码,这将会移除加密的密码之前的!
5.删除用户账号usedel:
[root@localhost mnt]# userdel test3
-r:同时删除用户邮箱/var/spool/mail(生产环境中不要-r,mv到其他地方等过段日子真的不需要再删除)
二、用户账号的添加、删除和修改
①添加组groupadd
groupadd [OPTION] groupname
-g:指明GID
[root@localhost mnt]# groupadd -g 1666 test
-r,--system:系统组; CentOS5 中是 1-499 CentOS7中1-999
[root@localhost mnt]# groupadd -r test3
②修改组groupmod
-g:修改GID
[root@localhost mnt]# groupmod -g 1667 test
-n:修改组名
③删除组groupdel
[root@localhost mnt]# groupdel test
三、密码口令的管理
①加密机制
密码:加密存放,使用单向加密机制;
单向加密:仅能加密,不能解密;用于提取数据特征码
数据相同:加密结果相同
定长输出:无论原始数据多大输出结果一样。
雪崩效应:输出数据有一点变化,数据产生巨大变化
常用的加密方式:
md5 sha512
①passwd
passwd [option] [用户名]
1.passwd:修改自己密码
2.passwd username:修改指定用户的密码
[root@localhost mnt]# passwd test4
Changing password for user test4.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
选项:
-l:锁定密码
[root@localhost mnt]# passwd -l test4
[root@localhost mnt]# cat /etc/shadow | grep "test4"
test4:!!$6$nTSiuoBG$UD.XtnRtQNVt2UCMKHlHj/sf65A97dt4xg3miyet5mTivzv0ZICrRcZK5kZkW9NntNfO/dYH.TpfOjA8HNbbp1:16873:0:99999:7:10:17746:
#啊感叹号代表锁定
-u:解锁密码
[root@localhost mnt]# passwd -u test4
Unlocking password for user test4.
passwd: Success
-f:强制
-d:清除密码
[root@localhost mnt]# passwd -d test4
Removing password for user test4.
passwd: Success
-e:账号过期期限
stdin:从标准输入接收密码
echo "GOODB" |passwd --stdin USERNAME
当Linux启动后,我们输入账号密码正确后就登录系统,错误的话会提示无法登录那么系统是如何判断输入的用户名是以前在系统上创建的,并且输入的密码是正确的?
首
其实Linux中有个文件/etc/passwd,存放的就是用户的信息。我们先来看看这个文件里面放置着什么内容吧。
[root@localhost mnt]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
用户名:用户口令:用户标识UID:组标识GID:注释:家目录:默认shell
1.用户名:用于区分不同的用户。在同一系统中注册名是唯一的
2.用户口令:系统用口令来验证用户登录的合法性,开启系统之门的钥匙,超级用户 root可以修改任何一个用户的密码,普通用户也可以修改自己的密码。
#注意:由于考虑到/etc/passwd这个文件任何一个用户都可以查看,处于安全的考虑,通常将passwd文件中的口令字使用一个“x”来代替,而/etc /shadow作为真正的口令放在/etc/shadow中,不能被普通用户读取的,只有超级用户才有权读取。
3.用户标识UID:
用于区别不同的用户,对用户进行的编号,和“***”差不多吧
4.组标识GID:
具有相似属性的多个用户可以被分配到同一个组内,方便系统管理
5.注释:
包含用户相关信息,例如全名电话住址
6.家目录:
用户登录系统后默认的家目录,管理员root的工作目录为/root
7.默认shell:
Shell是当用户登录系统时运行的程序名称系统支持的shell在/etc/shell中
③用户组管理:gpasswd
gpasswd [OPTION] group
选项:
-a USERNAME:把用户添加至组中
[root@localhost mnt]# gpasswd -a test4 root
Adding user test4 to group root
-d USERNAME:从此组中移除此用户
[root@localhost mnt]# gpasswd -d test4 root
Removing user test4 from group root