Linux 主机不会直接认识你的用户账号,它只认识 ID ,每一个账号都有它自己所对应的 ID ,保存在 /etc/passwd 这一个文件里面。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

UID User ID 用户 ID

GID Group ID 群组 ID

如何取得 UID/GID

当你登入主机时,系统会提示一个 login :的画面让你输入帐号,这个时候输完帐号和密码之后, Linux 会执行以下的动作:

1) 寻找 /etc/passwd 里面是否有这个帐号,如果有,就将该账号所对应的 UID GID 读出来,另外,该帐号的家目录与 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 :用户 ID 0 代表是系统管理员,一般来说 1~499 都是保留给系统预设的账号, 500~65535 是给一般的用户;

GID :群组 ID ,跟 /etc/passwd 差不多,

帐号的描述信息:可有可无,就是描述帐号的一些信息;

家目录:就是宿主目录; root 的家目录是在 /root ,其它的用户是在 /home/username 里面。

Shell :就是用户登入时用的 Shell Linux 默认使用 /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 ,即小于 500 UID 为系统保留

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 里建立用户的 UID GID 都是从 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 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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 后面可以加上指令喔!