一:Linux多用户多任务介绍
Linux/Unix是一个多用户,多任务的操作系统;在介绍Linux账号及账号组管理之前,先简单了解下多用户,多任务操作系统的基本概念。
Linux的单用户多任务
鉴于大家对windows比较熟悉,因此先以windows系统为例阐述。当我们以管理员账号administrator用户登录windows系统后,可能需要编辑word文档内容,但在编辑文件的过程中,又可能会同时打开音乐播放器听音乐;同时还可能会打开MSN/QQ等一些程序。其中编辑word文档、开播放器,开MSN/QQ,这些操作每种都是一项任务。因此,在以上过程中,就同时执行了几个任务。一个用户如administrator用户,为了完成工作和相关任务,同时执行了几个服务或进程;那么Linux也是这样的一个操作系统,当你登陆后,你也可以同时打开很多的服务任务和进程,而各自服务都会跑的很好却对其它任务没有任何影响,这种登陆一个用户而执行多个服务任务和进程的情况,就称为单用户多任务。
Linux的多用户多任务
有时可能是很多用户同时使用同一个系统,如一个公司几十个运维人员,每台机器都可以被若干个运维人员登陆部署或解决相关故障问题,但并不是所有的运维人员都要做同一件事,所以这就有多用户、多任务的情况。
举个例子:比如madsale.cn服务器,上面有系统管理员 root用户、apache用户、常规普通用户等。在同一时刻,可能有的人正在上传软件包部署apache服务;有的查看服务器日志,有的人正在登陆编写shell程序;不同的维护人员对系统的维护或查看,用的可以是不同的普通账号或超级账号root;不同用户所具有的权限也不同,不同的任务工作由不同的维护人员完成,也可以说是不同的用户。
值得注意的是:多用户、多任务并不是大家同时挤在一起在一台机器的键盘和显示器前来操作机器,多用户可能是通过ssh客户端工具等远程登录服务器来进行,比如对服务器的远程控制,只要具有相关用户的权限,任何人都是可以上去操作访问服务器。
Linux系统用户角色划分
用户在系统中是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同;仁德注意的是用户的角色是通过UID和GID识别的;特别是UID,在运维工作中,一个UID是唯一标识一个系统用户的账号,用户系统账号的名称(如:gin)其实给人看的,服务器能识别的仅是UID和GID这样的数字。
超级用户:
默认是root用户,其UID和GID均为0。在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。在生产环境中,一般会禁止root账号远程SSH连接服务器,以加强系统安全。
普通用户:
这类用户一般是由具备系统管理员root的权限的运维人员添加的。例如:ginvip这类用户可以登录系统,但仅具备操作自己家目录中的文件及目录的权限。
虚拟用户:
与真实的普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况不能登录系统,他们是系统正常运行不可缺少的,它们的存在主要是方便系统管理,满足相应的系统进程对文件属性的要求。例如系统默认的bin、adm、nobody、mail用户等。由于服务器的角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。
多用户操作系统的安全
多用户系统从实际来说使得系统管理更为了方便,从安全角度来说,多用户系统也更为安全,比如普通用户ginvip下的某个文件不想让其它用户看到,只是设置一下该文件的权限为只有普通用户ginvip一个用户可读可写编辑(后文会详细讲权限)就行了,这样以来只有普通用户ginvip一个用户可以对其私有文件进行操作,从而达到了保护每个用户的私有数据安全。
账户(user)和账户组(group)
用户(user)介绍
通过上文对Linux系统多用户特征的理解,我们知道,Linux是一个多用户、多任务的分时操作系统,如果要使用系统资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统。这个账户和用户是一个概念,通过建立不同属性的用户,一方面,可以合理的利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都有一个唯一的用户名和用户口令,在登录系统时,只有正确输入用户名和密码,才能登录系统和相应的目录。
在生产环境中,我们一般会为每个有权限管理服务器的运维人员分配一个独立的普通用户账号及8位(包含数字、字母)以上的密码,如ginvip。该人员吸能通过建立的这个账号登陆系统中进行维护,当需要超级用户权限时,可以通过“sudo 命令名”方式来执行仅有root权限才允许执行的权限。当然,sudo权限要尽量的小。还有,当运维人数不多时,如2-3个,也可以直接 su - 切换到超级用户root下,在执行相应的维护工作,在这里特别提醒,维护时,如果不需要root权限,就不要进入root用户下操作,以减少误操作对系统带来的损失,切记。
注:sudo 和 su 是两个重要切换角色的命令,后文会详细讲解。
用户组(group)介绍
简单的说,linux系统中的用户组(group)就是具有相同特征的用户(user)集合:做个比喻:一个公司,一个家庭就是一个集合,类似这里的用户组,公司的员工和家庭中的成员就相当于这里的用户。
有时我们需要让多个用户具有相同的权限,比如查看、修改某一文件或目录,如果不用用户组,这种需求在授权时就很难实现。如果使用用户组就方便多了,只需要把授权的用户都加到同一用户组里,然后通过修改该文件或目录的对应的用户组的权限,让用户组具有符合需求的操作权限,这样用户组下的所有用户对譔文件或目录就会具有相同的权限,这就是用户组的用途。
将用户分组是Linux系统(windows中也是一样的)中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了运维管理工作。
实际上,在日常生活中,对人类的分组也是无处不在的,大到国家,小到公司,家庭,学校,班级等等都类似linux中用户组的概念,而其中的成员就类似linux用户组中用户的概念。
用户和用户组的对应关系
用户和用户组对应关系有:一对一,一对多,多对一和多对多,请看下图:
用户及用户组配置文件介绍
linux系统下的账户文件主要有/etc/passwd ,/etc/shadow ,/etc/group ,/etc/gshadow 四个文件
与用户相关的配置文件
/etc/passwd → 用户的配置文件
/etc/shadow → 用户影子口令文件
/etc/passwd 用户的配置文件
/etc/passwd 文件中每行定义一个用户账号,有多少行就表示有多少个账号,在一行中可以清晰的看出,各内容之间又通过“:”号划分了多个字段,共7部分,这7部分分别定义了账号的不同属性,passwd文件实际内容如下:
提示:passwd文件中有很多虚拟账号,如bin , daemon等,一般来说,这些账号是系统正常运行所需要的,在不确定的情况下,请不要随意删改此类账号。
在passwd文件中,第一行内容就是超级用户root行,我们可以看到它的uid and gid都为0,为方便理解,我们把passwd文件内容中各字段的介绍整理成一个表格如下:
passwd文件中一行的各个字段简述:
passwd中有关UID字段的限制说明
最后我们来看下/etc/passwd的权限:
因为每个用户登陆时都需要取得UID and GID来判断权限问题,所以/etc/passwd的权限为644,这样以来就会带来安全问题,即所有的用户都可以读/etc/passwd文件。即使文件内的密码是加密的,但还是存在一定的被攻击破解的安全隐患。因此,就有了/etc/shadow文件。
用户的影子口令文件/etc/shadow
前面提到了,由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。我们来看下/etc/shadow文件的权限:
可以发现/etc/shadow是只对root只读的权限,其文件内容为: 和/etc/passwd一样,shadow文件中的每一行内容,也是以冒号(:)作为分隔符,共9个字段,其各个字段的意义如下表:
shadow文件中一行的各个字段详细说明:
与用户组相关的配置文件
/etc/group → 用户组配置文件
/etc/gshadow → 用户组的影子文件
/etc/group → 用户组配置文件
/etc/group 文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户归属哪个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的,用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去。
/etc/group文件就是前面提到的记录GID与用户组名称的。/etc/group文件同/etc/passwd类似,其文件权限也是644;
用户组的影子文件 /etc/gshadow
/etc/gshadow 是/etc/group的加密资讯文件,比如用户组(group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特征,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码:/etc/gshadow格式如下:
每个用户组独占一行:
gshadow文件中一行的各个字段详细说明: