1、基本文件介绍:
先介绍基本的名词概念吧,太基本了,我只列出来,你若不知道什么意思,就自己百度吧:
UID和GID:每个登陆linux系统的使用者都会取得两个ID,分别是UID(user id)和GID(group id),每个文件都会有拥有者ID,和拥有群组ID,也就是UID/GID。
/etc/passwd 和 /etc/shadow:前者是用户信息,后者是用户密码信息。一个用户在登陆框输入账号密码进行login的时候,系统会先找passwd文件里是否有这个账号,没有则跳出,有的话则读出账号对应的UID和GID,该账号的home目录与shell设定也读出;下一步会去shadow文件里找对应UID的密码,核对密码正确就进入shell控管阶段。
在passwd文件中的UID和GID号,0号ID是专门给root用户或者组的,1--499一般是给系统内部的用户;我们平时建立的用户一般用500--65535.
/etc/group和/etc/gshadow:前者记录GID与群组名称的对应,后者用来设置群组密码。
有效群组(effective group)和初始群组(initial group):
还记得每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID 吧?那个 GID 就是所谓的『初始群组 ( initial group ) 』了!也就是说,当使用者一登入系统,立刻就拥有这个群组的相关权限的意思。 举例来说,我们上面提到 dmtsai 这个使用者的 /etc/passwd 与 /etc/group 还有 /etc/gshadow 相关的内容如下:
[root@linux ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow
/etc/passwd:dmtsai:x:501:501::/home/dmtsai:/bin/bash
/etc/group:users:x:100:dmtsai
/etc/group:dmtsai:x:501:
/etc/gshadow:users:::dmtsai
/etc/gshadow:dmtsai:!::
仔细看到上面这个表格,在 /etc/passwd 里面,dmtsai 这个使用者所属的群组为 GID=501 , 也就是 /etc/group 里头 dmtsai 那个群组啦~因为这是 initial group ,所以, 使用者一登入就会主动取得,不需要在 /etc/group 的第四个字段写入该账号的! 但是非 initial group 的其它群组可就不同了。举上面这个例子来说,我将 dmtsai 加入 users 这个群组当中,由于 users 这个群组并非是 dmtsai 的初始群组,因此, 我必须要在 /etc/group 这个档案中,找到 users 那一行,并且将 dmtsai 这个账号加入第四栏, 这样 dmtsai 才能够支持 users 这个群组啊。
如何知道自己所属的群组?
groups命令:
[dmtsai@linux ~]$groups
dmtsai users
在这个输出的讯息中,我知道我同时属于 dmtsai 及 users 这个两个群组,而且, 第一个输出的群组即为有效群组 (effective group) 了。 也就是说,我的有效群组为 dmtsai 啦~此时,如果我以 touch 去建立一个新档,例如: touch test ,那么这个档案的拥有者为 dmtsai ,而且群组也是 dmtsai 的啦。 这样就可以了解什么是有效群组。
如何变更有效群组呢?
这个有两个方法,不论是那个方法,都是以 newgrp 达成的! 以上面这个例子来说,因为我的 dmtsai 使用者同时拥有 dmtsai 与 users 两个群组,因此, dmtsai 当然可以随时切换 dmtsai/users 成为有效群组啰。所以,我可以下达:
[dmtsai@linux ~]$newgrp users
[dmtsai@linux ~]$ groups
users dmtsai
此时,我的有效群组就成为 users 了。当然,要能够顺利切换有效群组的话,还需要 /etc/gshadow 的辅助才行~这个等一下我们会说明的。好了,那么如果你开始在 /home/dmtsai 这个家目录底下尝试建立一个档案,例如『 touch test2 』好了,会发生什么状态呢? 呵呵!那个档案的群组竟然变成 users 了!这样更清楚有效群组的意义了吧?!
2、手动建立一个账户,熟悉各种文件
1. 先建立所需要的群组 ( vi /etc/group );
2. 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );
3. 建立账号的各个属性 ( vi /etc/passwd );
4. 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );
5. 建立该账号的密码 ( passwd accountname );
6. 建立使用者家目录 ( cp -a /etc/skel /home/accountname );
7. 更改使用者家目录的属性 ( chown -R accountname.group /home/accountname )。
具体操作:
1. 建立群组 normalgroup ,假设 520 这个 GID 没有被使用!并且同步化 gshadow
[root@linux ~]# vi /etc/group
# 在最后一行加入底下这一行!
normalgroup:x:520:
[root@linux ~]# grpconv 这个命令就是将group文件同步到gshadow文件中
[root@linux ~]# grep 'normalgroup' /etc/group /etc/gshadow
/etc/group:normalgroup:x:520:
/etc/gshadow:normalgroup:x::
# 简单!搞定群组啰! ^_^
2. 建立 normaluser 这个账号,假设 UID 700 没被使用掉!
[root@linux ~]# vi /etc/passwd
# 在最后一行加入底下这一行!
normaluser:x:700:520::/home/normaluser:/bin/bash
3. 同步化密码,并且建立该使用者的密码
[root@linux ~]# pwconv
[root@linux ~]# grep 'normaluser' /etc/passwd /etc/shadow
/etc/passwd:normaluser:x:700:520::/home/normaluser:/bin/bash
/etc/shadow:normaluser:x:13030:0:99999:7:::
# 呵呵!没错没错!已经建立妥当啰~但是密码还不对~
[root@linux ~]# passwd normaluser
Changing password for user normaluser.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
4. 建立使用者家目录,并且修订权限!
[root@linux ~]# cp -a /etc/skel /home/normaluser
[root@linux ~]# chown -R normaluser:normalgroup /home/normaluser
别怀疑!这样就搞定了一个账号的设定了!
3、各个用户之间的交流:talk、mesg、wall、write
那么我是否可以跟系统上面的使用者谈天说地呢?当然可以啦! 利用 talk 这个指令即可!不过, talk 需要额外的启动一些网络服务, 对于目前的 Linux distribution 以及网络环境,嘿嘿!咱们还是不要玩这个东西啦~ 如果您确定想要玩这个玩意儿,那么请自行 man talk , 同时考虑启动 ntalk 这个服务看看啰~ 除了直接在线对谈 (talk) 之外,有没有其它讯息传送的功能啊? 有啊!利用 write 是不错的方式啦!他可以直接将讯息传给接收者啰! 举例来说,我们的 Linux 目前有 vbird 与 dmtsai 两个人在在线:
[vbird@linux ~]$ w
16:50:39 up 1:58, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
vbird pts/0 vbird 4:37pm 0.00s 0.06s 0.01s w
dmtsai pts/1 dmtsai 4:38pm 1:51 0.07s 0.01s man write
我以 vbird 传送一个讯息给 dmtsai 时,可以这样做:
[vbird@linux ~]$ write dmtsai
Hi, How are you doing today....
Nothing.... just say hello to you!
<==这里按下 [ctrl]+d
此时,另一端的 dmtsai 在他的终端接口上就会出现如下所示:
[dmtsai@linux ~]$
Hi, How are you doing today....
Nothing.... just say hello to you!
EOF
怪怪~立刻会有讯息响应给 dmtsai ㄟ!不过......当时 dmtsai 正在查资料,哇! 这些讯息会立刻打断 dmtsai 原本的工作喔!所以,如果 dmtsai 这个人不想要接受任何讯息, 直接下达这个动作:
[dmtsai@linux ~]$ mesg n
所以,当 vbird 再次下达 write 时,就会出现:
[vbird@linux ~]$ write dmtsai
write: dmtsai has messages disabled
呼呼!了解乎?而如果想要解开的话,再次下达『 mesg y 』就好啦!想要知道目前的 mesg 状态,直接下达『 mesg 』即可!
相对于 write 是仅针对一个使用者来传『简讯』,我们还可以『对所有系统上面的使用者传送简讯』哩~ 如何下达?呼呼!用 wall 即可啊!他的语法也是很简单的喔!
[root@linux ~]# wall "I will shutdown the linux server about 5m later.
> If you still have to login, please tell me.
> Or I will do it....."
那么除非您的 mesg 状态是 n ,否则,嘿嘿!就能够收到这个广播讯息啰! ^_^
使用者邮件信箱: mail
使用 wall, write 毕竟要等到使用者在在线才能够进行,有没有其它方式来联络啊? 不是说每个 Linux 主机上面的使用者都具有一个 mailbox 吗? 我们可否寄信给使用者啊!呵呵!当然可以啊!我们可以寄、收 mailbox 内的信件呢! 一般来说, mailbox 都会放置在 /var/spool/mail 里面,一个账号一个 mailbox (档案)。 举例来说,我的 dmtsai 就具有 /var/spool/mail/dmtsai 这个 mailbox 喔! 那么我该如何寄出信件呢?嗯!就直接使用 mail 这个指令即可! 这个指令的用法很简单的,直接这样下达:『 mail username@localhost -s "邮件标题" 』即可! 一般来说,如果是寄给本机上的使用者,基本上,连『 @localhost 』都不用写啦! 举例来说,我以 vbird 寄信给 dmtsai ,信件标题是『 nice to meet you 』,则:
[vbird@linux ~]$ mail dmtsai -s "nice to meet you"
Hello, D.M. Tsai
Nice to meet you in the network.
You are so nice. byebye!
. <==这里很重要喔,结束时,最后一行输入小数点 . 即可!
Cc: <==这里是所谓的『副本』,不需要寄给其它人,所以直接 [Enter]
[vbird@linux ~]$ <==出现提示字符,表示输入完毕了!
呼呼!如此一来,你就已经寄出一封信给 dmtsai 这位使用者啰,而且,该信件标题为: nice to meet you,信件内容就如同上面提到的。不过,你或许会觉得 mail 这个程序不好用~ 因为在信件编写的过程中,如果写错字而按下 Enter 进入次行,前一行的数据很难删除ㄟ! 那怎么办?没关系啦!我们使用数据流重导向啊!呵呵!利用那个小于的符号 ( < ) 就可以达到取代键盘输入的要求了。也就是说,你可以先用 vi 将信件内容编好, 然后再以 mail dmtsai -s "nice to meet you" < filename 来将档案内容传输即可。
4、各种账户管理的命令
whois
功能说明:查找并显示用户信息。语 法:whois [帐号名称]
补充说明:whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions 的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。
---------------------------------------- -----------------
whoami
功能说明:先似乎用户名称。
语 法:whoami [--help][--version]
补充说明:显示自身的用户名称,本指令相当于执行"id -un"指令。
参 数:
--help 在线帮助。
--version 显示版本信息。
---------------------------------------------------
who
功能说明:显示目前登入系统的用户信息。
语 法:who [-Himqsw][--help][--version][am i][记录文件]
补充说明: 执行这项指令可得知目前有那些用户登入系统,单独执行who指令会列出登入帐号,使用的 终端机,登入时间以及从何处登入或正在使用哪个X显示器。
参 数:
-H或--heading 显示各栏位的标题信息列。
-i或-u或--idle 显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串。
-m 此参数的效果和指定"am i"字符串相同。
-q或--count 只显示登入系统的帐号名称和总人数。
-s 此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题。
-w或-T或--mesg或--message或--writable 显示用户的信息状态栏。
--help 在线帮助。
--version 显示版本信息。
----------------------------------------------------
w
功能说明:显示目前登入系统的用户信息。
语 法:w [-fhlsuV][用户名称]
补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w
指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
参 数:
-f 开启或关闭显示用户从何处登入系统。
-h 不显示各栏位的标题信息列。
-l 使用详细格式列表,此为预设值。
-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
-u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。
-V 显示版本信息。
-----------------------------------------------------
finger命令
finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。
该命令的一般格式为:
finger [选项] [使用者] [用户@主机]
命令中各选项的含义如下:
-s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。
-l 除了用-s选项显示的信息外,还显示用户主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
-p 除了不显示.plan文件和.project文件以外,与-l选项相同。
[例]在本地机上使用finger命令。
$ finger xxq
Login: xxq Name:
Directory: /home/xxq Shell: /bin/bash
Last login Thu Jan 1 21:43 (CST) on tty1
No mail.
No Plan.
$ finger
Login Name Tty Idle Login Time Office Office Phone
root root *1 28 Nov 25 09:17
……
------------------------------------------------------------------
/etc/group文件包含所有组
/etc/shadow和/etc/passwd系统存在的所有用户名
修改当前用户所属组的方法
usermod 或者可以直接修改 /etc/paaawd文件即可
----------------------------------------------------------------
vlock(virtual console lock)
功能说明:锁住虚拟终端。
语 法:vlock [-achv]
补充说明:执行vlock指令可锁住虚拟终端,避免他人使用。
参 数:
-a或--all 锁住所有的终端阶段作业,如果您在全屏幕的终端中使用本参数,则会将用键盘
切换终端机的功能一并关闭。
-c或--current 锁住目前的终端阶段作业,此为预设值。
-h或--help 在线帮助。
-v或--version 显示版本信息。
--------------------------------------------------------
usermod
功能说明:修改用户帐号。
语 法:usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s ][-u ][用户帐号]
补充说明:usermod可用来修改用户帐号的各项设定。
参 数:
-c<备注> 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s 修改用户登入后所使用的shell。
-u 修改用户ID。
-U 解除密码锁定。
-------------------------------------------------------
userdel
功能说明:删除用户帐号。
语 法:userdel [-r][用户帐号]
补充说明:userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
参 数:
-f 删除用户登入目录以及目录中所有文件。
----------------------------------------------------------
userconf
功能说明:用户帐号设置程序。
语 法:userconf [--addgroup <群组>][--adduser <用户ID><群组><用户名称>][--delgroup <群组>][--deluser <用户ID>][--help]
补充说明:userconf实际上为linuxconf的符号连接,提供图形界面的操作方式,供管理员建立与管理各类帐号。若不加任何参数,即进入图形界面。
参 数:
--addgroup<群组> 新增群组。
--adduser<用户ID><群组><用户名称> 新增用户帐号。
--delgroup<群组> 删除群组。
--deluser<用户ID> 删除用户帐号。
--help 显示帮助。
------------------------------------------------------
useradd
功能说明:建立用户帐号。
语 法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号] 或 useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ]
补充说明:useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
参 数:
-c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录> 指定用户登入时的启始目录。
-D 变更预设值.
-e<有效期限> 指定帐号的有效期限。
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g<群组> 指定用户所属的群组。
-G<群组> 指定用户所属的附加群组。
-m 自动建立用户的登入目录。
-M 不要自动建立用户的登入目录。
-n 取消建立以用户名称为名的群组.
-r 建立系统帐号。
-s 指定用户登入后所使用的shell。
-u 指定用户ID。