用户密码和组密码分别保存在/etc/shadow和/etc/gshadow里,下面我们对这两个文件进行分析。

   首先,cat /etc/shadow:wKioL1NgjWnDQY-EAACCFbaGzmk665.jpg


shadow里保存的内容都是分段的,每段以”:“分隔,每一段的内容如下:

用户名:加密后的密码:最近一次修改密码的日期:密码最短使用天数:密码最长使用天数:提前多少天提示用户密码即将过期:密码非活动天数:密码锁定日期:保留字段

   第二段:加密后的密码

   通过man 3 crypt可知:

   $id$salt$encrtpted

   id:表示加密方法

wKiom1NglPrAHeu7AACARP0yjGk589.jpg

salt:是从[a-zA-Z0-9./]随机选取的2个字符,用来扰乱算法的

   encrtpted:用户真正的经过加密算法计算过的密码

第三段:最近一次修改密码的日期,这项表示的是1970-01-01距离密码修改日期共经历了多少天

   第四段:密码最短使用天数,0表示没有限制

   第五段:密码最长使用天数,99999表示无限制

   第七段:密码非活动天数,0表示密码过期立即锁定,-1表示密码永不过期

   第八段:密码锁定日期,这项表示的是1970-01-01距离密码修改日期共经历了多少天


   和用户密码相关的命令有passwd,usermod,chage,接下来我们一一讲解它们的用法:

   1.passwd [option] USERNAME

a.新建hadoop用户,并查看shadow

wKiom1NgpF2D7Zr6AABKNFkyxR4494.jpg

注意第二个字段是!!,因为还没有为hadoop设置密码,我们可以用passwd为用户设置密

格式:passwd USERNAME

wKiom1NgpQ2QqmzwAACTmsO7DvE912.jpg

登录成功:wKioL1NgpZfwsPy5AAAPLWO-7aw970.jpg


a.1 :

passwd还有另一种为用户设置密码的方式:

passwd --stdin USERNAME

passwd支持使用管道读取标准输入作为新密码。

wKioL1NjtRThsklcAACPChvrPP4200.jpg

b.锁定用户:

格式:passwd -l USERNAME

wKiom1NgpeCwYzoDAABB6ZtcfbM376.jpg

登录失败:

wKiom1NgpiSxT8keAAAbv-BfoPg333.jpg

查看shadow,密码段最前面多了!!,密码不对了,不能登录是正常的:

wKioL1NgpnzBzmGZAACI4YlFrAk800.jpg

c.解锁用户:

格式:passwd -u USERNAME

wKioL1NgptOg4hIMAADLsiQ00xI590.jpg

d.修改密码最短使用天数:

格式:passwd -n 天数 USERNAME

wKioL1Ngp0eQpmqKAAC8ufucP14233.jpg

e.修改密码最长使用天数

格式:passwd -x 天数 USERNAME

wKioL1Ngp-bgYeF9AADRfOS5Uyg150.jpg

f.修改提前多少天提示用户密码即将过期:

格式:passwd -w 天数 USERNAME

wKiom1NgqIKDnbrGAADUNKRSCmA701.jpg

g.修改密码非活动天数:

格式:passwd -i 天数 USERNAME

wKioL1NgqM7RqhdrAADO-dwWnAc460.jpg

h.使密码立即过期,并强制用户登录时更改密码:

格式:passwd -e USERNAME

wKiom1Ngq3LCpY-YAAA1iN3qG-g110.jpg

wKiom1Ngq9niwxNbAAB1GKvzlVo527.jpg

2.chage [option] USERNAME

a.修改最后一次密码修改日期:

格式:chage -d YYYY-MM-DD USERNAME

hadoop最后一次修改密码是2014-04-30,第3个字段为16190;通过chage更改了最后一次密码修改日期为为2014-04-29,所以第3个字段变为了16189

wKiom1Ngqlzwblh_AAGQh4hRRO0861.jpg

b.修改密码最短使用天数:

格式:chage -m USERNAME

wKiom1NgrFDjFazfAACntv2fDsg559.jpg

c.修改密码最长使用天数

格式:chage -M USERNAME

wKioL1NgrJrQjSuPAACryTOwwao203.jpg

d.修改提前多少天提示用户密码即将过期:

格式:chage -W USERNAME

wKiom1NgrUfz-xO_AAAYnubIXH0674.jpg

e.修改密码非活动天数:

格式:chage -I USERNAME

wKiom1NgrazDl0zCAAChg6AOm1Y575.jpg

f.修改过期时间:

格式:chage -E YYYY-MM-DD USERNAME

现在是2014-04-30(距离1970-01-01是16190天),我们修改密码2014-05-01过期,所以是16191

wKiom1NgrxSQFODQAADMSnp3Zso512.jpg

3.usermod

a.修改密码过期日期:

格式:usermod -e YYYY-MM-DD USERNAME

wKioL1NgrzbRySbAAAC-3yzZvK4692.jpgb.修改密码非活动天数:

格式:usermod -f 天数 USERNAME

wKiom1Ngr8nxmgkUAACpBYnnqsw638.jpg


例:

修改用户最后一次修改密码日期2014-4-20,密码最短使用2天,最长使用10天,提前7天警告,非活动天数3天。

密码2014-04-30过期,但是非活动天数是3天,2014-05-01到05-03是非活动天数,如果不修改密码将锁定。

wKioL1NgvvywWUDYAAEHah67qZ0482.jpg


由于密码2014-04-30已过期,所以登录会提示密码已过期:

wKiom1Ngv8GSp1eoAAB5d9wwyoM777.jpg


但是由于非活动天数3天,该到2014-05-03锁定,那么我们把现在的日期改为2014-05-01,理论上用hadoop登录系统时会提示修改密码:

wKioL1NgwVegJHhuAACDbW6R4Z8340.jpg


使用hadoop登录系统:

wKioL1NgwZrj7WZiAACUkaXpToI689.jpg

果然,我们的猜想都是对的。


   我们还可以给组设置密码,使用gpasswd命令:

格式:gpasswd GRPNAME

wKioL1NgsmyybZCrAABXvodeJqg847.jpg

wKioL1NgsqSiPjr9AAB9rIJXggQ364.jpg


我们给test组设置密码:

wKioL1Ngsyiy9qYRAACEkOagTzY174.jpg


切换到hadoop用户,并新建a.txt文件:

wKioL1Ngs4eQ5KbpAABWt9Ng6WE802.jpg


我们如何用hadoop用户新建b.txt的属组是test组?

wKiom1NgtB3A_xb2AAB3fL5dkcs571.jpg

查看hadoop id信息:

wKioL1NgvH-ygXfMAAB-rmcqwqs067.jpg


我们新建oracle组,并将其添加到hadoop的附加组:

wKiom1NgtSiSePF3AAB-rfmK0_8076.jpg

给oracle组设置密码:

wKioL1NgtTzSpHZ7AABC8-5r6F4939.jpg

再切换到hadoop,并切换到oracle组,新建c.txt:

wKiom1NgthSRfp6MAACE1WirVHA705.jpg

查看hadoop id信息:

wKioL1NgvLrQTVf8AACAgjkO0s0018.jpg


由下图可以看出:

键入exit并回车,新建的d.txt属组为用户hadoop的基本组

wKioL1Ngtkji72L7AAC1NzXbluo475.jpg


总结:

1.newgrp命令的作用就是log in to a new group

1使用newgrp命令切换的new group将临时作为该用户的基本组;

2.如果new group是该用户的附加组,则不需要输入密码;否则,需要输入密码;

3.使用exit退出改用户的临时基本组,返回用户自己的基本组;


newgrp的命令格式:

newgrp [-] [group],-的作用和su [-] anotheruser类似;

有关gpasswd和newgrp请自行man其详细用法。

如上述内容有错误的地方,希望大家谅解,并指出错误所在,小弟感激不尽!

我是一只小小小菜鸟,希望能飞得更高!