第6章 用户信息和资源
本章主要内容
● Linux 用户及管理。
● 用户资源管理。
● 用户间的通信。
● Linux 用户组。
● 账号和密码安全。
从技术上说,用户是能够执行程序或拥有文件所有权的实体。而大多数情况下,用户指的是某个人,且可以登录系统、编辑文件、执行程序以及使用系统。
Linux 系统是一个权限严格控制的、支持多用户同时执行多任务的操作系统,系统的每个用户都有独一无二的用户ID,不同或相同在用户执行一个或多个任务时并不相干扰,这得益于系统为每个执行的任务创建一个子进程。
Linux系统的最高权限用户为root用户,其是系统的管理员,权限只在内核之下,其能够对系统的全部资源进行控制,系统的权限对于它来说都是无效的,普通用户受限于root用户,只能对属于自己的资源进行管理。
6.1 Linux 用户及管理
许多Linux用户对于自己的机器总不够关心,认为自己的机器里没什么重要东西的值得别人攻击,所以对自己的机器没有采取有效的保护,或只有一个非常简单的密码,而且该密码长期没有更改。正是由于这样浅薄的安全意识,使得被攻击的成功率大大提高。
非法者可通过攻击获取普通用户的账号和密码(当然还有更多的方法),然后登录系统,通过逐级提升自身的权限,最后获取root用户的账号和密码或拥有与root同等的权限。之后在此机器上,利用该机器的网络、CPU、磁盘空间和搜取商业机密等。
6.1.1 Linux用户分类
Linux 是一个支持多用户和多任务的系统,支持多用户在任何时候都可同时登录系统,每个用户都可同时多次登录,且可以同时执行多个任务。这里所说的用户,一般是指普通用户。虽然只是普通用户,但账户的安全对整个系统也有着非常重要的影响。
在Linux操作系统下,root用户拥有控制整个系统的权限,对整个系统进行管理。普通用户受到root用户限制但拥有独立的主目录,可在自己的主目录上存储设置的各种文件、程序配置文件、用户文档、数据、邮件以及创建和删除文件等,而其他未授权的用户则无法进行读写等操作。
Linux系统下的用户可分为以下几类。
(1)root 用户:又称为超级用户,拥有系统的最高权限,对整个系统中的所有文件、目录和进程及其他的资源拥有可控制权。可执行系统中的所有程序,任何文件的权限对于root用户都是无效的。即root用户对系统拥有完全的控制权。root用户拥有的权限仅次于内核,且受到内核的限制。其基本信息如图6-1所示。
图6-1 在/etc/pass下root用户的相关信息
由于root用户拥有非常大的权限,若操作不当则会对整个系统造成灾难性的损失,因此在工作中,除非非常必要,否则都尽量避免使用root用户登录系统。在工作和学习中,尽可能使用普通用户来操作,即使出现失误,造成的损失远比root用户小。
(2)普通用户:普通用户则指那些可以登录系统,拥有自己的主目录并能够在属于自己的目录中创建目录和操作文件的用户。此类用户受到 root 用户限制,只可执行极少数的系统级功能。
普通用户的UID在500~6000之间,默认使用bash。除安装时系统创建的一个普通用户外,其余的均由root用户创建并受到root用户管理,普通用户主要用于日常工作。其基本信息如图6-2所示。
图6-2 普通用户cat的相关信息
(3)系统用户:又称虚拟用户或伪用户,其不具备登录系统的能力。这些用户用于特定的系统目的,如用来执行特定子系统完成服务所需要的进程等。系统用户的账号不属于任何人,是在系统安装或软件安装过程中默认创建的。
当然,我们也可以创建系统用户,如创建一个普通用户后,将该用户的shell修改(如将/bin/bash改为/sbin/nologin),然后把该用户对应的组也删除,即可将刚创建的普通用户改成系统用户。Linux操作系统默认创建的系统用户有ftp、mail等。图6-3所示为ftp用户的相关信息。
图6-3 伪用户ftp的相关信息
6.1.2 Linux用户创建和管理
本章开篇时说过,即使是普通用户的账号,其对整个系统安全的威胁也是不可忽略的,因此对用户的管理工作就显得相当重要了。本节将讲述在Linux的图形及文本系统下用户及用户组的创建、删除以及对其拥有的资源进行管理等操作。
对于在Linux系统下所创建的用户,该用户的信息都被写入/etc/passwd这个正文文件中永久性保存,如下是该文件的内容。
[root@rhl5 ~]# cat /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
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
……
虽然该文件的第二个字段表示用户密码,但都使用“x”来表示,而没有显示用户的密码。实际上,用户的密码是经过 MD5 加密后存放在称为影子文件的/etc/shadow 正文文件下的,如下是该文件记录的内容格式。
[root@rhl5 ~]# cat /etc/shadow
root:$1$dQj4Ujv8$HuXzjml3iPebymzF889sN1:15892:0:99999:7:::
bin:*:15892:0:99999:7:::
daemon: *:15892:0:99999:7:::
adm: *:15892:0:99999:7:::
lp: *:15892:0:99999:7:::
sync: *:15892:0:99999:7:::
shutdown: *:15892:0:99999:7:::
halt: *:15892:0:99999:7:::
mail: *:15892:0:99999:7:::
news: *:15892:0:99999:7:::
uucp: *:15892:0:99999:7:::
operator: *:15892:0:99999:7:::
games: *:15892:0:99999:7:::
gopher: *:15892:0:99999:7:::
ftp: *:15892:0:99999:7:::
nobody: *:15892:0:99999:7:::
nscd:!!:15892:0:99999:7:::
vcsa:!!:15892:0:99999:7:::
rpc:!!:15892:0:99999:7:::
mailnull:!!:15892:0:99999:7:::
smmsp:!!:15892:0:99999:7:::
pcap:!!:15892:0:99999:7:::
……
要在Linux系统下创建一个用户,需要来自root用户的权限。在使用useradd命令创建一个用户时,如果以“useradd+username”的方式来创建,则该指令就直接调用/etc/default/useradd 文件的参数来创建,该文件的内容如下。
[root@rhl5 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
在执行useradd命令创建用户时,它首先读取/etc/default/useradd文件的配置参数,然后通过这些参数来配置新创建的用户,如创建名为luser的用户。
[root@rhl5 ~]# useradd luser
此时user用户的相关参数就被写入/etc/passwd和/etc/shadow文件下,但由于没有设置密码,因此在/etc/shadow文件下luser用户的第二个字段使用两个感叹号来代替。
[root@rhl5 ~]# cat /etc/shadow | grep luser
luser:!!:15893:0:99999:7:::
那么,在创建一个用户后,除了在这两个文件中查看用户的信息,还可以使用finger命令来查看该用户的信息。
[root@rhl5 ~]# finger luser
Login: luser Name: (null)
Directory: /home/luser Shell: /bin/bash
Never logged in.
No mail.
No Plan.
对于创建的这个用户,其相关信息也被写入用户组的/etc/group文件下。
[root@rhl5 ~]# cat /etc/group | grep luser
luser:x:501:
1.用指令创建和删除用户
在Linux系统下创建一个用户,只要执行useradd命令并指定用户名称即可,如下命令创建一个名为dog的用户。
[root@rhl5 ~]# useradd dog
密码是用户信息安全的第一道防线,可在某些情况下拒绝非法用户的访问。密码对用户信息的保护起了一定的作用,而通过useradd命令创建dog用户后,该命令并没有为dog用户创建密码,因此需要为dog用户设置密码来保护dog用户的信息安全。
对于用户密码的创建,可以使用passwd 命令,其格式为“passwd+username”。系统要求输入两次来确认所创建的密码。若成功创建用户密码,则看到成功为用户创建密码的提示,如下命令为dog用户创建密码。
[root@rhl ~]# passwd dog
Changing password for user dog.
New UNIX password: #输入dog用户的密码
Retype new UNIX password: #再次输入密码
passwd: all authentication tokens updated successfully.
在创建用户密码时,若使用的密码过于简单时也是可以的,不过,系统会产生“BAD PASSWORD: it is WAY too short”的提示信息。
通过上面的操作,我们已成功创建名为dog的普通用户并创建了密码。若需要创建几十甚至上百个用户该怎么办呢?
如果遇到这样的情况,您要是不怕辛苦,可以不断重复使用 useradd 命令来创建,不过,当需要创建的用户量非常大时,工作量就太大了。在这样的情况下,我相信您会考虑用什么办法快速解决这个问题,而不是很淡定地依然使用useradd命令来逐个创建。
在Linux系统中,对于一些不再需要的用户账号,将其留在系统中,在占用系统资源的同时也留下了系统被攻击的安全隐患(一个静态的密码迟早是会被破解的,这只是时间的问题)。因此,作为系统管理员,应对一些不再需要的账号先进行禁止或锁定,接着对该用户账号相关文件的权限、资料等进行检查后再删除,这样可以避免因删除该用户的文件而引发的权限及数据丢失问题。
现在只介绍对用户的删除操作,其余的操作后面接着讲。要删除一个账号,可使用 userdel命令来完成,如下是删除dog账号的操作。
[root@rhl ~]#userdel dog
使用userdel命令执行删除dog后,若操作成功,则系统不产生任何提示。若不确定用户是否被删除,可以通过对/etc/passwd和/etc/shadow及/etc/group文件进行检查,甚至是使用dog账号登录系统来验证该用户是否还能登录。不过,没必要这么复杂,只需要执行finger命令就可以了。
[root@rhl5 ~]# finger dog
finger: dog: no such user.
2.用图形窗口创建和删除用户
在Linux图形系统的用户管理界面上进行用户的创建等操作,不但直观明了而且操作还比较简单。下面是在图形系统中创建用户的基本流程。
(1)如图6-4所示,在图形系统中,选择左上方的Applications 并选择其下的System Settings,接着选择 Users→and Groups 来打开 User Manager 窗口。(如果你的系统是 5版本系列的,就依次选择 Sytem→Administration→Users and Groups 来打开)。
图6-4 打开User Manager窗口的步骤
(2)在如图6-5所示窗口中,由于要创建用户,因此要单击左上角的Add User图标来创建用户。
图6-5 User Manager窗口
(3)接着弹出如图6-6所示的Create New User 窗口,此时就可以创建用户。
图6-6 Create New User窗口
(4)在Create New User 窗口中,在User Name 中填入要创建的用户名,在Full Name 中填入该用户的相关描述,在Password 中输入该用户的密码,并在Confirm Password中再次输入,Login Shell 选项保持默认值,即/bin/bash。在Create home directory 中设置该用户的主目录的位置。Create a private group for the user 选项可以为该用户创建一个私有组。接着勾选Specify user ID manually,在UID 微调框中为该用户设置一个ID。如图6-7所示创建dog用户,完成后单击OK按钮。
图6-7 创建dog用户
(5)成功创建dog 用户后,将看到在User Manager窗口中的Users 选项卡下就多了一个名为dog的用户,如图6-8所示。
图6-8 显示的dog用户
介绍了创建用户的操作之后,接着将讲解删除用户的操作。为了操作的方便,以同样的方法创建dog1用户。在图形系统中,对不再需要的用户进行删除,其操作更直观。其操作的过程比较简单,大致步骤如下。
(1)在上菜单栏中选择Applications,然后在其子菜单中选择 System Settings,找到并单击 Users Groups,打开User Manager 界面。
(2)找到需要删除的dog1用户并选中它,然后在上方单击Delete图标,接着将弹出如图6-9所示窗口,单击Yes按钮即可完成对dog1 用户的删除操作。
图6-9 删除dog1用户
6.2 用户资源管理
6.2.1 用户目录文件管理
对于Linux系统的普通用户,在理论上其可在属于自己的主目录下任意创建目录及子目录,但由于权限问题,除了root用户之外,其他用户不能在非自己的主目录下创建属于自己的目录。用户要拥有目录的所有权,要么自己创建目录,要么其他用户更改目录的所有者。
1.创建用户目录
在Linux系统下的普通用户,只拥有极少系统级文件的权限。但普通用户可以在属于自己的主目录下创建属于自己的文件,且对所创建的这些目录和文件有完全的控制权。
创建目录可使用mkdir 命令(mkdir 是make directory 的缩写),使用该命令可创建单个目录,也可同时创建多个目录,或直接同时创建父目录和子目录。Mkdir 命令非常简单,其语法格式如下:
mkdir [OPTION] DIRECTORY...
用户在创建一个属于自己的目录时,新目录的权限是 777(在下一节介绍)的,但是由于权限掩码的作用导致了新创建的目录权限发生改变,可使用umask命令查看当前用户的权限掩码。
[cat@rhl5 ~]# umask
0002
显示当前用户的权限掩码是0002,因此创建一个目录时其权限是775。接着使用mkdir命令来创建一个名为CAT的目录,如下所示。
[cat@rhl5 ~]$mkdir CAT
当操作完成时,系统不给出任何提示,为了确认操作是否成功,接着可以使用带有−l选项的ls命令查看刚刚创建的CAT目录是否存在。
[cat@rhl5 ~]$ ls-ld CAT/
drwxrwxr-x 2 cat cat 4096 Jul 7 22:14 CAT/
以上操作只完成了单个目录的创建,可现在希望一次就完成对多个目录的创建,这时该怎么办呢?一次完成多个目录的创建任务,可由 mkdir 命令完成。如下所示的命令一次创建 DOG 和FOX两个目录。
[cat@rhl ~]$ mkdir DOG FOX
当然,也可以在创建一个新目录的同时创建该目录的子目录,如下所示。
[cat@rhl5 ~]# mkdir-p dir/dir1 (dir1 是dir 的子目录)
2.删除用户目录
当系统运行到一定时间后,随着无用文件(也可能是垃圾文件)的积累,系统磁盘不断减小,而且系统的效率也降低。在这样的情况下,需要对这些垃圾文件进行清理,可以使用rmdir(remove directory的缩写,该命令只能删除空目录)或使用带有选项-r的rm(rm是remove的缩写)命令来将这些垃圾文件永久性清除。
当使用这两个指令删除目录时,必须在该目录的上层目录(即父目录)才可进行操作。在这里主要是对rm命令进行演示。
当使用rmdir命令来删除目录时,操作比较简单,其命令格式如下:
rmdir 目录名
可使用 rmdir 命令以相对路径(即上上层目录,相当于祖孙关系)来删除某个目录。但该指令只可以删除空目录。
在使用 rm 命令对目录和文件进行删除时,系统不会有任何提示信息,因此操作时要谨慎。值得注意的是,不带选项的rm命令是不能删除目录的。rm命令语法格式如下:
rm [-option(s)] files/directories
当使用rm命令时,先对rm命令的几个常用选项进行简单介绍。如下所示的是rm命令常用的几个选项。
●-i(interactive):在删除文件时,该选项会给出提示信息,可防误删。
●-r(recursive):当要删除某目录时,将其下的所有内容全部删除。
●-f (force):系统将直接强行删除而不给出任何提示信息。
接下来演示使用rm命令删除目录的操作,先使用不带选项的rm命令对DOG目录进行删除。
[cat@cat ~]$ rm DOG
rm: cannot remove `DOG': Is a directory
从输出结果可以知道,系统拒绝执行删除DOG目录的操作。接着演示使用带有选项的rm来删除DOG目录。
[cat@cat ~]$ rm-r DOG
对于rmdir和rm命令,应该进行更多的操作练习,以便更加熟悉这两条命令的使用,不过,建议尽量少用带有rf选项的rm命令。
经过以上演示可知,系统不会拒绝执行带有选项-r的rm命令,也就是说,带有选项的rm是一个具有强大破坏性的指令,被rm命令删除的文件或目录在无备份的情况下将永久性删除,无法恢复。
6.2.2 用户文本文件管理
Linux 系统下的文本文件包括有二进制文本文件、纯文本文件和正文文本文件,在这不同类型的文本文件中,可以直接读取正文文本文件的内容,它也是最常用的。
1.创建文本文件
之前只创建了目录,要在 Linux系统下创建空文本文件,需要使用 touch命令,该命令的使用方法也非常简单,其的语法格式如下:
touch [OPTION]... FILE...
接着使用 touch 命令来创建文本文件,可以使用如下命令格式在当前目录下创建一个名为CAT1的空文本文件。
[cat@cat ~]$ touch CAT1
为了确认CAT1已创建且是空的,可以使用带有-l选项的ls命令列出当前目录下的内容及其相关信息。
[cat@cat ~]$ ll CAT1
-rw-rw-r-- 1 cat cat 0 Jul 7 22:32 CAT1
2.删除文本文件
要删除一个文件,首先要获取该文件的控制权,然后使用 rm 命令就可以直接将文件删除,该命令的语法格式如下所示。
rm [OPTION]... FILE...
要删除刚创建的CAT1空文件,可使用如下命令行来删除。
[cat@rhl5 ~]$ rm CAT1
6.2.3 文件权限管理
对于上面的操作,相信您应该知道,如果文件的权限对系统的所有用户都开放,其他人就可以对该文件进行操作。或其他用户通过获取文件的权限对文件进行非法访问、删除等(当然不包括 root 用户在内)。因此权限对于文件的安全非常重要。因此,应该取消非本组用户或本组用户(非文件的拥有者)对某文件拥有的权限。
但有时用户则需要对自己的某个文件拥有更多的权限,如可执行权限,这就需要为该文件添加权限,要怎么处理这样的事情,应根据实际需要而定。
1.文件权限的概述
在Linux系统下,使用权限来保护资源的安全将是一种不错的选择。系统中每个文件的权限都有可读(r)、可写(w)和可执行(x)这三种权限,它们分别对应权限数值4、2 和1。系统为每个文件和目录都设有默认的权限,每个文件中可分有拥有者(u)、同群组的用户(g)和其他组用户(o)。
文件的类型不同,权限就有所不同,虽然每个文件的权限都是 777,但在创建一个文件时,并没有看到该文件的权限是777,这是由于掩码的作用使得某些权限被屏蔽。
对于每个文件,其都由不同的信息组成,如图6-10所示,这是我们之前创建的一个名为CAT1的空文件,该文件的详细信息如下所示。
图6-10 默认情况下文件的权限
文本文件与目录文件的区别就在于第一个描述符不同,目录则以“d”为描述符。如图6-11所示,这是之前所创建的一个名为CAT的目录,该目录的详细信息及相关介绍如下所示。
图6-11 默认情况下目录的权限
使用带有-l选项的ls命令,可从许可字符串的首字母来识别所列出每个文件的类型,以下是几个常见的标识号。
●-:一般文件(硬链接)。
● l:符号链接(软链接,可使用带有-s选项的ln命令来创建一个软链接)。
● d:目录。
● c:字符设备文件。
● p:命名管道。
● s:套接字。
● b:块设备特殊文件。
2.文件权限管理
从刚创建的CAT1文件中看到,该文件虽是cat用户创建的,但cat用户对该文件并没有可执行权限。现在要为CAT1添加可执行权(x),将这项任务交给chmod命令就可以。使用chmod命令也非常简单,如下所示,为cat用户添加对CAT1文件的可执行权。
[cat@cat ~]$ chmod u+x CAT1
通过以上操作后,cat用户拥有了对CAT1文件的可执行权。当然,要添加其他权限的操作也差不多,也可以使用“chmod+rwx 文件名”来授权。感兴趣的读者可以试试,这里只讲方法,可以通过这种方法来进行练习,以便更好地掌握。
如果对CAT目录下的目录同时授予可执行权,则可以使用带有-R选项的Chmod命令进行操作,其格式如下:
chmod–R 目录名1/目录名2
其中目录2是目录1的子目录,即在目录1下创建目录2。
使用-R选项,可递归地授予各种权限。
接下来讲解取消某个用户(或用户组)拥有该文件的权限,使用的命令还是chmod,如下所示,取消cat用户对文件CAT1拥有的可执行权。
[cat@cat ~]$ chmod u-x CAT1
根据文件权限数值,4代表可读,2代表可写,而1则代表可执行,并且权限数值存在时以1表示,否则就用0来表示(实际上就是用二进制的方式来表示),就可以对于某个文件或目录中的权限数值计算。如图6-12所示,计算名为CAT1文件的权限值。
图6-12 权限的值
U 的权限值为:1 × 2 2+1 × 2 1+0 × 2 0 = 6
G 的权限值为:1 × 2 2+1 × 2 1+0 × 2 0 = 6
O 的权限值为:1 × 2 2+0 × 2 1+0 × 2 0 = 4
若需要对该文件授予权限,也可使用“chmod 664 CAT1”的形式来为用户授权。
有时为了方便,把文件的拥有权授予其他人,可以使用chown来改变文件的拥有者,下面演示将cat用户的CAT1文件转给dog用户,先切换到root用户,然后才可以执行。由于CAT1文件在cat用户的主目录下,因此使用/home/CAT1。
[root@cat ~]# chown dog /home/cat/CAT1
执行命令之后,可以使用带有-l选项的ls命令来确认更改文件拥有者的操作是否成功。如下命令显示更改文件拥有者之后该文件的详细信息。
[cat@cat ~]$ ls–l
total 0
-rw-rw-r-- 1 dog cat 0 Aug 9 21:27 CAT1
这里只是做一个简单的演示,说明该命令的用法,读者可以进行多操作练习,以便更好地掌握。
6.3 用户间的通信
Linux 系统是一个支持多用户同时在线工作的系统,在线用户之间需要通信,可以使用系统的命令来实现。如果用户登录系统而且需要信息及时传达,则可使用会话命令来实现用户间的即时通信;如果用户未登录系统,但又要传递信息,则可采用邮件的方式传送。
1.已登录系统的用户间通信
在Linux系统下,要实现已登录系统的用户间的通信,如果采用即时通信,那么可以使用通话命令来实现。其中,write命令用于将信息向另外一个用户发送,其发送方式是强制性的,就是说,即使用户当时在执行其他任务,消息依然以打断用户当前操作的方式来传达。
write命令的语法格式为:
write user [ttyname]
如果以系统的root用户向登录系统的cat用户发送即时信息,则可执行如下操作(如果用户未打开终端窗口,信息是不会自动弹出来的)。
[root@rhl5 ~]# write cat
write: cat is logged in more than once; writing to pts/1
urgent message # 所发送的信息
写好信息后按Enter键即可发送,在结束发送信息时,使用Ctrl+C组合键来结束。对于发送给cat用户的信息,在执行write命令时cat用户就会接收到提示信息,而内容是在发送后才能够看到。如下是在cat终端窗口中看到的全部会话信息。
Message from root@rhl5.super.com on pts/0 at 23:24 ...
urgent message # 所发送的内容
EOF # 会话结束的标记
如果需要将信息发送给每一个登录系统的用户时,可以使用wall命令,通过该命令可将信息发送给全部登录系统的用户。wall命令的语法格式如下:
wall [-n] [ message ]
向系统的全部在线用户发送信息,该命令每执行一次就结束而不保持会话连接。
[root@rhl5 ~]# wall urgent message
Broadcast message from root (pts/0) (Wed Jul 24 23:31:10 2013):
urgent message# 发送的内容
其他用户会接收到如下内容。
Broadcast message from root (pts/0) (Wed Jul 24 23:33:17 2013):
urgent message
这些消息是强制性接收的,如果不想接收到这些信息,那么可以使用 mesg 命令来设置,该命令用于控制终端窗口的会话连接,其语法格式为:
mesg [y|n]
在默认配置下,每位用户都接收信息,如果不想接收到这些信息,则可以执行带 n 选项的mesg命令,如(但不能屏蔽root用户所发送的信息):
[cat@rhl5 ~]$ mesg n
2.未登录系统的用户间的通信
在Linux系统上,用户间可通过mail来进行通信,如果cat用户给dog用户发送mail,则可执行如下操作。
作为cat用户登录,打开终端,输入邮件的主题和用户,之后按Enter键。
[cat@cat ~]$ mail-s "Hello" dog # hello为邮件的主题,按Enter键后写正文
#
# 正文区
#
. #当正文写完时,输入“.”来表示结束,并按Enter键
Cc: #当若还要发给别的用户,可在此处输入该用户名,否则按Enter键发送
当dog 用户登录时,他将接收到“You have new mail in /var/spool/mail/fox”的提示,若要查看该 mail 的内容,在终端提示符下输入 mail 即可。若接收到多封邮件,可输入数字来读取,如dog收到来自cat的两封邮件。
[cat@cat~]$mail
>N 1 cat@cat.super.com Wed Aug 10 14:09 19/577 "Hello1"
N 2 cat@cat.super.com Wed Aug 10 14:11 17/561 "Hello2"
& #输入要读取的邮件号码,如1 或2,然后按Enter 键。按空格键阅读内容,按Q 键退出
除了发送电子邮件外,还可以通过管道来发送邮件,使用管道发送邮件非常简单,如下是通过管道给dog用户发送邮件的演示,其格式如下。
[cat@cat~]$ls–l | mail–s “hello dog !” dog
使用带有-l选项的ls命令来获取当前目录的信息,然后通过管道发送给dog用户。“hello dog”是本次邮件的主题,主题的后面跟着收件人,即dog用户。只要按Enter键就可以发送,其实很简单。
以上只是简单讲解,感兴趣的读者可以操作,在这里就不进行具体的操作演示。
6.4 Linux用户组
所谓的用户组,即,具有共同特征的用户集合。在对文件资源等进行共享时,创建用户组是非常值得提倡的。Linux系统下的用户组可由一个或多个用户组成同组用户,可通过权限来查看、修改及删除文件。
在Linux系统下的用户组及相关信息,都记录/etc/group的正文文件下,如下是在该文件下的记录信息。
[cat@rhl5 ~]$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:
dip:x:40:
ftp:x:50:
lock:x:54:
nobody:x:99:
users:x:100:
audio:x:63:gdm
nscd:x:28:
utmp:x:22:
utempter:x:35:
floppy:x:19:
vcsa:x:69:
rpc:x:32:
mailnull:x:47:
smmsp:x:51:
pcap:x:77:
……
可直接修改/etc/group 配置文件,或使用User Manager界面来管理用户组。相对而言,使用User Manager界面来管理更加直观明了。如图6-13所示,这是 User Manager窗口中Groups选项卡下的用户组。
图6-13 Groups选项卡下的用户组
6.4.1 用户组创建和删除
Linux 系统的用户组就相当于用户的集合,这个集合包括一个或多个用户。在创建用户时系统也同时为每个用户创建一个用户组,也就是说,每个用户都属于自己的用户组。用户组之间是独立的,但用户组成员可以属于一个或多个用户组。
1.用指令创建和删除用户组
使用用户组,可更加方便地对用户进行管理,特别是在共享资源时,用户组就显得更加重要。对于用户组的创建,可以使用groupadd指令来完成,如下命令创建一个名为animal的用户组。
[root@cat ~]# groupadd animal
若成功创建,系统没有给出任何提示,此时就表明创建的animal用户组是成功的。值得注意的是,用户组名必须唯一。如果再次创建animal的用户组,系统将给出提示,如下所示的是再次创建名为animal的用户组时,系统给出该用户组已存在的信息提示。
[root@cat ~]# groupadd animal
groupadd: group animal exists
删除用户组的任务就交给groupdel命令去完成,下面接着演示如何删除用户组。如下命令删除刚才所创建的animal用户组。
[root@cat ~]# groupdel animal
操作成功后,系统不给出任何提示。到此,已完成对animal用户组的删除操作,其实也挺简单。
接着演示如何向用户组中添加成员。为了演示操作,先创建animal用户组,再创建dog、pig两个用户。接着将dog添加到名为animal的用户组中。可以使用gpasswd命令来完成这个任务。如下命令为animal用户组添加dog用户,添加操作成功后,系统将给出添加成功的提示。
[root@cat ~]# gpasswd–a dog animal
Adding user dog to group animal
其实,再次为animal用户组添加pig用户的操作与添加dog的操作差不多。您可以尝试完成将pig添加到animal组的操作。
有时,一个组需要有几个组管理员。现在决定将dog作为animal组的管理员,任务还是交给gpasswd命令去完成,如下命令为用户组animal添加组管理员dog。操作成功后,系统不给出任何提示。
[root@cat ~]# gpasswd-A dog animal
到现在,您不但完成了创建用户组的任务,而且将animal用户组管理员的职务交给了dog。接下来继续完成在Linux的图形系统上创建用户组的操作。
2.用图形界面创建和删除用户组
我们知道Linux系统是一个多用户操作系统,为了方便对用户的管理,作为管理员应该创建用户组来管理用户。之前在文本系统下创建了用户组,现在接着讲解在Linux的图形系统中如何创建用户组。
对于用户组的创建,其操作与创建用户差不多,不过,前者更为简单。创建用户组的大致流程如下。
(1)按照Applications→System Settings→Users Groups来打开User Manager 窗口,然后单击Add Group图标,弹出Create New Group 窗口。
(2)接着在Group Name 中输入要创建的组的名字, Specify group ID manually 选项可以选择也可以不选择。按如图6-14所示创建fox用户组,接着单击OK按钮即可完成对fox用户组的创建。
图6-14 创建fox用户组
对于不再需要的用户组,可对其进行删除,这样不但可以减少对磁盘空间的占用,而且对于系统的安全也起到一定的作用。接着演示对刚刚创建的fox用户组进行删除的操作,其过程也比较简单,步骤如下。
(1)还是按照Applications→System Settings→Users Groups 的步骤来打开User Manager 界面,选择Group选项卡,然后单击需要删除的fox用户组。
(2)选中要删除的用户组后,接着单击工具栏中的Delete图标,就弹出确认删除对话框,单击Yes按钮即可删除fox用户组。
6.4.2 用户组成员管理
1.为用户组添加成员
作为系统管理员,常需将某个用户添加到某个用户组中,以方便进行管理。在Linux系统图形界面下,可直观方便地将某个用户添加到用户组中。
为了演示下面的操作,应先创建dog1用户。接着我们将学习如何将dog1用户添加到名为dog的用户组中。其操作过程也比较简单,操作步骤如下。
(1)在 User Manager 窗口中选中 dog1,并在工具栏中选择 Properties 图标,接着是弹出User Properties 窗口。然后在 User Properties 窗口中选择 Groups 选项卡并找到名为 dog 的用户组,并勾选dog复选框,如图6-15所示,最后单击OK按钮即可完成为dog用户组添加成员的操作了。
图6-15 将dog1添加到dog用户组中
(2)为了确认是否已将dog1添加到dog用户组中,可单击Groups标签查看dog组,如图6-16所示。
图6-16 查看dog用户组成员
2.从用户组移除用户
在某些情况下,管理员则需要移除用户组中的某个或某些成员。要从用户组移除用户,其操作也比较简单。下面演示将从dog用户组中移除用户dog1,具体步骤如下。
(1)在User Manager 窗口的Groups选项卡下,选中名为dog的用户组,并单击Properties图标后,弹出如图6-17所示界面。
图6-17 Group Properties界面中的组名
(2)接着选择Group Users,并找到dog 用户组,然后取消选择 dog1,并单击OK 按钮即可完成将dog1从dog组中移除的操作了,如图6-18所示。
图6-18 从dog用户组移除dog1
6.5 账号和密码安全
一般来说,使用密码的目的在于阻止未授权的人登录账号和访问系统。
在Linux系统下,每个用户的安全是不可忽略的。单个用户信息的安全,可能危及其他用户,甚至是整个系统的安全。黑客得到某个用户密码之后可能用此账户做跳板,然后通过逐级提升权限,最后获取root用户的密码或与root用户拥有相同的权限。
作为一个操作系统管理员,更要注意用户密码安全。如果可能,那就运行一些破解密码的软件来试探系统中用户的密码是否足够强壮,以使得用户的账号随时都有一个强壮的密码在保护。
6.5.1 账号信息概述
前面介绍过,Linux系统拥有root用户、普通用户和系统用户。其中,系统用户无登录系统的权力,它是在系统安装或软件安装时默认创建的,可在某些特殊情况下使用。而多数系统用户是不需要的,因此需要合理地对这些用户进行注销。
由于普通用户可以登录系统进行操作,因此其密码的安全就显得比系统用户还重要。对于一些不再使用的普通用户,就应注销或将该用户删除,否则您的系统有可能将会被黑客接管!
用户账号的安全,对于整个系统来是不可忽略的,只要某个账号的信息泄露,整个系统完全有可能被入侵。因此,一个用户拥有强壮的密码是必要的。而久不改动的密码也有可能被黑客使用暴力破解,因此定期或不定期更改密码也显得重要。
作为系统的普通用户,可以更改属于自己的密码,下面演示普通用户更改密码的操作。要更改密码,可以使用passwd命令来完成,如下所示的是更改cat用户密码的操作。
[cat@cat ~]$ passwd
Changing password for user cat.
Changing password for cat
(current) UNIX password: # 要求输入cat用户的旧密码
New UNIX password: # 输入cat用户的新密码
Retype new UNIX password: # 再次确认新密码
passwd: all authentication tokens updated successfully. # 密码更改成功
如果您更改的新密码太短,则将得到“BAD PASSWORD: it's WAY too short”的提示信息,可要是将普通用户的密码更改成与root用户相同时,系统将给出怎么样的提示信息呢?您不妨试试,也许会得到其他提示信息。
也许您想到,要是密码忘记了,怎么办?找管理员。
作为普通用户好办,可作为管理员的你,要是把root用户的密码忘了,那可不能再找管理员了,因为您就是管理员。遇到这个问题,有些人建议重装系统,也许您真的重装了。可如果是在某些场合,如公司里,这个做法有点不合适吧?
接下来介绍在忘记root用户密码情况下更改密码,其步骤如下。
(1)开机并进入GRUB界面之后,如图6-19所示,在GRUB界面下,按a键来向内核传递一个参数。
图6-19 GRUB界面
(2)进入如图6-22所示界面修改运行级别。在图6-20中光标的末尾处加上空格后再输入“1”或输入single后按Enter键启动系统进入单用户模式。
图6-20 修改运行级别
(3)成功进入单用户模式后,将出现如图6-21所示的界面。
图6-21 成功进入单用户模式
接着使用vi编辑器来打开/etc/passwd文件,然后将root记录行中的“x”去除,也就是,root用户登录系统时不需要密码的认证。
sh-3.00: vi /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
……省略部分内容的输出……
(4)在打开/etc/passwd文件之后,接着按a或i键进入插入模式,并将root行中的x去掉,即相当于root用户登录不需要密码。然后按Esc键之后再输入“:wq”保存文件并退出。
(5)为了防止其他人也使用这样的方法来更改root用户的密码,接着设置密码来保护单用户模式,避免root用户的密码被更改。使用vi编辑器打开开机引导文件GRUB,然后在该文件中加入相关的设置。
sh-3.00: vi /boot/grub/grub.conf
……
#boot = /dev/sda
default = 1
timeout = 3
splashimage = (hd0,0)/grub/splash.xpm.gz
#hiddenmenu
passwd 123456 # 为进入单用户模式设置密码
title Enterprise (2.6.9-42.0.0.0.1.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.0.0.0.1.ELsmp ro root = LABEL = /
initrd /initrd-2.6.9-42.0.0.0.1.ELsmp.img
……
(6)接着输入init 6 或reboot命令进行重启。之后就可以在不使用root 用户的密码的情况下就可以登录系统。
(7)接着将为root用户设置新的密码,其操作跟普通用户更改密码一样。当修改成功时,将看到系统的提示。
[root@cat ~]# passwd
Changing password for user root.6
New UNIX password: # 设置root用户的密码
Retype new UNIX password: # 再次确认密码
passwd: all authentication tokens updated successfully.
(8)在单用户模式下,在/boot/grub/grub.conf 中设置了进入该模式的保护密码,可那是显示的明码,为了防止别人看到,选择为该密码加密。
(9)在终端上输入grub-md5-crypt,如下所示:
[root@cat ~]# grub-md5-crypt
Password: # 输入root123456密码
Retype password: # 再次输入root123456密码
$1$RmrGE0$KPn.7fPwek7WjhLA4yqOt1 # 使用md5 加密后的root 密码123456
(10)接着使用 vi 编辑器打开/boot/grub/grub.conf 文件,如下操作使用加密后的密码代替123456。为了防止出错,建议首先复制,然后粘贴。
# initrd /initrd-version.img
#boot = /dev/sda
passwd–md5 $1$RmrGE0$KPn.7fPwek7WjhLA4yqOt1
default = 0
timeout = 5
splashimage = (hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title Enterprise (2.6.9-42.0.0.0.1.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.0.0.0.1.ELsmp ro root = LABEL = /
initrd /initrd-2.6.9-42.0.0.0.1.ELsmp.img
通过以上操作,完成了更改密码的操作。可一些用户像钉子户一样,就是不愿意修改密码。作为管理员,这时应该硬性规定修改密码。
假设限定某个用户在一段时间内更改一次密码,这时可以使用chage命令来完成这项任务。如下命令限制dog用户在60天内更改一次密码。
[root@cat ~]# chage-M 60 dog
而对于一些立即注销的用户,则可以使用passwd命令来完成。如下命令将cat用户立即锁定。
[root@cat ~]# passwd-l cat
Locking password for user cat.
passwd: Success
对于锁定的 cat 用户,如果其进行登录系统,将得到“Access denied”的提示。而要使 cat用户正常使用,只须执行带有-u选项的passwd命令即可。
[root@cat ~]# passwd-u cat
Unlocking password for user cat.
passwd: Success.
当然,也可以做如下操作。即在该用户行前加上“#”号,注销cat用户登录系统的权限。若要恢复,只须把“#”号去掉。
#cat:x:501:501:A Super Cat:/home/cat:/bin/bash
对于用户限期进行密码的更改,若限期太短,密码的更改太频繁,使得有些用户直接把密码写在纸上且不保管好,这时密码就有泄露的可能。而限期太长,会给攻击者提供时间来攻击,攻击的成功率将增加。
如果可以,建议定期运行一些工具来检查系统中用户的密码是否足够强壮,以保证系统的安全。
6.5.2 账号信息安全管理
本节将对/etc/passwd、/etc/shadow以及/etc/group三个文件进行介绍,其中/etc/shadow用于存放被md5加密后的所有系统用户密码,显然该文件将更为重要。该文件的安全已成为用户密码安全性的关键部分,几乎所有流行的Linux发行版都使用/etc/shadow来存放用户密码。
由于使用etc/shadow文件来存放用户密码信息,因此我们将看到/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
……省略部分内容的输出……
cat:x:500:500:A Super Cat:/home/dog:/bin/bash
fox:x:501:501::/home/cat:/bin/bash
passwd文件中的每一行代表一个用户,值得注意的是,密文的字段只显现简单的“x”,x只表明该用户使用密码登录系统,但这不是密文格式。
除了root用户和普通用户之外,系统用户没有登录系统的权限,这是由于系统用户试图登录时将执行/sbin/nologin而被拒绝。而root用户和普通用户登录时执行/bin/bash。
普通用户的用户ID和组ID(即UID和GID)都是从500开始的,UID和GID都是500的用户,即为安装系统时创建的系统普通用户。
对于一行中各项代表的含义,下面做一个简单的介绍,如图6-22所示。
图6-22 在/etc/passwd中cat用户的信息
对于名为/etc/shadow的文件,它是存放所有用户重要密码信息的文件,在此文件中所保存的信息对整个系统的安全起着非常重要的作用,如下是该文件中内容的记录行。
root:$1$VLE2TXLu$xjvCDKeHGIHVu4AWbSWdO1:15196:0:99999:7:::
bin: *:15016:0:99999:7:::
daemon: *:15016:0:99999:7:::
adm: *:15016:0:99999:7:::
lp: *:15016:0:99999:7:::
……
cat:$1$QCLNH2SV$rwsb0CK6kj0QfgfxD/GAs0:15196:0:99999:7:::
dog:$1$wJCEEuJf$cIi78qhklpcdupjsC0W.s1:15194:0:60:7:::
对于/etc/shadow文件所记录的每行信息,其所对应的都是一个用户的相关信息。如图6-23所示,下面对/etc/shadow中cat用户的相关信息进行说明。
图6-23 /etc/shadow中cat用户的信息
在而/etc/group文件中所记录的内容比较简单,其所记录的是一个用户组的相关信息,其内容如下:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
……
在group文件中,首先是组名,接着的记录表示该组设有密码,然后是组ID,最后是该组的成员名字。
接下来我们来玩一个游戏,目的是了解文件的权限对于文件的保护的重要性。演示的条件如下:
[root@cat ~]# ls-l /etc/passwd /etc/shadow
-rw-rw-rw- 1 root root 1985 Aug 10 11:22 /etc/passwd
-rw-rw-rw- 1 root root 1362 Aug 10 13:43 /etc/shadow
对于/etc/passwd /和etc/shadow 这两个文件,拥有者、本组用户和非本组用户都拥有可读和可写权限。假设与root用户不同组的某个用户得知其可以获得访问这两文件的权限,其将通过自身来使自己拥有与root用户相同的系统权限。做法如下。
(1)作为普通用户cat,在终端上输入如下命令:
[cat@cat ~]$ echo 'user:$1$QNnHE0$z9bOtbYVbkaRHLQ6ab0mU0:::::::' >> /etc/shadow
[cat@cat ~]$ echo 'user:x:0:0:::/bin/bash' >> /etc/passwd
(2)接着使用su命令切换到user登录:
[cat@cat ~]$ su user
Password:
(3)成功切换后,将看到如下结果(可能显示有所不同):
bash-3.00#
(4)为了确认是否拥有与root用户等同的权限,可以使用whoami命令来确认:
bash-3.00# whoami
root
结果您也看到了,user用户不但成功登录而且拥有与root用户同样的权限,可以对系统文件拥有执行权。如果对/etc/passwd和/etc/shadow这两个文件管理不当,其他用户就可以使用这样的方式来获取与root用户等同的系统权限。接下来怎么管理这两个文件,您应该知道。
“$1$QNnHE0$z9bOtbYVbkaRHLQ6ab0mU0”是使用md5加密12345后得到的。对同样的密码,使用md5加密后得到的结果是不一样的。