linux用户:
linux用户大体分为两种:一是:管理员用户;二是普通用户,普通用户又可以分为系统用户和登录用户。因为linux是一个多用户多任务的系统,所以每一个要使用系统资源的用户,都要向管理员申请一个账号,使用这个账号登录到系统。每个用户都拥有一个自己的名字和密码,以登录到用户。
每个用户都有唯一的用户标识(userid,UID),是以16bits二进制数字来表示0-65535。以CentOS为例管理员用户的UID是0;普通用户的UID为1-65535,其中系统用户的UID在centos6及早些版本为1-499,在CentOS7中为1-999。登录用户在CentOS6及早些版本为500-60000,在CentOS7中为1000-60000。
Linux组的类别:
有些时候一些用户需要统一管理,于是就可以创建一些用户组。同理用户组也分为管理员组和普通用户组,他们也有他们的组标识(GID),他们的分配方法与UID的完全相同。有时一个用户需要多重身统工作,所以用户组又可以分为用户的主组和附加组。也因为权限的不同可以分为私有组和公共组,顾名思义私有组属于用户自己私有,所以私有组与用户名同名且只有一个用户,公共组就可以拥有多个成员。
用户的主要组(主组):
用户必须属于一个且只有一个主组(基本组)
组名同用户名,且仅包含一个用户:私有组
用户的附加组(辅助组):
一个用户可以属于零个或多个辅助组,可以使用id 或 groups命令来查看用户所属的组
如图所示用户 test 就有属于两个组,主组为root,附加组为nobody。
用户和组的配置文件
当用户登录linux系统时,由于linux并不认识账号名称,所以它会先去查找一个名为/etc/passwd的文件,通过识别UID进行名称解析,用户组名称也需要解析,但是它是通/etc/group的文件进行名称解析。用户的密码存储在/etc/shadow文件下,用户组的密码存储在/etc/gshadow下。而为了防止账户丢失,密码都是通过加密保存的,加密算法通常有以下三类:对称加密,非对称加密和单项加密
Linux用户和组的主要配置文件:
-
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
-
/etc/group:组及其属性信息
-
/etc/shadow:用户密码及其相关属性(只有管理员用户可以查看)
-
/etc/gshadow:组密码及其相关属性(只有管理员用户可以查看)
可以用man来查看一下文件的具体信息,使用whatis命令可以看到,所需要了解的为man手册的第五章。
man 5 passwd,可以看到这个文件中主要有这七个部分:
下面我们来具体的了解一下这四个配置文件:
1、passwd 文件格式
-
login name:登录用名(wang)
-
passwd:密码(x)
-
UID:用户身份编号(1000)
-
GID:登录默认所在组编号(1000)
-
GECOS:用户全名或注释
-
home directory:用户主目录(/home/wang)
-
shell:用户默认使用shell (/bin/bash)
通过查看/etc/passwd这个文件可以查看用户信息,也可以使用getent命令来实现
在文件中第二列密码项是以“X”显示,这是出于安全考虑,由于普通用户也可以查看passwd文件,所以直接显示密码很不安全,所以这文件已密码项用“X”取代,而真正的密码存放着/etc/shadow文件中。 当然,我们也可以让它显示密码,而带来的结果就是/etc/shadow文件消失。
可以使用命令:pwunconv : passwd unconvert
使passwd文件中的密码不转换成x,而且shadow文件会消失
恢复命令 : pwconv
2、shadow文件格式
-
登录用名
-
用户密码:一般用sha512加密
-
从1970年1月1日起到密码最近一次被更改的时间
-
密码再过几天可以被变更(0表示随时可被变更) minimum password age
#口令最短使用时间
-
密码再过几天必须被变更(99999表示永不过期)maximum password age
#口令最长使用时间,若时间小于最短使用时间,则表示禁止用户修改口令
-
密码过期前几天系统提醒用户(默认为一周) password warning period
-
密码过期几天后帐号会被锁定 password warning period
-
从1970年1月1日算起,多少天后帐号失效。account expiration date
密码时间表,如图所示:
命令:chage -d0 USERNAME,,使用户的最近一次被更改时间为0,迫使用户下次登录必须改口令
passwd -e USERNAME :迫使用户下次登录必须改口令
查看用户的密码信息可以直接查看shadow文件也可以使用getent命令
管理员可以使用命令锁定用户:usermod -L USERNAME
可以看到用户的密码前多了一个!,这就代表着禁止登陆。
解锁用户:usermod -U USERNAME,
解锁用户,将用户/etc/shadow 密码栏的! 拿掉
注意:centos早期版本可以连续执行两次,使用户空密码,但在centos6,7中禁止连续执行解除用户密码。
可以看到用户的第二列密码项,是通过加密计算过的,加密算法通常有以下三类:对称加密,非对称加密和单项加密。
密码加密
加密机制:
加密:明文–> 密文
解密:密文–> 明文
单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
-
md5: message digest, 128bits
-
sha1: secure hash algorithm, 160bits
-
sha224: 224bits
-
sha256: 256bits
-
sha384: 384bits
-
sha512: 512bits
更改加密算法authconfig–passalgo=sha256 –update
(修改用户以后新增或更改密码的加密算法)
出于安全考虑密码不仅经过了加密算法加密,而且还在其中加入了salt,这样即使两个用户的密码一样,通过加入salt的加密,显示也不会一样。
我们平时使用密码时,也需要一些密码的安全策略,尽量使用复杂的密码!
密码的复杂性策略
-
使用数字、大写字母、小写字母及特殊字符中至少3种
-
足够长
-
使用随机密码
-
定期更换;不要使用最近曾经使用过的密码
3、group文件格式
-
群组名称:就是群组名称
-
群组密码:通常不需要设定,密码是被记录在/etc/gshadow
-
GID:就是群组的ID
-
以当前组为附加组的用户列表(分隔符为逗号)
命令:groups,id 查看用户的组
更改用户组成员关系后,必须从新登陆才能识别
从组中删除用户:groupmems -d USERNAME -g GROUP
4、gshdow文件格式
-
群组名称:就是群组名称
-
群组密码:
-
组管理员列表:组管理员的列表,更改组密码和成员
-
以当前组为附加组的用户列表:(分隔符为逗号)
用户有密码,用户组也有密码,但是用户组的密码和用户的密码用途有所不同。如若新用户知道某个用户组的密码,那么用户完全可以自己通过组密码临时加入用户组,执行一些权限。(较为危险!)
命令:newgrp :临时切换主组(临时生效)
用户若知道组口令,则可以主动加入群组
用户和组的配置文件,已经大致的说了一下。我们可以通过修改配置文件来实现某些目的,然而有时直接修改配置文件,往往会有一些失误的操作。所以,直接通过文本编辑器修改配置文件较为危险。那么我们可以通过一些命令来达到修改文件的目的。
文件操作命令
-
vipw和vigr
-
pwck和grpck
vipw = vi /etc/passwd (可以检查格式是否正确,较安全)
vigr = vi /etc/group
pwck passwd chcek (检查passwd)
grpck group check ( 检查group)
用户和组管理命令
用户管理命令
useradd
usermod
userdel
组帐号维护命令
groupadd
groupmod
groupdel
用户管理命令:
用户创建:useradd
语法: useradd[options] LOGIN
选项:
-
-u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs
-
-o 配合-u 选项,不检查UID的唯一性
-
-g GID:指明用户所属基本组,可为组名,也可以GID
-
-c "COMMENT":用户的注释信息
-
-d HOME_DIR:以指定的路径(不存在)为家目录
-
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-
-G GROUP1[,GROUP2,…]:为用户指明附加组,组必须事先存在
-
-N 不创建私用组做主组,使用users组做主组
-
-r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000
一条命令命令就可以创建用户,而且文件的配置文件齐全,这是因为有默认值的存在,
默认值设定:/etc/default/useradd文件中
显示默认设置:
-
useradd-D
更改默认设置:
-
useradd–D -s SHELL
新建用户的相关文件和命令
-
/etc/default/useradd : 默认值的设定
-
/etc/skel/* : 用户家目录创建时拷贝的模板
-
/etc/login.defs : 定义新建用户的一些信息
命令:newusers
-
newusers passwd格式文件 : 批量创建用户
1、创建一个文件,格式为/etc/passwd文件的格式
2、newusers FILENAME
-
chpasswd 批量修改用户口令
1、创建一个文件,格式为 username:passwd
2、cat FILENAME | chpasswd
例:
1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
[root@localhost ~]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
2、创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser
[root@localhost ~]# useradd -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser testuser
[root@localhost testuser]# echo "centos" | passwd –stdin testuser
[root@localhost testuser]# cp -r /etc/skel/.[^.]* /testdir/testuser/
用户属性修改: usermod
语法:usermod[OPTION] login
选项:
-
-u UID: 新UID
-
-g GID: 新基本组
-
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
-
-s SHELL:新的默认SHELL;
-
-c 'COMMENT':新的注释信息;
-
-d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m选项
-
-l login_name: 新的名字;
-
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-
-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-
-e YYYY-MM-DD: 指明用户账号过期日期;
-
-f INACTIVE: 设定非活动期限;
例:
3、修改testuser uid:4321,主组:root,辅助组:nobody, loginname :test,home:/home/test 家数据迁移
[root@localhost ~]# usermod -u 4321 -g root -G nobody -l test -d /home/test -m testuser
删除用户:userdel
语法:userdel[OPTION]… login
选项:-r: 删除用户家目录;
可以看到用户及用用户之前的家目录被删除。
在平时的学习中,经常需要切换用户来实现一些操作,如果退出再登陆用户,有些麻烦。我们可以使用su命令,来切换用户执行命令。
su命令:切换用户或以其他用户身份执行命令
语法:su [options…] [-] [user [args…]]
选项: -l –login
su-l UserName 相当于 su – UserName
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su – UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
有时切换用户只是为了执行一条命令,那么这样来回的切换也略显得有些麻烦,那么我们可以使用su命令的其他选项。
换个身份执行命令:
su [-] UserName -c 'COMMAND'
执行完命令后 可以发现还是当前用户
前面我们也提到了保存密码的文件,/etc/passwd和/etc/shadow文件,每次修改命令我们完全没有必要去修改文件那么麻烦,下面我们就来说一下专门用来更改用户密码的命令–passwd
设置密码 passwd
语法:passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码;
常用选项:
-
-l:锁定指定用户
-
-u:解锁指定用户
-
-e:强制用户下次登录修改密码
-
-n mindays: 指定最短使用期限
-
-x maxdays:最大使用期限
-
-w warndays:提前多少天开始警告
-
-iinactivedays:非活动期限;
-
–stdin:从标准输入接收用户密码;
-
echo "PASSWORD" | passwd–stdinUSERNAME
前面也提到了 passwd -e USERNAME命令,强制是用户更改密码,还有一种实现的方法也有提到,就是
chage -d0 USERNAME命令,而chage命令就是用来修改用户的密码策略的命令。
修改用户密码策略 chage
语法:chage[OPTION]… LOGIN
选项:
-
-d LAST_DAY
-
-E, –expiredateEXPIRE_DATE
-
-I, –inactive INACTIVE
-
-m, –mindaysMIN_DAYS
-
-M, –maxdaysMAX_DAYS
-
-W, –warndaysWARN_DAYS
-
–l,显示密码策略
下一次登录强制重设密码
chage -d0 USERNAME #强制使用户下次登陆修改密码
chage -m 0 –M 42 –W 14 –I 7 USERNAME #设置用户的最小使用天数为0,最大使用天数为42天,提前14 天提醒密码即将到期,密码过期后7天内可以修改,超过7天没有 修改密码则锁定账号。
chage -E 2016-09-10 USERNAME #用户到指定日期锁定。
上文我们提到/etc/shadow文件的格式,(不记得的话向上翻页查看),而chage命令就可以更改用户密码的使用策略。
创建组:groupadd
语法:groupadd[OPTION]… group_name
选项:
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组;
CentOS 6: ID<500
CentOS 7: ID<1000
组属性修改:groupmod
语法:groupmod [OPTION]… group
选项:
-n group_name: 新名字
-g GID: 新的GID;
组删除:groupdel
语法:groupdel GROUP
groupadd,groumod,groupdel的使用方法和useradd,usermod,userdel的使用方法非常相似,只是一个是针对于组一个是针对于用户而已。我们学会了如何使用useradd命令,自己就会了groupadd命令。
组密码:gpasswd
语法:gpasswd [OPTION] GROUP
选项:
-a user: 将user添加至指定组中;
-d user: 从指定组中移除用户user
-A user1,user2,…: 设置有管理权限的用户列表
newgrp命令:临时切换基本组;
如果用户本不属于此组,则需要组密码
groups [OPTION].[USERNAME]… 查看用户所属组列表
gpasswd命令的使用方法和passwd的使用方法略有不同,gpasswd不仅可以更改组密码,还可以增删组成员。
而newgrp命令可以让用户暂时的加入某个组,并使这个组为主组,以方便一些操作。
知道了gpasswd命令可以增删命令,还有一个命令比gpasswd的功能还要强大,它可以更改查看组的成员
更改和查看组成员:groupmems
语法:groupmems[options] [action]
options:
-
-g, –group groupname更改为指定组(只有root)
Actions:
-
-a, –add username 指定用户加入组
-
-d, –delete username 从组中删除用户
-
-p, –purge 从组中清除所有成员
-
-l, –list 显示组成员列表
原创文章,作者:Groot,如若转载,请注明出处:http://www.178linux.com/28202