Contents
学习目标:从认识Linux命令行基础开始,一直到写出自己的shell脚本
Linux的安全性
Linux安全系统的核心是用户账户。每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于登录系统时用的账户。
用户权限是通过创建用户时分配的用户ID(UID)来追踪。UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名。登录名是用户用来登录系统的最长八字符的字符串,同时会关联一个对应的密码。
/etc/passwd文件
改文件用于将用户的登录名匹配到对应的UID值,它包含了一些与用户相关的信息。
- root用户账户是Linux系统的管理员,固定分配给它的UID是0。
- Linux为系统账户预留了500以下的UID值。有些服务甚至要用特定的UID才能正常工作。为普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配分配给这个账户。
/etc/shadow文件
/etc/shadow文件对Linux系统密码管理提供了更多的控制。只有root用户才能访问/etc/shadow文件,这让它比起/etc/passwd安全许多
使用shadow密码系统后,Linux系统可以更好地控制用户密码。它可以控制用户多久更改一次密码,以及什么时候禁用该用户账户。
用户添加和删除
用来向Linux系统添加新用户的主要工具是useradd,该命令可以一次性创建新用户账户以及设置用户HOME目录结构。useradd命令使用系统默认值以及命令行参数来设置用户账户。系统默认值被设置在/etc/default/useradd文件中。可以使用加入了-D选项的useradd命令查看所有Linux系统中的默认值。
userdel命令可以用来从系统中删除用户。默认情况下。userdel命令只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
用户修改
Linux提供了一些不同的工具来修改已有账户的信息。
- usermod:用来修改/etc/passwd文件中大部分字段,只需要用与想修改的字段对应的命令行参数就行
- -l 修改用户账户的登录名
- -L锁定账户,是用户无法登录
- -p修改账户的密码
- -U解除锁定,使用户能够登录
- passwd和chpasswd:passwd修改用户密码,任何用户都只能修改自己的密码,但只有root用户才有权限修改别人的密码。chpasswd命令能从标准输入自动读取登录名和密码列表,给密码加密,然后为用户账户设置。
- chsh、chfn和chage:专门用来修改特定的账户信息。cash命令用来快速修改默认的用户登录shell。使用时必须用shell的全路径名作为参数,不能只用shell名。chfn命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。chfn命令会将用于Unix的finger没给你了那个的信息存进备注字段(finger命令可以非常方便地查看Linux系统上的用户信息)。change命令用来帮助管理用户账户的有效期。
Linux组
用户账户在控制单个用户安全性方面很好用,但设计在共享资源的一组用户时就比较捉襟见肘。为了解决这个问题,Linux系统采用了另外一个安全概念 – 组(group),组权限允许多个用户对系统中的对象共享一组共用的权限。每个组都有唯一的GID–跟UID类似,在系统上这是个唯一的数值。除了GID,每个组还有唯一的组名。
/etc/group文件
与用户账户类似,组信息也保存在系统的一个文件中。/etc/group文件包含系统上用到的每个组的信息。
和UID一样,GID在分配时也采用了特定的格式。系统账户用的组通常会分配低于500的GID值,而用户组的GID则会从500开始分配。/etc/group文件有4个字段:
- 组名
- 组密码
- GID
- 属于该组的用户列表
不能通过直接修改/etc/group文件来添加用户到一个组,要用usermod命令。在添加用户到不同的组之前,首先得创建组。
创建新组
groupadd命令可以在系统上创建新组,在创建新组时,默认没有用户被分配到该组。但可以使用usermod命令来弥补这一点。
修改组
groupmod命令可以修改已有组的GID(加-g选项)或组名(加-n选项)。修改组名时,GID和组成员不会变,只有组名改变。由于所有的安全权限都是基于GID的,所以可以随意更改组名而不会影响文件的安全性。
文件权限
文件权限符
使用ls命令可以用来查看Linux系统上的文件、目录和设备的权限
输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
- -代表文件
- d代表目录
- c代表字符型设备
- b代表块设备
- n代表网络设备
之后有3组三字符的编码,每一组定义了3种访问权限
- r代表对象是可读的
- w代表对象是可写的
- x代表对象是可执行的
若没有某种权限,在该权限位会出现 ‘-’ 。这3组权限分别对应对象的3个安全级别:
- 对象的属主
- 对象的属组
- 系统的其他用户
默认文件权限
文件权限从何而来?答案是umask,umask命令用来设备所创建文件和目录的默认权限,所用到的是一个八进制的文件权限码,如下
- 使用chmod命令可以修改文件权限时,用到的也是上述编码,或者使用[ugoa…][[±=][rwxXstugo…] 格式
- chown命令用来改变文件的属主,chgrp命令用来改变文件的默认属组 chown options owner[.group] file \
共享文件
创建新文件时,Linux会用默认的UID和GID给文件分配权限。想让其他人也能访问文件,要么改变其他用户所在安全组的访问权限,要么就给文件分配一个包含其他用户的新默认属组。
Linux还为每个文件和目录存储了3个额外的信息位
- 设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行。
- 设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组 作为默认属组。
- 粘着位:进程结束后文件还驻留在内存中。
SGID位对文件共享非常重要。启用SGID后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组,这个组也就成为了每个用户的属组。
SGID可通过chmod命令来设置。它会加到标准3位八进制之前,或者在符号模式下用符号s
基本的Linux文件系统
Linux的文件系统为硬盘上存储的0和1和应用中使用的文件和目录之间搭建了一座桥梁。Linux支持多种类型的文件系统管理文件和目录。每种文件系统都在存储设备上实现了虚拟目录结构,仅特性略有不同。
linux文件系统的演变过程如下
- ext文件系统:扩展文件系统,使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
- ext2文件系统:第二代扩展文件系统,为文件添加了创建时间值、修改时间值和最后访问时间值来帮助系统管理员追踪文件的访问情况。
- ext3文件系统:采用和ext2文件系统相同的索引节点表结构,但给每个存储设备增加了一个日志文件,以将准备写入存储设备的数据先记入日志。
- ext4文件系统:支持数据压缩和加密,还支持一个称作区段(extent)的特性。还引入了块预分配技术
- 另外还有RFS、XFS、ZFS等操作系统
操作文件系统
创建分区
一开始,必须在存储设备上创建分区来容纳文件系统。分区可以是整个硬盘,也可以是部分硬盘,以容纳虚拟目录的一部分。
fdisk工具用来帮助管理安装在系统上的任何存储设备上的分区
创建文件系统
在将数据存储到分区之前,必须使用某种文件系统对其进行格式化,这样Linux才能使用它。每种文件系统类型都用自己的命令行程序来格式化分区。
文件系统检查与修复
就算是现代文件系统,碰上突然断电或者某个不规矩的程序在访问文件时锁定了系统,也会出现错误。
fsck命令可以检查和修改大部分类型的Linux文件系统,fsck命令使用/etc/fstab文件来自动决定正常挂载到系统上的存储设备的文件系统。
逻辑卷管理
逻辑卷管理器(LVM)软件包可以将另外一个硬盘上的分区加入到已有文件系统,动态地添加存储空间。
在存储设备分区上直接创建文件系统的一个限制因素是,如果硬盘空间用完了,则无法轻易改变文件系统的大小。但linux支持逻辑卷管理,这是一种跨多个存储设备创建虚拟分区的方法。这种方法允许你轻松地扩展一个已有文件系统,而不用完全重建。Linux LVM包提供了跨多个存储设备创建逻辑卷的命令行命令。