目录
一、配置文件
1、/etc/password
2、/etc/shadow
时间戳转日期:
3、/etc/group
4、/etc/gshadow
5、/etc/login.defs
6、/etc/default/useradd
7、/etc/skel
二、命令
1、用户创建过程
useradd/usermod/userdel/passwd/groupadd/gpasswd/newgrp/groupdel/groups命令:
2 useradd 【选项】 用户名
3 usermod [选项] 用户名
4 userdel 【选项】 用户名
5 passwd 【选项】 用户名
6 、组命令
三、其他相关命令
补充命令
Linux是一个多任务多用户的系统:
在系统各种会存在这多个用户。我们的使用者靠用户名来区分各自登陆的账号。
如果我们的用户想要使用系统资源,就必须在系统中拥有合法的账号。
在Linux中存放用户信息的文件在/etc/passwd文件中。
在/etc/passwd文件中用:当做分隔符,一共有7列。每列的内容分别是:
第一列:用户名
第二列:密码占位符(真正的密码文件在/etc/shadow)。
很多程序的运行都和权限与UID/GID有关。因此各程序要读取/etc/passwd来了解不同账号的权限。
但是如果取消密码占位符。就可以实现本地免密码登录(第二列如果为空则不能进行远程登录)。
第三列:用户ID(UID)
在用户ID中0是超级用户的ID,只要UID是0就是超级用户。
在用户ID中1-999是系统用户的范围,作用是系统服务或命令在运行时会对这些账号进行调用。通常系统账号分为两种:1-200为系统自行创建的系统账号UID。
(Centos7)201-999为保留给服务使用的账号UID 在用户ID中1000-65535是普通用户使用,
(Centos6)201-4999为保留给服务的uid 499-65535是普通用户使用。
(nfsnobody是个例外,默认安装后的uid为65534。是NFS服务的匿名访问用户的本地用户UID)
当创建一个新用户时UID从1000开始,最大到60000。2.6.x内核(uname -r查看内核版本)以后的Linux系统UID可以支持2^32的UID了(修改最大UID范围/etc/login.defs)。
第四列:初始组ID(GID)
为更加灵活的管理用户的权限,Linux里还采用用户组的概念。
有效用户组与初始用户组:
在/etc/passwd里边第四列是GID。这个GID就是初始用户组。
创建用户时如果不指定用户的初始组,则会自动创建和用户名相同的组,初始组只能有一个。也就是说用户登陆系统,立刻就拥有这个用户组的相关权限。
有效组是后续添加的组,每个用户可以属于多个有效组,用groups命令来查看当前的初始组和有效组。newgrp 组名 的格式用来切换当前的有效组。
第五列:用户描述信息(类似于“注释”,现在已经不常用)。
第六列:用户家目录
第七列:用户的shell类型:
用户会取得一个shell与系统的内核通信以进行用户的操作任务。
/bin/bash:shell类型为bash,bash shell是最常用的一种shell(能正常登陆系统)。
/sbin/nologin:不能登陆系统,可以使用系统资源。
用户密码文件,此文件对应/etc/passwd中第二列的x密码占位符。
第一列:用户名。
第二列:经过加密编码的密码,$6$开头的表明是使用SHA-512加密。
如果密码位是“!!”或“*”代表没有密码,不能登录(我们也可以在第二列用户的密码前面加入一个“!”或“*”,加入后都不能登录)(新建用户时,如果不设置密码,那么第二列为“!!”)
第三列:密码最近更改时间
此段记录了改动密码的日期,日期是由1970年1月1日作为标准时间来计算的。
日期转时间戳:(86400为每一天的秒数)
第四列:密码不可被更改的天数(与第三列相比)
第四列记录了这个账号的密码在最近一次修改过之后需要经过几天才可以再次修改。
如果是0的话,表示密码随时可以被修改。
如果设置为5的话,那么当你设置过密码后,需要等5天之后才能更改密码。
第五列:密码最长有效期(与第三列相比)
为了强制用户更改密码,这个字段可以指定密码的最长有效期。
用户必须在有效期内重设密码才行。
必须在期限时间内重设密码,否则这个账号的密码会变为过期特性。
而默认的99999(273年)表示为 近似永久。
第六列:密码到期前的警告天数(与第五字段相比)
当账号的密码有效期快到的时候,系统会依据这个字段的设置发出“警告”给这个账号,提醒他过N天后你的密码即将过期。
第七列:密码过期后的宽限天数(密码失效日,与第五字段相比)
密码过期后预留几天给账户修改密码,此时已无法使用旧密码登陆系统。
如果写入0,那么代表密码过去就马上失效。
如果写入5,那么代表密码会在5天后失效。
如果写入-1,那么代表密码永远不会失效。
第八列:账号失效日期
这里同样要写时间戳,用1970年1月1日进行时间换算,如果超过了失效时间, 用户也就失效无法使用了。
第九列:保留。
组信息文件,用户组是具有相同特征用户的逻辑集合。
第一列:用户组名称(默认组成员)。
第二列:组密码占位符。
第三列:组ID号(GID)
第四列:组内成员列表
所以把用户添加到组内的方式有两种,一种临时,一种永久。
临时:root用户设置组密码,把密码告知即将加入组的用户。用户使用组密码,通过newgrp命令切换到组内。但这种方式在重新登录之后,就会失效。
永久:写入/etc/group的方式。使用root用户给组添加管理员(gpasswd -A 管理员组名)然后使用组管理员用户,将用户添加到组内(gpasswd -a 用户名 组名)。这种添加后,会在/etc/group信息中最后一列进行记录。重新登录不会失效。并且在添加之后,用户切换的时候不用输入密码。
有效用户组与初始用户组:在/etc/passwd里边第四列是GID。这个GID就是初始用户组。也就是说用户登陆系统,立刻就拥有这个用户组的相关权限。因为是初始组,使用者一登录就会被主动取得组相关权限。不需要在/etc/group的第四列写入。有效组是后续添加的组。用groups命令来查看当前的初始组和有效组。newgrp 组名 的格式用来切换当前的有效组。
组密码文件
第一列:用户组
第二列:用户组密码,这个段可以为空或!,如果是空或!表示没有密码。
第三列:用户管理者,这个字段也可以为空,如果有多个用户组管理者,用,分隔。
第四列:组成员,如果有多个成员,用,分隔。
通过gpasswd 组名的方式来为组设置密码(需要root用户设置)。
组密码的作用:非本用户组的用户想要切换到本用户组身份时,可以通过密码来确保安全。输入密码正确,直接添加至该组。如果没有设置组密码,则只有属于本用户组的用户能够切换到本用户组的身份。
通过gpasswd -A 账户名 组名 来为组添加管理员(拥有添加或移除组员的权限,只有root有权限添加管理员,即使是默认初始组,也没有组管理员权限)。
通过gpasswd -a/-d 用户名 组名 来添加/移除组成员
用来定义创建一个用户时的默认设置,比如指定用户的UID和GID范围,用户过期时间,是否需要创建用户主目录等。
1)当用户创建时,同时在目录/var/spool/mail中创建一个用户mail文件
2)指定密码保持有效最大天数。
3)表示修改密码的间隔时间。
4)指定密码的最小长度。
5)表示密码到期前多少天系统提示用户密码到期。
6.指定UID最小为1000,也就是说创建新用户时用户的UID从1000开始。
7.指定最大UID为60000。
系统用户最小201
系统用户最大999
8.最小GID为1000。
9.最大GID为60000。
系统组ID最小201
系统组ID最大999
10.指定是否创建用户家目录,yes为创建,no表示不创建。
#创建用户时默认创建用户家目录。
#权限默认掩码值
#表示userdel删除用户时,如果该用户组没有成员存在,则会删除用户组。
#使用SHA512加密方式。
创建用户时使用的默认文件
#创建用户的默认文件
1.新创建用户时默认初始组的GID号(公共组),现在使用的都是私有组机制(根据创建用户名称创建组)
2./home表示用户家目录的位置
3.表示是否启用账号过期禁用,-1表示不启用。
4.表示账号过期,不设置表示不启用。
5.指定了新建用户的默认shell类型。
6. 指定用户家目录中默认文件的来源,新建用户家目录下的文件都是从这个目录中复制的。
7.表示是否创建邮箱缓存 yes表示创建
新用户家目录模板文件存放位置。
在创建新用户后,会在新用户家目录下看到类似.bash_profile .bashrc .bash_logout等文件。/etc/skel 目录定义了新建用户在主目录下默认的配置文件,更改/etc/skel目录下的内容就可以改变新建用户默认主目录的配置文件信息。
useradd/usermod/userdel/passwd/groupadd/gpasswd/newgrp/groupdel/groups命令:
useradd创建用户过程:
useradd不加任何参数创建时,系统首先读取用于添加用户的配置文件/etc/login.defs和/etc/default/useradd根据这两个配置文件中定义的规则添加用户。然后向/etc/passwd和/etc/group文件添加用户和用户组记录,同时/etc/passwd和/etc/group对应的加密文件也会自动生成记录。接着系统会自动在/etc/default/useradd文件设定的目录下建立用户家目录。最后复制/etc/skel目录中的所有文件到新用户的家目录中,新用户建立完成。
-u:uid用户标识号,此标识必须唯一。
-g:group指定新用户登录时所属的默认组(主组)。
-G:指定新用户的附加组,必须是已经存在的组。附加组对于默认组而言,当一个用户同时是多个组中的成员时,登录时默认组称为主组,其他组称为附加组。
-d:home指定新建用户的默认家目录,如果不指定系统会在/etc/default/useradd文件指定的目录下创建用户主目录。
-s:shell指定新建用户使用默认的shell类型,如果不指定,会在/etc/default/useradd文件中定义的shell作为新用户的默认shell。
-c:comment对新建用户添加说明信息。
-f:inactive指定账号过期多长时间后会永久停用。当值为0时账号立刻停用。当值为-1时则关闭此功能。
-M:创建时不生成用户家目录。
-u UID #修改用户的指定UID
-g 组名 #修改用户的指定初始组(尽量不修改)
-G 组名 #修改用户的附加组(不管之前设置了多少附加组,都替换掉)(加上-a选项可不替换)
-c 说明 #修改用户的描述信息
-d 目录 #结合 -m 选项直接对源家目录进行改名实现修改家目录
usermod –m –d /home/u4 user4 (用户user的原家目录是/home/user4)
-s shell类型 #修改用户的登录shell类型
-L(大) 用户名 #锁定用户的密码
-U(大) 用户名 #解锁用户密码
-l 新用户名 旧用户名 #修改用户名
-r 删除用户时,连带家目录一起删除
-l 用户名 #锁定用户的密码,使之无法登录系统。
-u 用户名 #解锁用户密码。
-S 用户名 #查看用户账号状态。
第一次对一个用户使用时是为此用户创建密码,第二次使用时是修改密码。
当普通用户没有密码时,自己是修改不了密码的。
非交互式密码设置:
echo "123123" | passwd --stdin user1
用非交互式的方式设置user1的密码为123123
groupadd 【选项】 GID 组名
-g:指定新建用户组的GID,该GID必须唯一,不能和其他用户组的GID重复。
-o:表示新用户组的GID可以与系统中已有的用户组的GID相同。
gpasswd 【选项】 用户名 组名
-a:向指定组内添加一个成员
-d:把指定用户从组内删除
-M:定义组内成员列表,用户之间用,分隔(覆盖式)
newgrp 组名
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户权限,newgrp主要用于在多个用户组之间进行切换,可以使用exit退出。
groupdel 组名
groupdel用于删除用户组,如果该用户组中扔包括某些用户,则必须先删除这些用户后,才能删除用户组。
groups
查询用户所属哪些组。
1. id 用户名
#显示用户的UID、初始组、附加组列表
2. su 用户名
#切换用户身份
su - 用户名
#su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。
以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。(也可以分别用env命令查看区别)
小实验:
切换root用户把/etc/passwd文件中user1的shell类型改成/bin/csh。
退出root用户,分别用su和su-切换用户用useradd命令看效果(切换后pwd看到的目录有区别)。
3.finger:查看用户详细信息。
[root@localhost ~]#finger username
1.blkid:查看uuid(通用唯一识别码)
2.whoami:查看当前用户是谁
3.ps aux:查看系统进程
4.history:查看历史命令
5.exit:退出当前 再其他组时先退出组再退用户