Linux主机不会直接认识你的用户账号,它只认识ID,每一个账号都有它自己所对应的ID,保存在 /etc/passwd 这一个文件里面。
UIDUser ID 用户ID
GIDGroup ID 群组ID
如何取得UID/GID
当你登入主机时,系统会提示一个login:的画面让你输入帐号,这个时候输完帐号和密码之后,Linux会执行以下的动作:
1)寻找 /etc/passwd 里面是否有这个帐号,如果有,就将该账号所对应的UIDGID读出来,另外,该帐号的家目录与shell设定也一起读出来;如果没有这帐号,则退出;
2)接着就是审核密码,Linux会进入 /etc/shadow 里面找也对应的账号与UID,然后核对一下你刚刚输入的密码与shadow这个文件里的密码是否相同;
3)上面两步都通过后,就进入Shell 控制阶段;
 
与账号相关的几个文件:/etc/passwd  ,  /etc/shadow  /etc/group  /etc/gshadow
/etc/passwd 文件
/etc/passwd这一文件里面的内容每一行代表一个账号,里面很多账号都是系统必须要的,也就是系统帐号,不能随意删除的。这个文件内容如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
。。。。。。。。
 
就拿root账号的那一行来作说明,你可以看出是以 ’作分隔符,共7列,分别代表的是:
账号名称 :密码 UID GID :帐号的描述信息 :家目录 Shell
帐号名称:就是用户的登入名
密码:早期的系统的密码是放在这个文件中的,但是因为安全问题,这个字段的数据就放到/etc/shadow 文件中了,这样的话这一字段只有一个X了;
UID:用户ID0代表是系统管理员,一般来说1~499都是保留给系统预设的账号,500~65535是给一般的用户;
GID:群组ID,跟/etc/passwd差不多,
帐号的描述信息:可有可无,就是描述帐号的一些信息;
家目录:就是宿主目录;root的家目录是在/root,其它的用户是在/home/username里面。
Shell:就是用户登入时用的ShellLinux默认使用/bin/bash
 
/etc/shadow 文件
这一文件只有ROOT用户才可以读,预设属性是『-rw-------』或者是『-r--------;
/etc/shadow 的内容:
root:$1$JVBSVyHQ$Zwi1CokXI07tZpYbB6r9p1:14282:0:99999:7:::
ky:$1$Xyv3y9b5$A79oybU2k3BgN6tCwYX53.:14283:0:99999:7:::
bin:*:14282:0:99999:7:::
daemon:*:14282:0:99999:7:::
adm:*:14282:0:99999:7:::
lp:*:14282:0:99999:7:::
sync:*:14282:0:99999:7:::
同样以分隔, 9个字段;分别是:
1)账号名称:必须与/etc/passwd 相同
2)密码:这个是真正的密码,不过是经过加密的,如果密码栏的第一个字符是 * 或者是!
那么表示的就是这个账号是不能够登录的。
3)最近更改密码日期
4)密码不可更改的天数:从最近更改密码日期起的几天内是不能更改密码,0代表无限制。
5)密码需要重新变更的天数:从最近更改密码日期起的天数,就是密码到期的时间。
6)密码到期前的警告期限:密码到期前的几天提示警告信息,提示用户修改密码。
7)密码过期宽限时间:密码到期后,也就是密码失效了,你还可以使用,但过了这个宽限期,你还没有更改密码,那么你的账号就失效了,会无法登入系统。
8)账号失效日期:这个账号到了规定的日期之后,将无法使用。
9)保留
 
/etc/group 文件
这个文件记录GID与群组名称对应的。
root:x:0:root
bin:x:1:bin,daemon,root
daemon:x:2:bin,daemon,root
sys:x:3:bin,adm,root
adm:x:4:adm,daemon,root
。。。。。。。
 
也是以‘:‘分隔,共4栏,分别代表:
1)群组名称
2)群组密码:一般不用设定,密码也是被记录在/etc/gshadow 里面。
3)GID:群组ID
4)群组的成员账号:多个账号之间用逗号‘,’分开。
 
/etc/gshadow文件
记录群组密码,同样是以‘:’作为分隔字符,共4栏;分别是:
1)群组名称
2)密码栏,如开头为!表示无法登入
3)群组管理员账号
4)群组的成员账号
 
OK,了解过与账号相关的几个文件之后,接着当然就是帐号管理了。
既然是帐号管理,首先要说的肯定是新增账号了,直接用useradd命令就可以添加了,简单吧,useradd的命令一些参数如下:
[root@linux ~]# useradd [-u UID] [-g initial_group] [-G other_group]
 -[Mm] [-c 说明栏] [-d home] [-s shell] username
参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个群组名称 ,该 group ID (GID) 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的群组名称则是这个账号还可以支持的群组。 这个参数会修改 /etc/group 内的相关资料。
-M :强制!不要建立用户家目录
-m :强制!要建立用户家目录
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~就是用户和描述信息。
-d :指定某个目录成为家目录,而不要使用默认值;
-r :建立一个系统的账号,这个账号的 UID 会有限制 (/etc/login.defs)
-s :后面接一个 shell ,预设是 /bin/bash
 
当建立一个账号时,一些在/etc/passwd 里面的值会去参考 /etc/default/useradd 这一个档案的里面的内容。
用户目录建立的参考的文件就是 /etc/skel/* 里的文件。
用户的UID/GID的设定参考的文件是 /etc/login.defs里,内容如下:
MAIL_DIR        /var/spool/mail    //用户预设邮件放置目录
PASS_MAX_DAYS   99999   //密码需要重新变更的天数,/etc/shadow的第5
PASS_MIN_DAYS    0       //密码不可更改的天数,/etc/shadow的第4
PASS_MIN_LEN     5       //密码长度,建议改到7位以上
PASS_WARN_AGE   7      //密码到期前的警告期限,/etc/shadow的第6
UID_MIN         500       //用户最小的UID,即小于500UID为系统保留
UID_MAX        60000     //用户最大的UID
GID_MIN          500      //用户自定群组的最小GID,小于500为和系统保留
GID_MAX         60000     //用户最大的GID
CREATE_HOME     yes      //在不加 –M –m时,是否主动建立家目录
UMASK           077       //默认家目录的权限设置
USERGROUPS_ENAB yes     //使用userdel去删除一个账号时,该账号所属的初始群组已经没有人隶属改群组,那么就删除该群组。
 
到这里了应该可以明白在RedHat里建立用户的UIDGID都是从500开始了吧。而且可以知道useradd 这个命令在新增用户时,至少参参考以下的几个地方:/etc/default/useradd 
/etc/login.defs  /etc/skel/*  这几个地方。
 
使用useradd 命令创建用户号,在默认情况下是不可以登录系统的,为什么?你可以看一下grep   username  /etc/shadow里面的密码栏,看到了吧,,是两个!! ,前面我们说了这个字段要是以!开始的是不给登入系统的。
现在我们要启用账号,直接用passwd给他设定一下密码就好了。
命令格式:[root@rhel5 ~]# passwd username   //这是管理员给用户设定密码/重设密码
如果passwd后面不跟用户名,就是更改当前用户的密码,要验证旧密码。
注意:新密码除了要符合/etc/login.defs里面规定的最小密码位数之外,还会受到/etc/pam.d/passwd这个PAM模块的检验。为了安全,密码最好不要小于8位数,符合密码复杂性,也就是最好有三种组合以上的密码。
 
usermod 命令
usermod可用来修改用户帐号的各项设定。
[root@linux ~]# usermod [-cdegGlsuLU] username
参  数:
 -c<备注>  修改用户帐号的描述信息。 /etc/passwd的第5
 -d<登入目录>  修改用户登入时的目录。  /etc/passwd的第6
 -e<有效期限>  格式是YYY-MM-DD修改帐号的有效期限。 /etc/passwd的第8 
 -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。 
 -g<群组>  修改用户所属的群组。  /etc/passwd的第4
 -G<群组>  修改用户所属的附加群组。 修改的是 /etc/group
 -l<帐号名称>
  修改用户帐号名称。 /etc/passwd 的第一栏

 -L  锁定用户密码,使密码无效。  /etc/shadow 的密码栏
 -s<shell>  修改用户登入后所使用的shell 
 -u<uid>  修改用户ID  /etc/passwd 3栏的
 -U  解除密码锁定。
例:[root@linux ~]# usermod e 2009-08-20 kyhack   //使用户密码在09820失效。
 
userdel 命令
userdel作用就是删除用户。这个太简单了;
[root@linux ~]#userdel  username
参数:
-r :连同使用者的家目录也一起删除
 
chsh命令
chsh(change shell)作用就是更换登入系统时使用的shell;
[root@linux ~]#chsh s /bin/sh
参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s :设定修改自己的 Shell
 
chfn命令
chfn(change finger information)的作用就是改变finger指令显示的信息。
[root@linux ~]# chfn
参  数:
 -f<真实姓名>--full-name<真实姓名>  设置真实姓名。 
 -h<家中电话>--home-phone<家中电话>  设置家中的电话号码。 
 -o<办公地址>--office<办公地址>  设置办公室的地址。 
 -p<办公电话>--office-phone<办公电话>  设置办公室的电话号码。 
 
finger命令
finger作用就是查找并显示用户信息。
[root@linux ~]#finger username
参  数:
  -l  列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容。 
  -m  排除查找用户的真实姓名。
  -s  列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。 
  -p  列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。
这个些参数很都不常用。都差不多的。
 
id命令
id命令作用是显示用户的ID,以及所属群组的ID
 
groupadd 命令
groupadd 命令作用就是添加群组
[root@linux ~]# groupadd groupname
参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID
-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
 
groupdel 命令
作用就是删除群组
[root@linux ~]#groupdel groupname
 
groupmod 命令
作用就是更改群组识别码或名称。
[root@linux ~]# groupmod [-g gid] [-n group_name]
参数:
-g :修改既有的 GID 数字
-n :修改既有的群组名称
 
gpasswd 命令
作用就是给群组设置密码;就可以用newgrp命令来切换有效群组了。
[root@linux ~]# gpasswd groupname
[root@linux ~]# gpasswd [-A user1,...] [-M user3,user4...] groupname
[root@linux ~]# gpasswd [-rR] groupname
参数:
:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些账号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效,所以 newgrp 就不能使用了!
 
newgrp 命令
作用是登入另一个群组。
[root@linux ~]# newgrp [群组名称]
 
passwd 命令
作用是设置密码;
[root@linux ~]# passwd [-lunxwS] username
 -d  删除密码。本参数仅有系统管理者才能使用。 
  -f  强制执行。 
  -k  设置只有在密码过期失效后,方能更新。 
  -l  锁住密码。 
  -s  列出密码的相关信息。本参数仅有系统管理者才能使用。 
  -u  解开已上锁的帐号。
-n  后面接天数 (数字) ,最短天数;亦即是 /etc/shadow 内的第四栏;
-x  后面接天数 (数字) ,最长天数;亦即是 /etc/shadow 内的第五栏;
-w  后面接天数 (数字) ,警告天数;亦即是 /etc/shadow 内的第六栏;
 
su 命令
作用切换用户
[root@linux ~]# su [-lcm] [username]
参数:
- :如果执行 su - 时,表示该使用者想要变换身份成为 root ,且使用 root
环境设定参数档,如 /root/.bash_profile 等等。
-l :后面可以接用户名,例如 su -l dmtsai ,这个 -l 好处是,可使用欲变换身份者 他的所有相关环境设定档。
-m -m -p 是一样的,表示『使用目前的环境设定,而不重新读取新使用者的设定档。』
-c :仅进行一次指令,所以 -c 后面可以加上指令喔!