我们专注服务于当下互联网基础设施建设与云计算、大数据时代的各种需求!

linux下的帐户系统文件

linux系统中,用户和组的相关系统都保存在用户和组数据库文件中,主要有“/etc/passwd”、“/etc/shadow”、“/etc/group”和“/etc/gshadow”四个文件。

(1),用户帐号文件-passwd
/etc/passwd文件也称为密码文件,是于基本的用户数据库文件,它列出了所有有效用户的相关信息。passwd文件需要能够被所有用户访问。该文件内每个用户占一行,被分为7个字段:
(1) 用户名;
(2) 密码,采用加密形式;
(3) UID;
(4) GID;
(5) 帐号信息,也叫GECOS。
(6) 用户主目录;
(7) 登录shell。

/etc/passwd中UID很重要,系统使用UID而不是用户名来区别用户。0-99为系统UID,如果passwd文件中有两个不同用户具有相同的UID,则这两个用户对相互的文件具有相同的存取权限。

/etc/passwd文件qq格式可以使root能够要求用户定期修改他们的口令。passwd文件中,有些加密口令项中有“,”号,“,”号后字符的意义为:
(1)第一个字符,口令有效期的最大周数,
(2)第二个字符,再次修改口令前原口令需使用的最小周数,
(3)其余字符表示口令最新修改时间。
steve:xyDfccTrt180x,M.y8:0:0:admin:/:/bin/sh
pat:xmotTVoyumjls:0:0:admin:/:/bin/sh

口令中“,”后字符是根据passwd_esc计数器计算的,计算的方法为:
:=0
/=1
0~9=2~11
A~Z=12=37
a~z=38~63
root需要将前两个字符放进/etc/passwd文件中,以要求用户定期修改口令,另外两个字符在用户修改口令时由passwd自动写入。可在“,”后加入“..”,使用户在下次登录时必须修改口令。有两种特殊情况:
(1)第一字符小于第二字符,则不允许用户修改口令,仅root可以修改;
(2)前两个字符都是“.”,用户下次登录时将被要求修改口令,修改后passwd命令将“.”删除,以后不再要求用户修改口令。

(2),用户口令文件-shadow
在影子口令机制中,加过密的口令数据项被从passwd文件中转移到shadow文件中,passwd文件仍然可以被系统上所有用户访问,shadow文件只能被具有root权限的用户访问。shadow文件包含着口令失效期和帐号是否被禁用等信息,分为9个字段:
(1) 用户名;
(2) 加过密的口令。如果为空则登录时不需要口令,如果含有不属于口令集{.,/,0-9,A-Z,a-z}中的字符,则对应的用户不能登录;
(3) 从1970年1月1日起计算,到用户最后一次修改口令时的天数(时间起点会因系统不同而不同);
(4) 两次修改口令之间所需的最小天数,即一次修改后需要再过多少天才能修改这个口令;
(5) 口令保持有效的最大天数,即一次修改后需要再过多少天这个口令必须被修改;
(6) 警告天数,需要在这个口令失效前多少天对用户发出警告;
(7) 口令失效后多少天禁用此帐号,另外的解释是用户没有登录活动但帐号仍能保持有效的天数;
(8) 从1970年1月1日起计算,该口令已经被禁用多少天,另外的解释是帐号从设置开始可使用的天数;
(9) 保留。

(3),用户组帐号文件-group
每个用户至少会属于一个分组,也就是他缺省的用户分组。在需要的情况下,用户还可以分配到其他分组中去。group文件也需要能够被所有用户访问,因为这样应用程序才能测试用户与分组之间的关联性。分组名不允许超过8个字符,每个分组ID也必须是唯一的。/etc/group包含着每个每个用户缺省的分组ID(GID),分为4个字段:
(1) 分组名;
(2) 加过密的分组口令;
(3) GID;
(4) 以“,”分隔的分组成员清单

(4),使用vipw和vigr命令编辑用户帐号文件和组帐号文件
vipw或vigr启动vi编辑器打开文件的一个副本,每次只允许一个人编辑passwd或group文件,可以防止用户在passwd文件被编辑的时候修改他们的口令。当编辑结束时,用副本代替原文件。可以使用“vipw -s”给shadow文件加入对应的项。

(5),使用pwck和grpck验证用户和组帐号文件
pwck命令检查密码文件passwd和shadow的完整性,以确认文件中的信息都有正确的格式、各数据域有合法的信息。对于不正确的信息建议用户删除。
grpck命令检查group和gshadow文件的完整性,以确认文件中的信息都有正确的格式、各数据域有合法的信息。

2,用户帐号维护命令

(1),useradd命令
#useradd [参数] 用户名
useradd命令允许一次添加一个用户到系统中,如果命令中不定义参数,则使用各参数的默认值,可以使用“useradd-D”命令查看各参数的默认值。
-c 其他信息 (在GECOS域中设置用户全名,与其它参数一样,如果设置值中间有空格,必须在两端加上引号)
-d 主目录 (缺省情况下,用户主目录被定义为/home/用户名,此参数可以改变主目录)
-e 失效日期 (缺省情况下,帐号永不失效,此参数可以设置用户失效日期,日期格式为MM/DD/YY,2000年用00表示)
-f 天数 (此参数定义口令失效后该帐号还能够使用的天数,0表示立刻禁用,-1表示永不禁用,缺省值为-1)
-g 分组名或GID (此参数定义用户的缺省分组,后面可以跟分组名或GID,但分组必须已经在group文件中定义)
-G 分组名或GID (此参数把用户添加到其他的分组中去,可用“,”分隔,定义多个分组)
-M (不建立用户登录子目录)
-n (redhat把建立一个与新用户同名的分组做为用户添加工作的一部分,此参数禁止这种行为)
-s shell路径 (此参数可定义用户的登录shell,缺省为/bin/bash)
-u UID (缺省情况下,程序会自动找出一个可用的UID分配给新用户,此参数可将指定UID分配给新用户)
#useradd -c “H.D.core” -g admin -G sopport,root -s /bin/tcsh hdc
(添加一个名为hdc的用户,命名为H.D.cor,缺省分组为admin并属于sopport和root组,登录shell为/bin/tcsh)

(2),usermod命令
#usermod [参数] 用户名
usermod命令允许修改现有用户的信息,它的工作原理与useradd类似,参数作用相同。在使用-l和-u参数时应注意,必须确认被修改的用户当前没有登录上机或运行任何程序,否则会引起不便。
-l 新用户名 (此参数可修改现有用户的登录名)

(3),userdel命令
#userdel [-r] 用户名
userdel命令可删除现有用户,此命令只有-r一个可选参数。在不加参数时,将只删除passwd、shadow和group中关于此用户的项目,加-r参数将递归地删除以上项目和登录子目录中该用户的所有文件。

3,组帐号维护命令:

(1),groupadd命令
对于用户分组进行操作的命令类似于对用户进行操作的命令,但他们并不作用于单个用户,而是作用于/etc/group文件中列出的分组。改变分组并不会改变该分组中用户的属性。
#groupadd [参数] 分组名
-g GID (指定新分组的GID,缺省情况下系统会把GID指定为找到的第一个可用值)
-r (缺省情况下,系统会自动搜索第一个大于499的GID值,此参数告groupadd命令这个一个系统分组,需要使用第一个小于499的可用值)
-f (在添加新分组时,如果该分组已经存在,命令会自动退出执行,使用此参数,在退出执行前不会修改分组的设置值)
#groupadd -g 800 test (添加一个GID为800,名为test的分组)

(2),groupmod命令
groupmod命令可以修改某个现有分组的属性。
#groupmod [参数] 分组名
-g 新GID (改变现有分组的GID为新GID)
-n 新组名 (改变现有分组的分组名为新组名)
#group -g 1000 -n new test (将test分组的GID和分组名分别改为1000和new)

(3),groupdel命令
#groupdel 分组名 (删除指定分组,此命令没有可选参数)

4,口令维护命令

(1),passwd命令
root可以使用passwd命令修改任何用户的口令。passwd会提示用户输入一个新口令,并需要重复输入一次,如果输入的口令过于简单,passwd会发出抱怨,要求用户使用复杂一些的口令。
#passwd [参数] 用户名
-k或–keep-token (保持没有到期认证的令牌)
-d或–delete (从指定的用户名删除口令,root only)
-l或–lock (锁住指定的用户名,root only)
-u或–unlock (解锁指定的用户名,root only)
-f或–force (强制操作)
-x或–maximum=DAYs (最大密码生存天数,root only)
-n或–minimum=DAYs (最小密码生存天数,root only)
-w或–warning=DAYs (密码失效前对用户发出警告的天数,root only)
-i或–inactive=DAYs (密码失效后多少天禁用此帐户,root only)
-S或–status (报告指定帐户的口令状态,root only)
–stdin (从stdin读取新的令牌,root only)
–usage (显示简短的使用信息)

(2),gpasswd命令
类似于passwd命令,root可用gpasswd修改任何组的口令。
#gpasswd 分组名

(3),chfn命令
chfn用来改变finger信息,该信息是存放在/etc/passwd档内的GECOS信息,可使用finger命令来显示。linux的finger显示4段信息:真实姓名、工作地点、办电和宅电。
#chfn [参数] [用户名]
-f 姓名 (改变指定用户的姓名)
-o office (改变指定用户的工作地)
-p phone (改变指定用户的办电)
-h homephone (改变指定用户的宅电)

(4),chsh命令
chsh用来改变用户的登录shell,如果在命令列没有指定shell,chsh会提示一个有效shell给用户。
#chsh [参数] [用户名]
-s (更改指定用户的登录shell)
-l (列出记录在/etc/shells文件中的shell)

5,用户和组状态命令

(1),id命令
id命令用于显示指定用户的实际ID和有效ID。
#id [参数] [用户名]
-a (忽略,用于兼容其他版本)
-g (只显示有效{effective}GID)
-G (显示所有GID)
-n (显示用户名而不是数字,不可单独使用)
-r (显示实际ID而不是有效ID)
-u (只显示有效UID)

(2),whoami命令
whoami命令用于查看当前用户名。

(3),su命令
使用su命令可以从当前用户切换为其他用户,如不加用户名,则切换为root用户。出于安全的考虑,系统一般禁止root从除系统控制台外的其他方式登录,以root身分登录一般使用su命令。从root切换到其他用户时不需要输入口令。su不记录以root身份做了什么,它会创建一条日志说明谁在什么时候变成了root。
#su [参数] [用户名]
-,-l,–login (类似重登录为新用户,以新用户改变环境变量及登录目录)
-c 命令(变为新用户,执行一条“命令”后再变回原用户)
-f(不读取启动文件,如“csh,cshre”等,仅用于csh或tcsh两种shell)
-m,-p(不改变环境变量)

(4),groups命令
groups命令用来显示指定用户的属组。
#groups 用户名

6,临时禁用帐号
在不删除帐号的情况下临时禁用它,可以先编辑tail脚本,然后将该帐号的登录shell改为此脚本,此脚本需设置可执行位。
#mkdir /usr/local/lib/no-login/ (建立no-login目录)
#vi /usr/local/lib/no-login/deny (建立deny文件,加入以下内容)

#!/usr/bin/tail +2 (#!表示该行是一条命令,需要执行,+2表示显示第2行以后的内容)
This account has been closed!
Please call 13995096098.

#chomd 755 /usr/local/lib/no-login/deny (给deny文件添加可执行位)

#chsh -s /usr/local/lib/no-login/deny 用户名 (改变需要禁用的帐号的登录shell为deny)