![Linux运维之道(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/228/33692228/b_33692228.jpg)
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](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_39.jpg?sign=1738901368-0QUTupAjHy9FRE9sGeRviycY3th24BIU-0-0113ecd436a289f7c040b3f9078aaa0d)
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_40.jpg?sign=1738901368-LpqI2F8lDSIe6zgJ10mQvM8bJupSU72d-0-4d7d600830c9ce65bffdf64f990aaa49)
创建普通账户,名称为admin,全名为administrator,账户家目录为/home/admin,账户失效日期为2017年12月24日,账户基本组为root,附加组为bin、adm、mail。
提示
\的作用是换行输入命令,命令比较长时经常会用到\符号。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_41.jpg?sign=1738901368-y8tfO1Bm57PZwqmGzSUlTaDZMbxUxiQv-0-d538b1064a99bddaf77e290a52e8e69a)
2.groupadd
描述:创建组账户。
用法:groupadd[选项]组名称
选项:-g 设置组ID号。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_42.jpg?sign=1738901368-4iTJDzOlecWGCzNC2zeB8sotuauXjPNW-0-67c4b43aedd58725029b978924bbb4c6)
3.id
描述:显示账户及组信息。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_43.jpg?sign=1738901368-8uJiM25q9hwqrxUujkOZYjj0tNoF5YLN-0-c18cc532cacddd484820a7bf78877d4c)
2.3.3 修改账户及组
1.passwd
描述:更新账号认证信息。
用法:passwd[选项][账户名称]
选项:-l 锁定账户,仅root可使用此选项。
--stdin 从文件或管道读取密码。
-u 解锁账户。
-d 快速清空账户密码,仅root可使用此选项。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_44.jpg?sign=1738901368-x8mSxi2Gbyz1ErEtBMy7JMYy6OHb8cle-0-a45d22795bf127236fe9bba580d3e57f)
修改密码时若提示(current) UNIX password信息,则先输入原始密码以修改新密码;提示New password信息时,即可输入新的密码;提示Retype new password信息时,再次确认输入的密码,注意密码的复杂度问题。提示passwd: all authentication tokens updated successfully信息说明修改成功。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_45.jpg?sign=1738901368-aOp2pDzFrIiC8mrUP24fID40cGiSiLCw-0-a0f250b9705fa8df730f6dd9be9725fd)
2.usermod
描述:修改账户信息。
用法:usermod[选项]账户名称
选项:-d 修改账户家目录。
-e 修改账户失效日期。
-g 修改账户所属基本组。
-G 修改账户所属附加组。
-s 修改账户登录Shell。
-u 修改账户UID。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_46.jpg?sign=1738901368-yYglou6kXqNReVOzuMCYUpqdo1vydO9y-0-03f08f589fc0ad460000940c9146a4bc)
2.3.4 删除账户及组
1.userdel
描述:删除账户及相关文件。
用法:userdel[选项]账户名称
选项:-r 删除账户及相关文件。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_47.jpg?sign=1738901368-ZnOLN7g55Tua52vfdmPdoct0ejpWWfyt-0-c7105160b5f79275064a2646e0ff9d47)
2.groupdel
描述:删除组账户。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_48.jpg?sign=1738901368-nPS2aKwjHMoSe1N5lCAj1bhHlSbZn3Uu-0-c4e10c87277a754681092fa30a01dd36)
2.3.5 账户与组文件解析
1.账户信息文件
账户信息被保存在/etc/passwd文件中,通过命令cat /etc/passwd查看文件内容如下:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_49.jpg?sign=1738901368-b8Zr273N8EhNw937yzrwoGEhF0jjBMVU-0-0d382986921a14fd98721bbbc74c8643)
文件以冒号为分隔符,第一列为账户名称,第二列为密码占位符(x表示该账户需要密码才可以登录,为空时,账户无须密码即可登录),第三列为账户UID,第四列为GID,第五列为账户附加基本信息,一般存储账户名全称、联系方式等信息,第六列为账户家目录位置,第七列为账户登录Shell,/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。
2.账户密码文件
账户密码信息被保存在/etc/shadow文件中,通过命令cat /etc/shadow查看文件内容如下:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_50.jpg?sign=1738901368-QU27ov70yg0sEKJBWeehwLVCoyuQA7VL-0-49d25f04c5eb92e2ca47205f900d6e48)
文件以冒号为分隔符,第一列为账户名称,第二列为密码(账户未设置密码时为!!,设置密码后加密显示,CentOS 7默认采用SHA-512算法),第三列为上次修改密码的时间距离1970年01月01日有多少天(依此推算最后一次修改密码的日期),第四列为密码最短有效天数(密码至少使用多少天,0代表无限制),第五列为密码最长有效天数(默认为99999天,可以理解为永不过期),第六列为过期前的警告天数(默认过期前提前7天警告,但进入警告日期后仍可以使用旧密码登录系统),第七列为密码过期后的宽限天数(密码过期后,预留几天给账户修改密码,此时已无法使用旧密码登录系统),第八列为账户失效日期(从1970年01月01日起多少天后账户失效),第九列暂时保留未使用。
3.组账户信息文件
组账户信息被保存在/etc/group文件中,通过命令cat /etc/group查看文件内容如下:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_51.jpg?sign=1738901368-0a9TRn5m5jcYtoNqK9UDg29FuWX5Exkp-0-8ad7645c0c597f47cf12fc73bc04e9fe)
文件以冒号为分隔符,第一列为组账户名称,第二列为密码占位符,第三列为GID,第四列为组成员信息(注意,这里仅显示附加成员,基本成员不显示)。
4.组账户密码文件
组账户密码信息被保存在/etc/gshadow文件中,通过命令cat/etc/gshadow查看内容如下:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_52.jpg?sign=1738901368-igokVeDE3hLDgKGl2aMtXhBBrxCvws6k-0-eb6abab16c07e30c4b35e83b5465d9a2)
文件以冒号为分隔符,第一列为组账号名称,第二列为组密码(一般为组管理员密码),第三列为组管理员,第四列为组成员(与/etc/group第四列相同)。
通过<gpasswd 组名>的方式可以为组设置密码,通过<gpasswd-A 账户名称 组账户名称>可以为组添加管理员。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_53.jpg?sign=1738901368-ayfdZ1mib1cO8I8PH02vKho4O9eCT9Jo-0-7f93497da83546fb825a8e0e2d6291b8)
2.3.6 文件及目录权限
1.概念
Linux权限主要分为读、写、执行三种控制,使用ls-l命令查看文件或目录信息时,系统会显示为r(读取权限)、w(写入权限)、x(执行权限),以下为ls-l显示的信息:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_54.jpg?sign=1738901368-LgIRCunLOUbCEB1F8JBLhZGzPcFFCGzJ-0-4feb764cf7c2c406a194e23e0d3ca175)
第一列的第一个字符代表文件类型:-代表普通文件,d代表目录,l代表链接文件,b或c代表设备。第二至第九个字符代表权限,三位一组分别为所有者的权限、所属组的权限、其他账户的权限,rwxrwxrwx表示文档的所有者(user)、组(group)、其他账户(other)权限均为可读、可写、可执行,rwxr--r--表示文档所有者权限为读写执行,所属组权限为只读,其他账户权限为只读。第二列为链接数量或子目录个数(文件和目录这个数字的含义有所不同),第三列为文档的所有者,第四列为文档的所属组,第五列为容量,第六列为最近文档被修改的月份,第七列为文档最近被修改的日期,第八列为文档最近被修改的时间,第九列为文件或目录名称。
对于权限的表示,除了可以使用比较直观的rwx表示外,还可以使用数字表示,表2-6给出了它们之间的对应关系,以及这些权限对文件与目录的含义,如果同样是x或者1的权限,对于文件来说x代表可以执行,对于目录来说x代表用户有权进入该目录。
表2-6
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_55.jpg?sign=1738901368-2qB8Aus9uklzLKiIBQ7IPtjhdemgkQlY-0-f7bb7e45b96389f6871b46bdc16bf972)
2.修改文档属性
(1)chmod
描述:改变文件或目录权限。
用法:chmod[选项]权限 文件或目录
选项:--reference=RFILE #根据参考文档设置权限
-R #递归将权限应用于所有的子目录与子文件
chmod命令参数中,u代表所有者,g代表所属组,o代表其他用户,a代表所有人。
下面的例子中,先查看名称为install.log的文件信息,权限为文件所有者可读可写,所属组只读,其他人只读。通过chmod修改文件所有者权限、所属组权限、其他人权限均设置为可读、可写、可执行,完成修改后,使用ls-l命令查看修改结果。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_56.jpg?sign=1738901368-O2s5rRH0rfLLSiXu1rnhI7i53ma2H4dj-0-5de9c33227560b589ade88f4754809fe)
使用字符形式修改权限的另一种形式,是在原有权限的基础上修改权限,方法是使用+/-权限的方式。下面的例子通过chmod命令将install.log文件所属组权限在原有权限基础上减去执行的权限,其他人的权限也在原有权限的基础上减去修改与执行的权限。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_57.jpg?sign=1738901368-C7g8heAEtpydn7ywJe0EcjVUtCyq455L-0-2b350e85e6df10dfc6f2d845bb6f59b3)
chmod可以使用+符号来增加对应的权限,也可以使用-符号来减去相应的权限。
除了使用字符的方式修改权限外,chmod还支持使用数字的方式修改权限,数字与权限的对应关系参见表2-6,下面通过实例说明使用方法。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_58.jpg?sign=1738901368-pmUj61cFzdFctsWwZUaEOoQlbcJXBBOI-0-710d4e4fe20340e6437f07c0a556111b)
最后以其他文档作为参考修改权限。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_59.jpg?sign=1738901368-7eDHp3RNBfRivpgk4NjZNjH1J1Kpb6cB-0-e535fb9e6f3d91df45c6487a10182131)
(2)chown
描述:修改文件或目录的所有者与所属组。
用法:chown[选项][所有者][:[所属组]]文件或目录
选项:-R #递归将权限应用于所有的子目录与子文件。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_60.jpg?sign=1738901368-m2YWXSk95DKgOXrb158g527bGF0ObQlr-0-510846df6aff529aed1cbfd46ede3d63)
2.3.7 账户管理案例
下面将介绍一个模拟公司的组织结构,EXAMPLE公司是一个从事教育培训的组织,公司结构主要分为教研室(teach)、校长办公室(office)、财务部(finance)、行政部(admin)、市场部(market)。为了后期部署文件共享服务器,我们需要为每个部门创建各自独立的共享目录,根据要求为所有的普通员工创建各自独立的账户,这些账户仅需要读权限即可,并为每个部门的负责人创建一个管理账户(管理员名称为Op_部门名称),这个账户要求可以进行读写操作。为了后期管理的方便,需要为每个部门创建与部门名称同名的组账户。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_61.jpg?sign=1738901368-0vgIHihVhVfvimP9hTvZuo4GIriN3jMM-0-43e8527b19f9cf370d581b2d71e8bd8c)
2.3.8 ACL访问控制权限
由于系统的基本权限是针对文档的所有者、所属组或其他账户进行控制的,无法针对某个单独的账户进行控制,所以就有了ACL(Access Control List)访问控制列表的概念,使用ACL,我们可以针对单一账户设置文档的访问权限。
Linux系统使用getfacl查看文档的ACL权限,使用setfacl来设置文档的ACL权限。
getfacl输出内容的格式大致如下:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_62.jpg?sign=1738901368-7kr0docqtZFH5xwfvExtnIpW9FzZ4rCH-0-4d06ed4b22c363eaa99bc2513bdc146e)
以上输出信息中,第一行为文件或目录名称,第二行为文档所有者,第三行为文档所属组,第四行为suid、sgid、sticky权限的标记位,第五行为文档所有者权限,第七行为文档所属组权限,第十行为其他账户权限,第五、七、十行为系统基本权限,第六行为通过ACL指令添加的对账户的访问控制权限,第八行为通过ACL指令添加的对组账户的访问控制权限,第九行为权限掩码行。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_63.jpg?sign=1738901368-JJjgucPGh58e2eepCihh27grKlpDBxpB-0-918ca51a72157dee5705feba57e5a342)
从以上输出信息可以看出,该文件未设置附加的ACL访问控制条目,仅有基本的文件所有者、所属组、其他账户的访问控制。
setfacl的作用和用法如下。
描述:设置文档访问控制列表。
用法:setfacl[选项][{-m|-x} acl条目]文件或目录
选项:-b #删除所有的ACL条目
-m #添加ACL条目
-x #删除指定的ACL条目
-R #递归处理所有的子文件与子目录
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_64.jpg?sign=1738901368-M9wslZpvcg4tRkf95CnANCaBRx7G5R1d-0-804e094131f6fd3b257e0491d12abf09)