Linux 分区的重要性
磁盘分区是使用分区编辑器(例如 fdisk)对硬盘驱动器进行单独划分的过程。将磁盘划分为多个分区后,不同类别的目录和文件可以存储在不同的分区中。
许多新的 Linux 系统管理员(或 Windows 管理员)只创建两个分区 /(根)并将整个硬盘交换。这真是个坏主意。在对磁盘进行分区时,您需要考虑以下几点。
磁盘分区的目的
像 Windows/Linux 这样的操作系统可以安装在单个未分区的硬盘上。但是,将硬盘划分为多个分区的能力提供了一些重要的优势。如果您在服务器上运行 Linux,请考虑以下事实:
- 易于使用– 更容易恢复损坏的文件系统或操作系统安装。
- 性能– 文件系统越小,效率越高。您可以根据应用程序(例如日志或缓存文件)调整文件系统。专用交换分区也可以提高性能(对于最新的 Linux 内核 2.6 来说,这可能并非如此)。
- 安全性– 将操作系统文件与用户文件分开可能会使系统更安全。使用各种技术可以限制某些文件系统的增长。
- 备份和恢复——更容易的备份和恢复。
- 稳定性和效率– 您可以通过使用各种块大小格式化磁盘来提高磁盘空间效率。这取决于使用情况。例如,如果数据是许多小文件,则最好使用较小的块大小。
- 测试– 从单个硬盘启动多个操作系统,例如 Linux、Windows 和 FreeBSD。
分割 | 目的 |
---|---|
/usr | 大多数可执行二进制文件、内核源代码树和大量文档都存放在这里。 |
/var | 这是邮件和打印等假脱机目录的存放位置。此外,它还包含错误日志目录。 |
/tmp | 这是应用程序存储大多数临时数据文件的地方。 |
/启动 | 这是您的内核映像和引导加载程序配置所在的位置。 |
/家 | 这是用户主目录所在的位置。 |
假设您有 120 GB 的 SCSI 硬盘,其中只有 /(根)和交换分区。某个用户(可能是内部用户、外部用户或破解者)运行了一些程序,占用了您所有的硬盘空间(DoS攻击)。例如,考虑以下用户可以在 /tmp 目录中运行的小脚本:
#!/bin/sh man bash > $(mktemp) $0
任何人都可以通过 cron 运行上述脚本(如果允许),甚至使用 nohup 命令:
$ nohup bad-script &
结果可能是一场彻底的灾难,因为整个文件系统都会受到拒绝服务攻击。它甚至会绕过磁盘配额限制。我们的一位初级 Linux 系统管理员只创建了两个分区。后来,编写不当的应用程序占用了 /var/log/ 中的所有空间。最终结果是他留下了备忘录(因为他没有遵循内部文档,其中包含有关客户端服务器分区设置的指南)。底线是在 Linux 服务器上创建分区。
如果您没有分区模式,那么可能会发生以下攻击:
- 失控进程。
- 针对磁盘空间的拒绝服务攻击(参见上面的示例脚本)。
- 用户可以在 /tmp 甚至 /home 中下载或编译 SUID 程序。
- 无法进行性能调整。
- 将 /usr 安装为只读无法提高安全性。
- 通过在 /etc/fstab 文件中添加以下选项可以阻止所有此类攻击:
- nosuid – 不要在此分区上设置 SUID/SGID 访问权限
- nodev – 此分区上不要有字符或特殊设备
- noexec – 不设置此分区上任何二进制文件的执行
- ro – 将文件系统挂载为只读
- 配额– 启用磁盘配额
请注意,只有当您有单独的分区时,才能设置上述选项。请确保您创建一个如上所述的分区,并在每个分区上设置特殊选项:
- /home – 设置选项 nosuid,以及带有 diskquota 选项的 nodev
- /usr – 设置选项 nodev
- /tmp – 设置选项nodev,nosuid,noexec选项必须启用
例如 /etc/fstabe 中 /home 的条目应如下所示:
/dev/sda1 /home ext3 defaults,nosuid,nodev 1 2
下面是我的一台 OpenBSD 生产服务器的 mount 命令输出:
/dev/wd0a on / type ffs (local) /dev/wd1a on /home type ffs (local, nodev, nosuid, with quotas) /dev/wd0d on /root type ffs (local) /dev/wd0e on /usr type ffs (local, nodev) /dev/wd0f on /tmp type ffs (local, nodev) /dev/wd0h on /var type ffs (local, nodev, nosuid) /dev/wd0g on /var/log type ffs (local, nodev)
如何获取有关分区的信息?
在 Linux / UNIX 类操作系统上,有多种方法可以获取有关分区的信息。
列出分区:
fdisk -l
报告文件系统磁盘空间使用情况:
df -h
或者
df -k
显示分区挂载选项,包括挂载点
mount
示例输出:
/dev/sda2 on / type ext3 (rw,relatime,errors=remount-ro) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) /proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) varrun on /var/run type tmpfs (rw,nosuid,mode=0755) varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777) udev on /dev type tmpfs (rw,mode=0755) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) fusectl on /sys/fs/fuse/connections type fusectl (rw) /dev/sda1 on /media/sda1 type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096) /dev/sda5 on /share type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096) /dev/sdb2 on /disk1p2 type ext3 (rw,relatime,errors=remount-ro) securityfs on /sys/kernel/security type securityfs (rw) debugfs on /sys/kernel/debug type debugfs (rw) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) gvfs-fuse-daemon on /home/vivek/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=vivek)
显示/编辑文件系统配置选项
less /etc/fstab
或者
vi /etc/fstab
以 ro 模式快速重新挂载 /usr
mount -o remount, ro /usr
快速挂载 /etc/fstab 中配置的所有文件系统
mount -a
参考:
- 阅读手册页 – fstab、mount 和 fdisk 命令。
- Linux 分区指南。
- 磁盘分区