linux用户管理

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用户管理1.PNG

用户和组的配置文件

   当用户登录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手册的第五章。

linux用户管理2.png

man 5 passwd,可以看到这个文件中主要有这七个部分:

linux用户管理3.png

下面我们来具体的了解一下这四个配置文件:

1、passwd 文件格式

  1. login name:登录用名(wang)

  2. passwd:密码(x)

  3. UID:用户身份编号(1000)

  4. GID:登录默认所在组编号(1000)

  5. GECOS:用户全名或注释

  6. home directory:用户主目录(/home/wang)

  7. shell:用户默认使用shell (/bin/bash)

通过查看/etc/passwd这个文件可以查看用户信息,也可以使用getent命令来实现

linux用户管理4.png

   在文件中第二列密码项是以“X”显示,这是出于安全考虑,由于普通用户也可以查看passwd文件,所以直接显示密码很不安全,所以这文件已密码项用“X”取代,而真正的密码存放着/etc/shadow文件中。 当然,我们也可以让它显示密码,而带来的结果就是/etc/shadow文件消失。

可以使用命令:pwunconv : passwd unconvert

使passwd文件中的密码不转换成x,而且shadow文件会消失

恢复命令 : pwconv

linux用户管理5.png

linux用户管理6.png

2、shadow文件格式

  1. 登录用名

  2. 用户密码:一般用sha512加密

  3. 从1970年1月1日起到密码最近一次被更改的时间

  1. 密码再过几天可以被变更(0表示随时可被变更)  minimum password age

    #口令最短使用时间

  1. 密码再过几天必须被变更(99999表示永不过期)maximum password age

    #口令最长使用时间,若时间小于最短使用时间,则表示禁止用户修改口令

  1. 密码过期前几天系统提醒用户(默认为一周) password warning period

  1. 密码过期几天后帐号会被锁定 password warning period

  1. 从1970年1月1日算起,多少天后帐号失效。account expiration date

密码时间表,如图所示:

linux用户管理7.png

命令:chage -d0 USERNAME,,使用户的最近一次被更改时间为0,迫使用户下次登录必须改口令

passwd -e USERNAME :迫使用户下次登录必须改口令

linux用户管理8.png

查看用户的密码信息可以直接查看shadow文件也可以使用getent命令

linux用户管理9.png

管理员可以使用命令锁定用户:usermod -L USERNAME

linux用户管理10.png

可以看到用户的密码前多了一个!,这就代表着禁止登陆。


解锁用户usermod -U  USERNAME,

    解锁用户,将用户/etc/shadow 密码栏的! 拿掉

linux用户管理11.png

注意:centos早期版本可以连续执行两次,使用户空密码,但在centos6,7中禁止连续执行解除用户密码。

   可以看到用户的第二列密码项,是通过加密计算过的,加密算法通常有以下三类:对称加密,非对称加密和单项加密。


密码加密

加密机制:

加密:明文–> 密文

解密:密文–> 明文

单向加密:哈希算法,原文不同,密文必不同

相同算法定长输出,获得密文不可逆推出原始数据

雪崩效应:初始条件的微小改变,引起结果的巨大改变

  • md5: message digest, 128bits

  • sha1: secure hash algorithm, 160bits

  • sha224: 224bits

  • sha256: 256bits

  • sha384: 384bits

  • sha512: 512bits

更改加密算法authconfig–passalgo=sha256 –update

(修改用户以后新增或更改密码的加密算法)

linux用户管理12.png

 出于安全考虑密码不仅经过了加密算法加密,而且还在其中加入了salt,这样即使两个用户的密码一样,通过加入salt的加密,显示也不会一样。


我们平时使用密码时,也需要一些密码的安全策略,尽量使用复杂的密码!

密码的复杂性策略

  • 使用数字、大写字母、小写字母及特殊字符中至少3种

  • 足够长

  • 使用随机密码

  • 定期更换;不要使用最近曾经使用过的密码



3、group文件格式

  • 群组名称:就是群组名称

  • 群组密码:通常不需要设定,密码是被记录在/etc/gshadow

  • GID:就是群组的ID

  • 以当前组为附加组的用户列表(分隔符为逗号)

命令:groups,id 查看用户的组

linux用户管理13.png

更改用户组成员关系后,必须从新登陆才能识别

从组中删除用户:groupmems  -d  USERNAME -g GROUP

4、gshdow文件格式

  • 群组名称:就是群组名称

  • 群组密码:

  • 组管理员列表:组管理员的列表,更改组密码和成员

  • 以当前组为附加组的用户列表:(分隔符为逗号)

 用户有密码,用户组也有密码,但是用户组的密码和用户的密码用途有所不同。如若新用户知道某个用户组的密码,那么用户完全可以自己通过组密码临时加入用户组,执行一些权限。(较为危险!)

命令:newgrp :临时切换主组(临时生效)

linux用户管理14.png

用户若知道组口令,则可以主动加入群组

  用户和组的配置文件,已经大致的说了一下。我们可以通过修改配置文件来实现某些目的,然而有时直接修改配置文件,往往会有一些失误的操作。所以,直接通过文本编辑器修改配置文件较为危险。那么我们可以通过一些命令来达到修改文件的目的。


文件操作命令

  • 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文件中

linux用户管理15.png

显示默认设置:

  • useradd-D

linux用户管理16.png

更改默认设置:

  • useradd–D -s SHELL

linux用户管理17.png

新建用户的相关文件和命令

  • /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

linux用户管理18.png

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

linux用户管理19.png

[root@localhost testuser]# echo "centos" | passwd –stdin testuser

[root@localhost testuser]# cp -r /etc/skel/.[^.]* /testdir/testuser/

linux用户管理20.png

用户属性修改: 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

linux用户管理21.png

删除用户:userdel

语法:userdel[OPTION]… login

选项-r: 删除用户家目录;

linux用户管理22.png

可以看到用户及用用户之前的家目录被删除。

  在平时的学习中,经常需要切换用户来实现一些操作,如果退出再登陆用户,有些麻烦。我们可以使用su命令,来切换用户执行命令。

su命令:切换用户或以其他用户身份执行命令

语法:su [options…] [-] [user [args…]]

选项:   -l –login

    su-l UserName 相当于 su – UserName

linux用户管理23.png

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录

24.pnglinux用户管理

su – UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

25.pnglinux用户管理

root su至其他用户无须密码;非root用户切换时需要密码

26.pnglinux用户管理

有时切换用户只是为了执行一条命令,那么这样来回的切换也略显得有些麻烦,那么我们可以使用su命令的其他选项。

换个身份执行命令:

    su [-] UserName -c 'COMMAND'

linux用户管理27.png

执行完命令后 可以发现还是当前用户

linux用户管理1470224858458605.png

  前面我们也提到了保存密码的文件,/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不仅可以更改组密码,还可以增删组成员。

29.PNG

而newgrp命令可以让用户暂时的加入某个组,并使这个组为主组,以方便一些操作。

30.PNG

知道了gpasswd命令可以增删命令,还有一个命令比gpasswd的功能还要强大,它可以更改查看组的成员

更改和查看组成员:groupmems

语法:groupmems[options] [action]

options:

  • -g, –group groupname更改为指定组(只有root)

Actions:

  • -a, –add username 指定用户加入组

  • -d, –delete username 从组中删除用户

  • -p, –purge 从组中清除所有成员

  • -l, –list 显示组成员列表

31.PNG

原创文章,作者:Groot,如若转载,请注明出处:http://www.178linux.com/28202