《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限

Linux学习——理解Linux文件权限

  • Linux 文件权限
    • Linux的安全性
      • /etc/passwd 文件
      • /etc/shadow 文件
      • 添加新用户
      • 删除用户
      • 修改用户
    • 使用Linux组
      • /etc/group 文件
      • 创建新组
      • 修改组
    • 理解文件权限
      • 使用文件权限符
      • 默认文件权限
    • 改变安全性设置
      • 改变权限
      • 改变所属关系
    • 共享文件
  • 小结

Linux 文件权限

Linux沿用了Unix文件权限的办法,即允许用户和组根据每个文件和目录的安全性设置来访问文件。

Linux的安全性

Linux安全系统的核心是用户账户。
分配唯一的用户账户。

用户权限通过创建用户时分的用户ID(User ID,通常缩写为UID)来跟踪的。
登陆系统时使用的是登录名。

/etc/passwd 文件

Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。
包含一些与用户有关的信息。

例:
《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第1张图片

root用户账户是Linux系统管理员,固定分配给它的UID是0。
Linux系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。
这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。
所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。

/etc/passwd 文件的字段包含的信息如下:
  - 登录用户名
  - 用户密码
  - 用户账户的UID(数字形式)
  - 用户账户的组ID(GID)(数字形式)
  - 用户账户的文本描述(称为备注字段)
  - 用户HOME目录的位置
  - 用户的默认shell

/etc/shadow 文件

对Linux系统密码管理提供更多的控制。
只有root用户才能访问。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第2张图片

在/etc/shadow文件的每条记录中都有9个字段:
 	- 与/etc/passwd文件中的登录名字段对应的登录名
 	- 加密后的密码
 	- 自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
 	- 多少天后才能更改密码
 	- 多少天后必须更改密码
 	- 密码过期前提前多少天提醒用户更新密码
 	- 密码过期后多少天禁用用户账户
 	- 用户账户被禁用的日期(自1970年1月1日到当天的天数表示)
 	- 预留字段给将来使用

添加新用户

用来向Linux系统添加新用户的主要工具是 useradd。
使用系统的默认值以及命令行参数来设置用户账户。
系统默认值被设置在 /etc/default/useradd文件中。

-D 查看所用Linux系统中的这些默认值,例:
《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第3张图片

显示的默认值如下:
	- 新用户会被添加到GID为100 的公共组;
	- 新用户的HOME目录将会位于/home/loginname;
	- 新用户账户密码在过期后不会被禁用;
	- 新用户账户未被设置过期日期;
	- 新用户账户将 bash shell 作为默认shell;
	- 系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
	- 系统为该用户账户在mail目录下创建一个用于接收邮件的文件。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第4张图片

续:
-r				创建系统账户
-p passwd		为用户账户指定默认密码
-s shell		指定默认的登录shell
-u uid			为账户指定唯一的UID

可以在 -D选项后跟上一个指定的值来修改系统默认的新用户设置。
《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第5张图片

删除用户

从系统中删除用户可以用userdel命令。
默认情况下, userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
如果加上-r参数, userdel会删除用户的HOME目录以及邮件目录。


注意:
在删除用户的HOME目录文件之前一定要简称清楚,避免误删一些重要文件。

修改用户

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第6张图片
usermod

用来修改/etc/passwd文件中的大部分字段,只需用想修改的字段对应的命令行参数就可以。

命令行参数:
	-c	修改备注字段
	-e 	修改过期日期
	-g  修改默认的登录组
	-l  修改用户账户的登录名
	-L  锁定账户,使账户无法登录
	-p  修改账户的密码
	-U  解除锁定,使账户能够登录

passwd 和 chpasswd

passwd  改变用户密码
	-e  选项能强制用户下次登录是修改密码
	
chpasswd  命令能从标准输入字典读取登录名和密码对(由冒号分隔)列表,给密码加密,然后为用户账户设置。
	可以使用重定向命令来讲含有userid:passwd 对的文件重定向给该命令。
		#     chpasswd <  users.txt
		#

chsh、chfn和chage

chash、chfn和chage 工具专门用来修改特定的账户信息。

chsh 命令用来快速修改默认的用户登录shell。
	使用时必须用shell的全路径名作为参数,不能只用shell名。

chfh 命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。

chage 命令用来帮助管理用户账户的有效期。
	命令行参数:
		-d  设置上次修改密码到现在的天数
		-E  设置密码过期的日期
		-I  设置密码过期到锁定账户的天数
		-m  设置修改密码之间最少要多少天
		-W  设置密码过期前多久开始出现提醒信息

使用Linux组

组权限允许多个用户对系统中的对象(比如文件、目录或设备等)共享一组共用的权限。

每个组都有唯一的GID。
每个组还有唯一的组名。

/etc/group 文件

/etc/group文件包含系统上用到的每个组的信息。

例:
《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第7张图片

/etc/group文件由4个字段:
	-  组名
	- 组密码
	- GID
	- 属于该组的用户列表

创建新组

groupadd 命令可在系统上创建新组。

groupadd 命令没有提供将用户添加到组中的选项,但可以用usermod命令来弥补。
usermod命令的 -G 选项会把新组添加到该用户账户的组列表中。
如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,组关系的更改才能生效。

修改组

groupmod 命令可以修改已有组的GID(加 -g 选项)或组名(加 -n 选项)。

修改组名时,GID和组成员不会变,只有组名改变。
可以随意改变组名而不会影响文件的安全性。

理解文件权限

使用文件权限符

ls 命令可以用来查看Linux系统上的文件、目录和设备的权限。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第8张图片

输出结果的第一个字段是描述文件和目录权限的编码。
这个字段的第一个字符代表了对象的类型:
	-  代表文件
	d  代表目录
	l  代表链接
	c  代表字符型设备
	b  代表块设备
	n  代表网络设备
之后由3组三字符的编码。每一组定义了3种访问权限:
	r  代表对象是可读的
	w  代表对象是可写的
	x  代表对象是可执行的
	若没有某种权限,在该权限位会出现单破折线。
	这3组权限分别对应对象的3个安全级别:
	对象的属主
	对象的属组
	系统其他用户

在这里插入图片描述

rwx   文件的属主(设为登录名 rich)
rwx   文件的数组(设为组名 rich)
r-x   系统上其他人

默认文件权限

umask 命令用来设置所创建文件和目录的默认权限。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第9张图片

八进制模式的值664代表属主和属组成员都有读取和写入的权限,而其他用户都只有读取权限。
umask值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。
要把umask值从对象的全权限值中减掉。
对文件来说,全权限的值是666(所有用户都有读和写的权限);
而对目录来说,则是777(所有用户都有读、写、执行权限)。
文件一开始的权限是666, 减去umask值022之后, 剩下的文件权限就成了644。

由于目录的默认权限是777, umask作用后生成的目录权限不同于生成的文件权限。
umask值026会从777中减去,留下来751作为目录权限设置。

改变安全性设置

改变权限

chmod命令

用来改变文件和目录的安全性设置。
命令格式如下:
	chmod options mode file
	
mode参数可以使用八进制模式或符号模式进行安全性设置。

在这里插入图片描述
符号模式的权限
在这里插入图片描述

第一组字符定义了权限作用的对象:
	 u代表用户
	 g代表组
	 o代表其他
	 a代表上述所有
下一步,后面跟着的符号表示你是想在
现有权限基础上增加权限( +),
还是在现有权限基础上移除权限( .),
或是将权限设置成后面的值( =)。
第三个符号代表作用到设置上的权限。
	 X:如果对象是目录或者它已有执行权限,赋予执行权限。
	 s:运行时重新设置UID或GID。
	 t:保留文件或目录。
	 u:将权限设置为跟属主一样。
	 g:将权限设置为跟属组一样。
	 o:将权限设置为跟其他用户一样。

改变所属关系

chown命令

用来改变文件的属主。
命令格式如下:
	chown options owner[.group] file

可用登录名或UID来指定文件的新属主:
在这里插入图片描述

也支持同时改变文件的属主和属组:
在这里插入图片描述

chown 命令的选项参数:
	-R  选项配合通配符可以递归地改变子目录和文件的所属关系。
	-h  选项可以改变该文件的所有符号链接文件的所属关系。

chgrp命令

可以更改文件或目录的默认属组。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第10张图片

/usr/sbin/groupadd shared 在系统上创建新组shared
/usr/sbin/usermod -G shared rich 将用户rich添加到组shared
/usr/sbin/groupmod -n sharing shared 修改组shared名为sharing
可以修改已有组的GID(加-g选项)或组名(加-n选项)。

共享文件

Linux系统上共享文件的方法是创建组。
Linux还为每个文件和目录存储了3个额外的信息位。
	 设置用户ID( SUID) :当文件被用户使用时,程序会以文件属主的权限运行。
	 设置组ID( SGID) :对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
	 粘着位:进程结束后文件还驻留(粘着)在内存中。
SGID位对文件共享非常重要。
启用SGID位后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组,这个组也就成为了每个用户的属组。
SGID可通过chmod命令设置。它会加到标准3位八进制值之前(组成4位八进制值),或者在符号模式下用符号s。

《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第11张图片
《Linux命令行与shell脚本编程大全》学习笔记——理解Linux文件权限_第12张图片

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

小结

本章讨论了管理Linux系统安全性的一些命令行命令。
Linux通过用户ID和组ID来限制对文件、目录以及设备的访问。
useradd命令用来创建新的用户账户, 
groupadd命令用来创建新的组账户。
修改已有用户账户,我们用usermod命令。类似的groupmod命令用来修改组账户信息。
每个文件都有三个安全等级:文件的属主、能够访问文件的默认属组以及系统上的其他用户。
每个安全等级通过三个访问权限位来定义:
读取、写入以及执行,
对应于符号rwx。
如果某种权限被拒绝,权限对应的符号会用单破折线代替(比如r–代表只读权限)。
chmod命令用来修改文件和目录的安全设置。
只有文件的属主才能改变文件或目录的权限。
不过root用户可以改变系统上任意文件或目录的安全设置。
chown和chgrp命令可用来改变文件默认的属主和属组。
设置组ID位来创建共享目录。 
SGID位会强制某个目录下创建的新文件或目录都沿用该父目录的属组,而不是创建这些文件的用户的属组。
这可以为系统的用户之间共享文件提供一个简便的途径。

参考学习资料:

《Linux命令行与shell脚本编程大全》第3版

https://blog.csdn.net/x13262608581/article/details/107621770

你可能感兴趣的:(Linux,1024程序员节)