禅道博客

分享专业技术知识,文章内容干货满满

读书笔记《Linux命令行与shell脚本编程大全》第7章

2023-12-21 15:16:51
赵岩
原创 761
摘要:本文重点记录了书中第七章,是关于理解Linux文件权限的内容学习。

第七章 理解Linux文件权限

一、Linux的安全性

Linux安全系统的核心是用户账户,每个进入Linux系统的用户会被分配唯一的用户账户。

1、 /etc/passwd 文件

该文件是用来将用户的登录名匹配到对应的UID值。具体内容可使用cat /etc/passwd进行查看。

file-download-585694.json

图中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参数查看默认值。

file-download-585695.json

在操作的图中展示的默认值:


  • 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命令可以查看文件的权限,输出结果如下:

file-download-585698.json

输出结果的第一个字段就是描述文件和目录权限的编码。

file-download-585699.json

这个字段的第一个字符代表了对象的类型:

(1)-代表文件

(2)d代表目录

(3)l代表链接

(4)c代表字符型设备

(5)b代表块设备

(6)n代表网络设备

之后有3组三字符的编码。每一组定义了3种访问权限, 其中:r代表对象是可读的,w代表对象是可写的,x代表对象是可执行的。

file-download-585700.json

这3组权限分别对应对象的3个安全级别:


  • 第一组三字符的编码代表对象的属主;
  • 第二组三字符的编码代表对象的属组;
  • 第三组三字符的编码代表系统其他用户。


2. 默认文件权限

umask命令用来设置所创建文件和目录的默认权限。要理解umask的工作原理,得先理解八进制模式的安全性设置。八进制模式的安全性设置先获取这3个rwx权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。


四、改变安全性设置

1. 改变权限

chmod命令用来改变文件和目录的安全性设置。可在两种模式下改变权限:

(1)八进制模式:直接用期望赋予文件的标准3位八进制权限码;

(2)符号模式:举一个例子,当我想让test文件的所有用户都移除已有的执行权限,那么我的操作为下图。

file-download-585701.json

其中的a为所有用户,-为移除,x为执行权限。

2. 改变所属关系

chown命令用来改变文件的属主,可用登录名或UID来指定文件的新属主,该命令支持同时改变文件的属主和属组。


需要注意的是:只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。chgrp命令用来改变文件的默认属组,用户账户必须是这个文件的属主,除了能够更换属组之外,还得是新组的成员。


五、共享文件

当创建新的文件时,Linux会默认分配权限,若想共享该文件则需要更改文件的权限。通过chgrp命令将目录的默认属组改为包含所有需要共享文件的用户的组。


最后,将目录的SGID位置位,以保证目录中新建文件都用shared作为默认属组。为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可写。在前面的例子中,umask改成了002,所以文件对属组是可写的。做完了这些,组成就能到共享目录下创建新文件了。跟期望的一样,新文件会沿用目录的属组,而不是用户的默认属组。现在shared组的所有用户都能访问这个文件了。

暂时没有记录
评论通过审核后显示。