读书笔记《Linux命令行与shell脚本编程大全》第7章
原创- 2023-12-21 15:16:51
- 958
本篇目录
第七章 理解Linux文件权限
一、Linux的安全性
Linux安全系统的核心是用户账户,每个进入Linux系统的用户会被分配唯一的用户账户。
1、 /etc/passwd 文件
该文件是用来将用户的登录名匹配到对应的UID值。具体内容可使用cat /etc/passwd进行查看。
图中x前的名称为系统账户名称,是系统上运行的各种服务进程访问资源用的特殊账户;所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上;x为密码字段,已被加密处理。
Linux为系统账户预留了500以下的UID值,有些服务甚至要用特定的UID才能正常工作。为普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配给这个账户,但并非所有的Linux发行版都是这样的。/etc/passwd 文件字段包含了:
(1)登录用户名;
(2)用户密码;
(3)用户账户的UID;
(4)用户账户的组ID;
(5)用户账户的文本描述;
(6)用户HOME目录的位置;
(7)用户的默认shell。
2. /etc/shadow 文件
该文件相较于/etc/passwd文件来说对Linux系统密码管理提供了更多的控制。只有root用户才能访问这也让它更为安全,/etc/shadow文件为系统上的每个用户账户都保存了一条记录。在/etc/shadow文件的每条记录中都有9个字段:
(1)与/etc/passwd文件中的登录名字段对应的登录名;
(2)加密后的密码;
(3)自上次修改密码后过去的天数密码(自1970年1月1日开始计算);
(4)多少天后才能更改密码;
(5)多少天后必须更改密码;
(6)密码过期前提前多少天提醒用户更改密码;
(7)密码过期后多少天禁用用户账户;
(8)用户账户被禁用的日期(用自1970年1月1日到当天的天数表示);
(9)预留字段给将来使用。
使用shadow密码系统后,Linux系统可以更好地控制用户密码。它可以控制用户多久更改一次密码,以及当密码未更新的话多久可以禁用该用户账户等。
3. 添加新用户
添加用户时使用useradd命令,可以一次性创建新用户账户及设置用户HOME目录结构,该命令使用系统的默认值以及命令行参数来设置用户账户,可以使用-D参数查看默认值。
在操作的图中展示的默认值:
- GROUP:表示新用户会被添加到GID为100的公共组;
- HOME:表示新用户的HOME目录会位于的路径;
- INACTIVE:表示新用户账户密码在过期后不会被禁用;
- EXPIRE:表示新用户账户未被设置过期日期;
- SHELL:表示新用户账户将bash shell作为默认shell;
- SKEL:表示系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
- CREAT_MATL_SPOOL:表示系统不会为该用户账户在mail目录下创建一个用于接收邮件的文件;
- 在默认情况下,useradd命令不会创建HOME目录,与-m参数连用时才会创建HOME目录;
- 若是想修改系统默认的设置需要在useradd -D命令后加其他参数进行更改。例如想要更改默认的登录shell,可以与-s连用。
4. 删除用户:使用userdel命令
在默认情况下,userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。使用userdel -r命令会删除用户的HOME目录以及邮件目录但系统上仍可能存有已删除用户的其他文件。需要注意的是在有大量用户的环境中时-r参数需要谨慎使用。
5. 修改用户
使用不同工具修改已有用户账户信息
(1)usermod
可以用来修改/etc/passwd文件中的大部分字段,只需用使用对应的命令行参数就可以了。例如:
- l修改用户账户的登录名。
- L锁定账户,使用户无法登录,同时无需删除账户和用户的数据。
- p修改账户的密码。
- U解除锁定,使用户能够登录。
(2)passwd和chpasswd
只使用passwd命令时,会更改用户自己的密码。系统上的任何用户都能改自己的密码,但只有root用户才有权限改别人的密码。-e参数能强制用户下次登录时修改密码。当需要为系统中的大量用户修改密码时,可以使用chpasswd命令。
(3)chsh、chfn和chage
chsh命令用来快速修改默认的用户登录shell。使用时必须用shell的全路径名作为参数,不能只用shell名;chfn命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法;chage命令用来帮助管理用户账户的有效期。
二、使用Linux组
1. /etc/group 文件
/etc/group文件包含系统上用到的每个组的信息。
/etc/group文件有4个字段:
(1)组名
(2)组密码
(3)GID
(4)属于该组的用户列表
需要注意的是:千万不能通过直接修改/etc/group文件来添加用户到一个组,要用usermod命令
2. 创建新组
groupadd命令可在系统上创建新组,创建新组时默认没有用户被分配到该组,可以使用usermod命令加入。
3. 修改组
groupmod命令可以修改已有组的GID或组名(当修改GID时加-g,修改组名时加-n),修改组名不会影响其他内容。
三、理解文件权限
1. 使用文件权限符
使用ls -l命令可以查看文件的权限,输出结果如下:
输出结果的第一个字段就是描述文件和目录权限的编码。
这个字段的第一个字符代表了对象的类型:
(1)-代表文件
(2)d代表目录
(3)l代表链接
(4)c代表字符型设备
(5)b代表块设备
(6)n代表网络设备
之后有3组三字符的编码。每一组定义了3种访问权限, 其中:r代表对象是可读的,w代表对象是可写的,x代表对象是可执行的。
这3组权限分别对应对象的3个安全级别:
- 第一组三字符的编码代表对象的属主;
- 第二组三字符的编码代表对象的属组;
- 第三组三字符的编码代表系统其他用户。
2. 默认文件权限
umask命令用来设置所创建文件和目录的默认权限。要理解umask的工作原理,得先理解八进制模式的安全性设置。八进制模式的安全性设置先获取这3个rwx权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。
四、改变安全性设置
1. 改变权限
chmod命令用来改变文件和目录的安全性设置。可在两种模式下改变权限:
(1)八进制模式:直接用期望赋予文件的标准3位八进制权限码;
(2)符号模式:举一个例子,当我想让test文件的所有用户都移除已有的执行权限,那么我的操作为下图。
其中的a为所有用户,-为移除,x为执行权限。
2. 改变所属关系
chown命令用来改变文件的属主,可用登录名或UID来指定文件的新属主,该命令支持同时改变文件的属主和属组。
需要注意的是:只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。chgrp命令用来改变文件的默认属组,用户账户必须是这个文件的属主,除了能够更换属组之外,还得是新组的成员。
五、共享文件
当创建新的文件时,Linux会默认分配权限,若想共享该文件则需要更改文件的权限。通过chgrp命令将目录的默认属组改为包含所有需要共享文件的用户的组。
最后,将目录的SGID位置位,以保证目录中新建文件都用shared作为默认属组。为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可写。在前面的例子中,umask改成了002,所以文件对属组是可写的。做完了这些,组成就能到共享目录下创建新文件了。跟期望的一样,新文件会沿用目录的属组,而不是用户的默认属组。现在shared组的所有用户都能访问这个文件了。