Linux运维之道(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 账户与安全

2.3.1 账户及组的概念

Linux系统对账号与组的管理是通过ID号来实现的,我们在登录系统时,输入用户名与对应的密码,操作系统会将用户名转化为ID号后再判断该账号是否存在,并对比密码是否匹配。Linux中,用户ID号被称为UID,组ID号被称为GID。其中,UID为0,代表超级管理员,也就是通常所说的root账号,1~499之间的ID号系统会预留下来。这样我们创建的普通用户ID号会从500算起。

Linux操作系统中的组分为基本组与附加组,一个用户同一时刻仅可以加入一个基本组中,但可以同时加入多个附加组。默认在创建用户时,系统默认会自动创建同名的组,并设置用户加入该基本组中。

2.3.2 创建账户及组

使用系统命令useradd可以创建我们需要的账户,groupadd命令用来创建组账户。需要注意的是,创建账户及组时需要有管理员权限。

1.useradd

描述:创建新账号。

用法:useradd[选项]用户名称

选项:-c 设置账号描述信息,一般为账号全称。

-d 设置账号家目录,默认为/home/用户名。

-e 设置账户的失效日期,格式为YYYY-MM-DD。

-g 设置账户的基本组。

-G 设置账户的附加组,多个附加组中间用逗号隔开。

-M 不创建账户家目录,一般与-s结合使用。

-s 设置账户的登录Shell,默认为bash。

-u 指定账户UID。

img
img

创建普通账户,名称为admin,全名为administrator,账户家目录为/home/admin,账户失效日期为2017年12月24日,账户基本组为root,附加组为bin、adm、mail。

提示

\的作用是换行输入命令,命令比较长时经常会用到\符号。

img

2.groupadd

描述:创建组账户。

用法:groupadd[选项]组名称

选项:-g 设置组ID号。

img

3.id

描述:显示账户及组信息。

img

2.3.3 修改账户及组

1.passwd

描述:更新账号认证信息。

用法:passwd[选项][账户名称]

选项:-l 锁定账户,仅root可使用此选项。

--stdin 从文件或管道读取密码。

-u 解锁账户。

-d 快速清空账户密码,仅root可使用此选项。

img

修改密码时若提示(current) UNIX password信息,则先输入原始密码以修改新密码;提示New password信息时,即可输入新的密码;提示Retype new password信息时,再次确认输入的密码,注意密码的复杂度问题。提示passwd: all authentication tokens updated successfully信息说明修改成功。

img

2.usermod

描述:修改账户信息。

用法:usermod[选项]账户名称

选项:-d 修改账户家目录。

-e 修改账户失效日期。

-g 修改账户所属基本组。

-G 修改账户所属附加组。

-s 修改账户登录Shell。

-u 修改账户UID。

img

2.3.4 删除账户及组

1.userdel

描述:删除账户及相关文件。

用法:userdel[选项]账户名称

选项:-r 删除账户及相关文件。

img

2.groupdel

描述:删除组账户。

img

2.3.5 账户与组文件解析

1.账户信息文件

账户信息被保存在/etc/passwd文件中,通过命令cat /etc/passwd查看文件内容如下:

img

文件以冒号为分隔符,第一列为账户名称,第二列为密码占位符(x表示该账户需要密码才可以登录,为空时,账户无须密码即可登录),第三列为账户UID,第四列为GID,第五列为账户附加基本信息,一般存储账户名全称、联系方式等信息,第六列为账户家目录位置,第七列为账户登录Shell,/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。

2.账户密码文件

账户密码信息被保存在/etc/shadow文件中,通过命令cat /etc/shadow查看文件内容如下:

img

文件以冒号为分隔符,第一列为账户名称,第二列为密码(账户未设置密码时为!!,设置密码后加密显示,CentOS 7默认采用SHA-512算法),第三列为上次修改密码的时间距离1970年01月01日有多少天(依此推算最后一次修改密码的日期),第四列为密码最短有效天数(密码至少使用多少天,0代表无限制),第五列为密码最长有效天数(默认为99999天,可以理解为永不过期),第六列为过期前的警告天数(默认过期前提前7天警告,但进入警告日期后仍可以使用旧密码登录系统),第七列为密码过期后的宽限天数(密码过期后,预留几天给账户修改密码,此时已无法使用旧密码登录系统),第八列为账户失效日期(从1970年01月01日起多少天后账户失效),第九列暂时保留未使用。

3.组账户信息文件

组账户信息被保存在/etc/group文件中,通过命令cat /etc/group查看文件内容如下:

img

文件以冒号为分隔符,第一列为组账户名称,第二列为密码占位符,第三列为GID,第四列为组成员信息(注意,这里仅显示附加成员,基本成员不显示)。

4.组账户密码文件

组账户密码信息被保存在/etc/gshadow文件中,通过命令cat/etc/gshadow查看内容如下:

img

文件以冒号为分隔符,第一列为组账号名称,第二列为组密码(一般为组管理员密码),第三列为组管理员,第四列为组成员(与/etc/group第四列相同)。

通过<gpasswd 组名>的方式可以为组设置密码,通过<gpasswd-A 账户名称 组账户名称>可以为组添加管理员。

img

2.3.6 文件及目录权限

1.概念

Linux权限主要分为读、写、执行三种控制,使用ls-l命令查看文件或目录信息时,系统会显示为r(读取权限)、w(写入权限)、x(执行权限),以下为ls-l显示的信息:

img

第一列的第一个字符代表文件类型:-代表普通文件,d代表目录,l代表链接文件,b或c代表设备。第二至第九个字符代表权限,三位一组分别为所有者的权限、所属组的权限、其他账户的权限,rwxrwxrwx表示文档的所有者(user)、组(group)、其他账户(other)权限均为可读、可写、可执行,rwxr--r--表示文档所有者权限为读写执行,所属组权限为只读,其他账户权限为只读。第二列为链接数量或子目录个数(文件和目录这个数字的含义有所不同),第三列为文档的所有者,第四列为文档的所属组,第五列为容量,第六列为最近文档被修改的月份,第七列为文档最近被修改的日期,第八列为文档最近被修改的时间,第九列为文件或目录名称。

对于权限的表示,除了可以使用比较直观的rwx表示外,还可以使用数字表示,表2-6给出了它们之间的对应关系,以及这些权限对文件与目录的含义,如果同样是x或者1的权限,对于文件来说x代表可以执行,对于目录来说x代表用户有权进入该目录。

表2-6

img

2.修改文档属性

(1)chmod

描述:改变文件或目录权限。

用法:chmod[选项]权限 文件或目录

选项:--reference=RFILE #根据参考文档设置权限

-R   #递归将权限应用于所有的子目录与子文件

chmod命令参数中,u代表所有者,g代表所属组,o代表其他用户,a代表所有人。

下面的例子中,先查看名称为install.log的文件信息,权限为文件所有者可读可写,所属组只读,其他人只读。通过chmod修改文件所有者权限、所属组权限、其他人权限均设置为可读、可写、可执行,完成修改后,使用ls-l命令查看修改结果。

img

使用字符形式修改权限的另一种形式,是在原有权限的基础上修改权限,方法是使用+/-权限的方式。下面的例子通过chmod命令将install.log文件所属组权限在原有权限基础上减去执行的权限,其他人的权限也在原有权限的基础上减去修改与执行的权限。

img

chmod可以使用+符号来增加对应的权限,也可以使用-符号来减去相应的权限。

除了使用字符的方式修改权限外,chmod还支持使用数字的方式修改权限,数字与权限的对应关系参见表2-6,下面通过实例说明使用方法。

img

最后以其他文档作为参考修改权限。

img

(2)chown

描述:修改文件或目录的所有者与所属组。

用法:chown[选项][所有者][:[所属组]]文件或目录

选项:-R #递归将权限应用于所有的子目录与子文件。

img

2.3.7 账户管理案例

下面将介绍一个模拟公司的组织结构,EXAMPLE公司是一个从事教育培训的组织,公司结构主要分为教研室(teach)、校长办公室(office)、财务部(finance)、行政部(admin)、市场部(market)。为了后期部署文件共享服务器,我们需要为每个部门创建各自独立的共享目录,根据要求为所有的普通员工创建各自独立的账户,这些账户仅需要读权限即可,并为每个部门的负责人创建一个管理账户(管理员名称为Op_部门名称),这个账户要求可以进行读写操作。为了后期管理的方便,需要为每个部门创建与部门名称同名的组账户。

img

2.3.8 ACL访问控制权限

由于系统的基本权限是针对文档的所有者、所属组或其他账户进行控制的,无法针对某个单独的账户进行控制,所以就有了ACL(Access Control List)访问控制列表的概念,使用ACL,我们可以针对单一账户设置文档的访问权限。

Linux系统使用getfacl查看文档的ACL权限,使用setfacl来设置文档的ACL权限。

getfacl输出内容的格式大致如下:

img

以上输出信息中,第一行为文件或目录名称,第二行为文档所有者,第三行为文档所属组,第四行为suid、sgid、sticky权限的标记位,第五行为文档所有者权限,第七行为文档所属组权限,第十行为其他账户权限,第五、七、十行为系统基本权限,第六行为通过ACL指令添加的对账户的访问控制权限,第八行为通过ACL指令添加的对组账户的访问控制权限,第九行为权限掩码行。

img

从以上输出信息可以看出,该文件未设置附加的ACL访问控制条目,仅有基本的文件所有者、所属组、其他账户的访问控制。

setfacl的作用和用法如下。

描述:设置文档访问控制列表。

用法:setfacl[选项][{-m|-x} acl条目]文件或目录

选项:-b #删除所有的ACL条目

-m #添加ACL条目

-x #删除指定的ACL条目

-R #递归处理所有的子文件与子目录

img