linux 管理小命令7—— 用户管理

简介: 1、基本文件介绍: 先介绍基本的名词概念吧,太基本了,我只列出来,你若不知道什么意思,就自己百度吧: UID和GID:每个登陆linux系统的使用者都会取得两个ID,分别是UID(user id)和GID(group id),每个文件都会有拥有者ID,和拥有群组ID,也就是UID/GID。

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 [-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。


相关文章
|
3天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
|
3天前
|
监控 Linux 数据处理
|
3天前
|
编解码 Ubuntu Linux
|
3天前
|
JSON Linux 数据格式
Linux命令发送http
请注意,`curl`命令非常灵活,可以根据您的需求进行多种配置和自定义。您可以查看 `curl`命令的文档以获取更多详细信息。
10 0
|
5天前
|
安全 Linux 测试技术
|
5天前
|
安全 Linux Windows
Linux中Shutdown命令使用介绍
Linux中Shutdown命令使用介绍
10 2
|
6天前
|
缓存 关系型数据库 Linux
Linux目录结构:深入理解与命令创建指南
Linux目录结构:深入理解与命令创建指南
|
9月前
|
安全 关系型数据库 MySQL
Linux学习笔记——Linux基本命令篇(三)
Linux学习笔记——Linux基本命令篇(三)
|
9月前
|
Linux 数据库 数据安全/隐私保护
Linux学习笔记——Linux基本命令篇(二)
Linux学习笔记——Linux基本命令篇(二)
|
9月前
|
Oracle 网络协议 Unix
Linux学习笔记——Linux基本命令篇(一)
Linux学习笔记——Linux基本命令篇(一)