简体中文 繁體中文 English Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français Japanese

站内搜索

搜索

活动公告

通知:为庆祝网站一周年,将在5.1日与5.2日开放注册,具体信息请见后续详细公告
04-22 00:04
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Alpine Linux文件服务器搭建指南 从零开始构建轻量高效存储解决方案 适合企业和个人用户的完整教程与实战案例

SunJu_FaceMall

3万

主题

1158

科技点

3万

积分

白金月票

碾压王

积分
32796

立华奏

发表于 2025-8-24 00:30:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Alpine Linux是一个基于musl libc和BusyBox的轻量级Linux发行版,以其安全性、简洁性和高效性而闻名。它的体积小(基本系统只有5MB左右),资源占用低,非常适合用作文件服务器的基础操作系统。本文将详细介绍如何从零开始使用Alpine Linux构建一个轻量高效的文件服务器,适合企业和个人用户使用。

文件服务器是网络中用于存储、管理和共享文件的专用计算机。在企业环境中,它通常用于集中管理文档、提供数据备份和恢复、支持多用户协作等。对于个人用户,文件服务器可以用于家庭网络中的媒体存储、文件备份和远程访问等。

选择Alpine Linux作为文件服务器的主要优势包括:

• 资源占用低:可以在老旧或低配置硬件上高效运行
• 安全性高:默认采用最小化安装原则,减少攻击面
• 稳定性好:滚动更新模式确保系统始终处于最新状态
• 包管理简单:APK包管理器简洁高效
• 容器友好:可以轻松部署在容器环境中

准备工作

系统要求

在开始之前,我们需要确保硬件满足基本要求:

• CPU:至少1GHz的单核处理器(推荐多核处理器以提高并发性能)
• 内存:至少512MB RAM(推荐2GB或更多,特别是对于多用户环境)
• 存储:至少8GB的磁盘空间(根据实际存储需求调整)
• 网络:千兆以太网接口(推荐,以提高文件传输速度)

安装Alpine Linux

1.
  1. 下载Alpine Linux ISO镜像:
  2. 访问Alpine Linux官方网站(https://alpinelinux.org/downloads/)下载最新的标准版ISO镜像。
复制代码
2. 创建启动介质:
使用dd命令(Linux/macOS)或Rufus(Windows)将ISO镜像写入USB驱动器。

下载Alpine Linux ISO镜像:
访问Alpine Linux官方网站(https://alpinelinux.org/downloads/)下载最新的标准版ISO镜像。

创建启动介质:
使用dd命令(Linux/macOS)或Rufus(Windows)将ISO镜像写入USB驱动器。

在Linux上使用dd命令:
  1. dd if=alpine-standard-3.17.0-x86_64.iso of=/dev/sdX bs=4M status=progress
复制代码

(将/dev/sdX替换为你的USB设备)

1. 从USB启动计算机:
重启计算机,进入BIOS/UEFI设置,将启动顺序调整为首先从USB设备启动。
2. 开始安装:
系统启动后,使用root用户登录(无密码),然后运行setup-alpine脚本开始安装过程。

从USB启动计算机:
重启计算机,进入BIOS/UEFI设置,将启动顺序调整为首先从USB设备启动。

开始安装:
系统启动后,使用root用户登录(无密码),然后运行setup-alpine脚本开始安装过程。
  1. login: root
  2.    Welcome to Alpine Linux 3.17
  3.    Kernel 5.15.74-0-lts on an x86_64 (/dev/tty1)
  4.    
  5.    localhost:~# setup-alpine
复制代码

1.
  1. 按照提示完成安装:键盘布局:选择适合你的键盘布局(默认为us)主机名:输入服务器的主机名(例如fileserver)网络配置:选择要配置的网卡(例如eth0)IP地址:选择dhcp或手动配置静态IP(对于服务器,建议使用静态IP)网络配置示例(静态IP):ip address: 192.168.1.100
  2. netmask: 255.255.255.0
  3. gateway: 192.168.1.1
  4. dns server: 8.8.8.8 8.8.4.4密码:设置root用户密码时区:选择你的时区(例如UTC)代理/镜像:如果需要,配置HTTP代理或自定义镜像源SSH服务器:选择安装OpenSSH服务器(建议选择openssh)磁盘配置:选择磁盘安装模式(sys模式将Alpine安装到磁盘,data模式将配置和数据保存到磁盘但系统运行在内存中)选择要安装的磁盘(例如sda)确认格式化并安装
复制代码
2. 键盘布局:选择适合你的键盘布局(默认为us)
3. 主机名:输入服务器的主机名(例如fileserver)
4. 网络配置:选择要配置的网卡(例如eth0)
5. IP地址:选择dhcp或手动配置静态IP(对于服务器,建议使用静态IP)
6.
  1. 网络配置示例(静态IP):ip address: 192.168.1.100
  2. netmask: 255.255.255.0
  3. gateway: 192.168.1.1
  4. dns server: 8.8.8.8 8.8.4.4
复制代码
7. 密码:设置root用户密码
8. 时区:选择你的时区(例如UTC)
9. 代理/镜像:如果需要,配置HTTP代理或自定义镜像源
10. SSH服务器:选择安装OpenSSH服务器(建议选择openssh)
11. 磁盘配置:选择磁盘安装模式(sys模式将Alpine安装到磁盘,data模式将配置和数据保存到磁盘但系统运行在内存中)
12. 选择要安装的磁盘(例如sda)
13. 确认格式化并安装
14. 安装完成后,重启系统:reboot

按照提示完成安装:

• 键盘布局:选择适合你的键盘布局(默认为us)
• 主机名:输入服务器的主机名(例如fileserver)
• 网络配置:选择要配置的网卡(例如eth0)
• IP地址:选择dhcp或手动配置静态IP(对于服务器,建议使用静态IP)
  1. 网络配置示例(静态IP):ip address: 192.168.1.100
  2. netmask: 255.255.255.0
  3. gateway: 192.168.1.1
  4. dns server: 8.8.8.8 8.8.4.4
复制代码
• 密码:设置root用户密码
• 时区:选择你的时区(例如UTC)
• 代理/镜像:如果需要,配置HTTP代理或自定义镜像源
• SSH服务器:选择安装OpenSSH服务器(建议选择openssh)
• 磁盘配置:选择磁盘安装模式(sys模式将Alpine安装到磁盘,data模式将配置和数据保存到磁盘但系统运行在内存中)
• 选择要安装的磁盘(例如sda)
• 确认格式化并安装
  1. ip address: 192.168.1.100
  2. netmask: 255.255.255.0
  3. gateway: 192.168.1.1
  4. dns server: 8.8.8.8 8.8.4.4
复制代码

安装完成后,重启系统:
  1. reboot
复制代码

基本系统配置

1. 更新系统:apk update
apk upgrade
2. 安装常用工具:apk add bash vim curl wget sudo
3. 配置时区:setup-timezone -z Asia/Shanghai
4.
  1. 配置主机名解析:
  2. 编辑/etc/hosts文件,添加主机名解析:vim /etc/hosts添加以下内容(根据你的实际情况调整):127.0.0.1   localhost
  3. 127.0.0.1   fileserver.example.com fileserver
  4. ::1         localhost
  5. ::1         fileserver.example.com fileserver
复制代码
5. 创建普通用户(可选,但推荐):adduser -h /home/user -s /bin/bash user
6.
  1. 配置sudo(如果创建了普通用户):apk add sudo
  2. visudo取消注释或添加以下行:%wheel ALL=(ALL) ALL然后将用户添加到wheel组:adduser user wheel
复制代码

更新系统:
  1. apk update
  2. apk upgrade
复制代码

安装常用工具:
  1. apk add bash vim curl wget sudo
复制代码

配置时区:
  1. setup-timezone -z Asia/Shanghai
复制代码

配置主机名解析:
编辑/etc/hosts文件,添加主机名解析:
  1. vim /etc/hosts
复制代码

添加以下内容(根据你的实际情况调整):
  1. 127.0.0.1   localhost
  2. 127.0.0.1   fileserver.example.com fileserver
  3. ::1         localhost
  4. ::1         fileserver.example.com fileserver
复制代码

创建普通用户(可选,但推荐):
  1. adduser -h /home/user -s /bin/bash user
复制代码

配置sudo(如果创建了普通用户):
  1. apk add sudo
  2. visudo
复制代码

取消注释或添加以下行:
  1. %wheel ALL=(ALL) ALL
复制代码

然后将用户添加到wheel组:
  1. adduser user wheel
复制代码

网络配置

设置静态IP地址

虽然我们在安装过程中已经配置了网络,但为了确保配置正确并便于将来修改,我们可以手动配置网络。

1. 编辑网络配置文件:vim /etc/network/interfaces
2. 添加以下配置(根据你的网络环境调整):
“`
auto lo
iface lo inet loopback

编辑网络配置文件:
  1. vim /etc/network/interfaces
复制代码

添加以下配置(根据你的网络环境调整):
“`
auto lo
iface lo inet loopback

auto eth0
   iface eth0 inet static
  1. address 192.168.1.100
  2.    netmask 255.255.255.0
  3.    gateway 192.168.1.1
  4.    dns-nameservers 8.8.8.8 8.8.4.4
复制代码
  1. 3. 重启网络服务:
  2.    ```bash
  3.    service networking restart
复制代码

配置DNS

Alpine Linux使用/etc/resolv.conf文件来配置DNS服务器。我们可以手动编辑此文件:
  1. vim /etc/resolv.conf
复制代码

添加以下内容(根据你的DNS服务器调整):
  1. nameserver 8.8.8.8
  2. nameserver 8.8.4.4
  3. search example.com
复制代码

配置防火墙

Alpine Linux默认使用iptables作为防火墙工具。我们可以配置基本防火墙规则来保护服务器:

1. 安装iptables:apk add iptables
2. 创建防火墙规则脚本:vim /etc/firewall.rules
3. 添加以下规则(根据你的需求调整):
“`bash
#!/bin/sh

安装iptables:
  1. apk add iptables
复制代码

创建防火墙规则脚本:
  1. vim /etc/firewall.rules
复制代码

添加以下规则(根据你的需求调整):
“`bash
#!/bin/sh

# 清除现有规则
   iptables -F
   iptables -X
   iptables -t nat -F
   iptables -t nat -X

# 默认策略:拒绝所有传入连接,允许所有传出连接
   iptables -P INPUT DROP
   iptables -P FORWARD DROP
   iptables -P OUTPUT ACCEPT

# 允许本地回环
   iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和相关连接
   iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# 允许SSH(端口22)
   iptables -A INPUT -p tcp –dport 22 -j ACCEPT

# 允许Samba(端口139,445)
   iptables -A INPUT -p tcp –dport 139 -j ACCEPT
   iptables -A INPUT -p tcp –dport 445 -j ACCEPT
   iptables -A INPUT -p udp –dport 137 -j ACCEPT
   iptables -A INPUT -p udp –dport 138 -j ACCEPT

# 允许NFS(端口2049)
   iptables -A INPUT -p tcp –dport 2049 -j ACCEPT
   iptables -A INPUT -p udp –dport 2049 -j ACCEPT

# 允许FTP(端口21)
   iptables -A INPUT -p tcp –dport 21 -j ACCEPT

# 允许ICMP(ping)
   iptables -A INPUT -p icmp -j ACCEPT

# 记录并拒绝其他连接
   iptables -A INPUT -j LOG –log-prefix “INPUT:DROP:”
   iptables -A INPUT -j DROP
  1. 4. 使脚本可执行:
  2.    ```bash
  3.    chmod +x /etc/firewall.rules
复制代码

1. 创建启动脚本以在系统启动时加载防火墙规则:vim /etc/local.d/firewall.start
2. 添加以下内容:#!/bin/sh
/etc/firewall.rules
3. 使脚本可执行:chmod +x /etc/local.d/firewall.start
4. 启用本地服务:rc-update add local default
5. 立即启动防火墙:/etc/firewall.rules

创建启动脚本以在系统启动时加载防火墙规则:
  1. vim /etc/local.d/firewall.start
复制代码

添加以下内容:
  1. #!/bin/sh
  2. /etc/firewall.rules
复制代码

使脚本可执行:
  1. chmod +x /etc/local.d/firewall.start
复制代码

启用本地服务:
  1. rc-update add local default
复制代码

立即启动防火墙:
  1. /etc/firewall.rules
复制代码

存储配置

磁盘分区与格式化

在配置文件服务器之前,我们需要准备存储空间。假设我们有一个新的磁盘/dev/sdb用于存储文件。

1. 查看可用磁盘:fdisk -l
2. 使用fdisk对磁盘进行分区:fdisk /dev/sdb

查看可用磁盘:
  1. fdisk -l
复制代码

使用fdisk对磁盘进行分区:
  1. fdisk /dev/sdb
复制代码

在fdisk命令行中:

• 输入n创建新分区
• 选择分区类型(主分区或扩展分区)
• 设置分区号
• 设置起始扇区(通常使用默认值)
• 设置结束扇区(可以使用+sizeG格式,例如+100G表示100GB)
• 输入w保存更改并退出

1. 格式化分区:mkfs.ext4 /dev/sdb1
  1. mkfs.ext4 /dev/sdb1
复制代码

对于需要更高性能的场景,可以考虑XFS文件系统:
  1. apk add xfsprogs
  2.    mkfs.xfs /dev/sdb1
复制代码

挂载存储

1. 创建挂载点:mkdir -p /srv/storage
2. 挂载分区:mount /dev/sdb1 /srv/storage
3. 配置自动挂载:
编辑/etc/fstab文件:vim /etc/fstab

创建挂载点:
  1. mkdir -p /srv/storage
复制代码

挂载分区:
  1. mount /dev/sdb1 /srv/storage
复制代码

配置自动挂载:
编辑/etc/fstab文件:
  1. vim /etc/fstab
复制代码

添加以下行(根据你的文件系统类型调整):
  1. /dev/sdb1   /srv/storage   ext4   defaults   0   0
复制代码

1. 验证挂载:mount -a
df -h
  1. mount -a
  2. df -h
复制代码

配置RAID(可选)

对于需要更高数据可靠性的场景,可以配置RAID。以下是一个使用RAID1(镜像)的示例:

1. 安装mdadm:apk add mdadm
2. 假设我们有两个磁盘/dev/sdb和/dev/sdc,每个磁盘上都有一个分区/dev/sdb1和/dev/sdc1。
3. 创建RAID1阵列:mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
4. 格式化RAID设备:mkfs.ext4 /dev/md0
5. 挂载RAID设备:mkdir -p /srv/storage
mount /dev/md0 /srv/storage
6. 配置自动挂载:
编辑/etc/fstab文件:vim /etc/fstab

安装mdadm:
  1. apk add mdadm
复制代码

假设我们有两个磁盘/dev/sdb和/dev/sdc,每个磁盘上都有一个分区/dev/sdb1和/dev/sdc1。

创建RAID1阵列:
  1. mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
复制代码

格式化RAID设备:
  1. mkfs.ext4 /dev/md0
复制代码

挂载RAID设备:
  1. mkdir -p /srv/storage
  2. mount /dev/md0 /srv/storage
复制代码

配置自动挂载:
编辑/etc/fstab文件:
  1. vim /etc/fstab
复制代码

添加以下行:
  1. /dev/md0   /srv/storage   ext4   defaults   0   0
复制代码

1. 保存RAID配置:mdadm --detail --scan >> /etc/mdadm/mdadm.conf
  1. mdadm --detail --scan >> /etc/mdadm/mdadm.conf
复制代码

配置LVM(可选)

逻辑卷管理器(LVM)提供了更灵活的存储管理方式。以下是一个基本的LVM配置示例:

1. 安装LVM工具:apk add lvm2
2. 创建物理卷(PV):pvcreate /dev/sdb1
3. 创建卷组(VG):vgcreate vg_storage /dev/sdb1
4. 创建逻辑卷(LV):lvcreate -l 100%FREE -n lv_data vg_storage
5. 格式化逻辑卷:mkfs.ext4 /dev/vg_storage/lv_data
6. 挂载逻辑卷:mkdir -p /srv/storage
mount /dev/vg_storage/lv_data /srv/storage
7. 配置自动挂载:
编辑/etc/fstab文件:vim /etc/fstab

安装LVM工具:
  1. apk add lvm2
复制代码

创建物理卷(PV):
  1. pvcreate /dev/sdb1
复制代码

创建卷组(VG):
  1. vgcreate vg_storage /dev/sdb1
复制代码

创建逻辑卷(LV):
  1. lvcreate -l 100%FREE -n lv_data vg_storage
复制代码

格式化逻辑卷:
  1. mkfs.ext4 /dev/vg_storage/lv_data
复制代码

挂载逻辑卷:
  1. mkdir -p /srv/storage
  2. mount /dev/vg_storage/lv_data /srv/storage
复制代码

配置自动挂载:
编辑/etc/fstab文件:
  1. vim /etc/fstab
复制代码

添加以下行:
  1. /dev/vg_storage/lv_data   /srv/storage   ext4   defaults   0   0
复制代码

文件服务选择与配置

Alpine Linux支持多种文件服务协议,包括Samba(SMB/CIFS)、NFS和FTP等。根据你的需求选择合适的文件服务。

Samba配置

Samba是一个开源软件套件,提供Windows风格的文件和打印服务。它使用SMB/CIFS协议,是跨平台文件共享的理想选择。

1. 安装Samba:apk add samba samba-common-tools
2. 创建Samba配置目录:mkdir -p /etc/samba
3. 创建基本配置文件:vim /etc/samba/smb.conf
4.
  1. 添加以下基本配置:
  2. “`ini
  3. [global]
  4.    workgroup = WORKGROUP
  5.    server string = Alpine File Server
  6.    netbios name = FILESERVER
  7.    security = user
  8.    map to guest = bad user
  9.    dns proxy = no
  10.    log file = /var/log/samba/log.%m
  11.    max log size = 1000
  12.    syslog = 0
  13.    panic action = /usr/share/samba/panic-action %d
  14.    encrypt passwords = true
  15.    passdb backend = tdbsam
  16.    obey pam restrictions = yes
  17.    unix password sync = yes
  18.    passwd program = /usr/bin/passwd %u
  19.    passwd chat =Enter\snew\s\spassword:* %n\nRetype\snew\s\spassword:* %n\npassword\supdated\ssuccessfully.
  20.    pam password change = yes
复制代码

安装Samba:
  1. apk add samba samba-common-tools
复制代码

创建Samba配置目录:
  1. mkdir -p /etc/samba
复制代码

创建基本配置文件:
  1. vim /etc/samba/smb.conf
复制代码

添加以下基本配置:
“`ini
[global]
   workgroup = WORKGROUP
   server string = Alpine File Server
   netbios name = FILESERVER
   security = user
   map to guest = bad user
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat =Enter\snew\s\spassword:* %n\nRetype\snew\s\spassword:* %n\npassword\supdated\ssuccessfully.
   pam password change = yes

[public]
  1. comment = Public Storage
  2.    path = /srv/storage/public
  3.    browsable = yes
  4.    writable = yes
  5.    guest ok = yes
  6.    read only = no
  7.    create mask = 0777
  8.    directory mask = 0777
  9.    force user = nobody
  10.    force group = nogroup
复制代码

[private]
  1. comment = Private Storage
  2.    path = /srv/storage/private
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = @smbusers
  6.    create mask = 0770
  7.    directory mask = 0770
  8.    force group = smbusers
复制代码
  1. 5. 创建共享目录:
  2.    ```bash
  3.    mkdir -p /srv/storage/public
  4.    mkdir -p /srv/storage/private
  5.    chown nobody:nogroup /srv/storage/public
  6.    chown root:smbusers /srv/storage/private
  7.    chmod 777 /srv/storage/public
  8.    chmod 770 /srv/storage/private
复制代码

1. 创建Samba用户组:addgroup smbusers
2. 添加Samba用户:adduser -h /home/user1 -s /bin/false -G smbusers user1
smbpasswd -a user1
3. 启动Samba服务:rc-update add samba default
service samba start
4. 验证Samba配置:testparm

创建Samba用户组:
  1. addgroup smbusers
复制代码

添加Samba用户:
  1. adduser -h /home/user1 -s /bin/false -G smbusers user1
  2. smbpasswd -a user1
复制代码

启动Samba服务:
  1. rc-update add samba default
  2. service samba start
复制代码

验证Samba配置:
  1. testparm
复制代码

NFS配置

网络文件系统(NFS)是一种分布式文件系统协议,允许客户端计算机通过网络访问文件,就像访问本地存储一样。

1. 安装NFS服务器:apk add nfs-utils
2.
  1. 创建NFS导出目录:mkdir -p /srv/storage/nfs
  2. chown nobody:nogroup /srv/storage/nfs
  3. chmod 777 /srv/storage/nfs
复制代码
3. 配置NFS导出:
编辑/etc/exports文件:vim /etc/exports

安装NFS服务器:
  1. apk add nfs-utils
复制代码

创建NFS导出目录:
  1. mkdir -p /srv/storage/nfs
  2. chown nobody:nogroup /srv/storage/nfs
  3. chmod 777 /srv/storage/nfs
复制代码

配置NFS导出:
编辑/etc/exports文件:
  1. vim /etc/exports
复制代码

添加以下内容(根据你的网络环境调整):
  1. /srv/storage/nfs 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
复制代码

这表示将/srv/storage/nfs目录导出到192.168.1.0/24网络,允许读写访问。

1. 启动NFS服务:rc-update add nfs default
service nfs start
2. 导出NFS目录:exportfs -a
3. 验证NFS导出:showmount -e

启动NFS服务:
  1. rc-update add nfs default
  2. service nfs start
复制代码

导出NFS目录:
  1. exportfs -a
复制代码

验证NFS导出:
  1. showmount -e
复制代码

FTP配置

文件传输协议(FTP)是一种用于在客户端和服务器之间传输文件的标准网络协议。

1. 安装FTP服务器(vsftpd):apk add vsftpd
2. 配置vsftpd:
编辑/etc/vsftpd/vsftpd.conf文件:vim /etc/vsftpd/vsftpd.conf

安装FTP服务器(vsftpd):
  1. apk add vsftpd
复制代码

配置vsftpd:
编辑/etc/vsftpd/vsftpd.conf文件:
  1. vim /etc/vsftpd/vsftpd.conf
复制代码

添加以下配置:
  1. listen=YES
  2.    anonymous_enable=NO
  3.    local_enable=YES
  4.    write_enable=YES
  5.    local_umask=022
  6.    dirmessage_enable=YES
  7.    xferlog_enable=YES
  8.    connect_from_port_20=YES
  9.    xferlog_std_format=YES
  10.    chroot_local_user=YES
  11.    allow_writeable_chroot=YES
  12.    pam_service_name=vsftpd
  13.    userlist_enable=YES
  14.    userlist_file=/etc/vsftpd/user_list
  15.    userlist_deny=NO
复制代码

1.
  1. 创建FTP用户目录:mkdir -p /srv/storage/ftp
  2. chown nobody:nogroup /srv/storage/ftp
  3. chmod 755 /srv/storage/ftp
复制代码
2. 创建FTP用户:adduser -h /srv/storage/ftp/user1 -s /bin/false ftpuser1
echo "ftpuser1" | tee -a /etc/vsftpd/user_list
3. 设置FTP用户密码:passwd ftpuser1
4. 启动vsftpd服务:rc-update add vsftpd default
service vsftpd start

创建FTP用户目录:
  1. mkdir -p /srv/storage/ftp
  2. chown nobody:nogroup /srv/storage/ftp
  3. chmod 755 /srv/storage/ftp
复制代码

创建FTP用户:
  1. adduser -h /srv/storage/ftp/user1 -s /bin/false ftpuser1
  2. echo "ftpuser1" | tee -a /etc/vsftpd/user_list
复制代码

设置FTP用户密码:
  1. passwd ftpuser1
复制代码

启动vsftpd服务:
  1. rc-update add vsftpd default
  2. service vsftpd start
复制代码

用户与权限管理

创建用户和组

在文件服务器中,合理的用户和组管理对于安全性和数据组织至关重要。

1. 创建用户:adduser -h /home/user1 -s /bin/bash user1
2. 创建组:addgroup developers
addgroup managers
3. 将用户添加到组:adduser user1 developers
adduser user1 managers
4. 查看用户和组信息:id user1
groups user1

创建用户:
  1. adduser -h /home/user1 -s /bin/bash user1
复制代码

创建组:
  1. addgroup developers
  2. addgroup managers
复制代码

将用户添加到组:
  1. adduser user1 developers
  2. adduser user1 managers
复制代码

查看用户和组信息:
  1. id user1
  2. groups user1
复制代码

设置文件权限

1. 设置目录权限:
“`bash创建项目目录mkdir -p /srv/storage/projects
mkdir -p /srv/storage/projects/project1
mkdir -p /srv/storage/projects/project2

设置目录权限:
“`bash

mkdir -p /srv/storage/projects
mkdir -p /srv/storage/projects/project1
mkdir -p /srv/storage/projects/project2

# 设置组所有权
   chown -R root:developers /srv/storage/projects/project1
   chown -R root:managers /srv/storage/projects/project2

# 设置目录权限
   chmod -R 770 /srv/storage/projects/project1
   chmod -R 770 /srv/storage/projects/project2
  1. 2. 设置SGID位,确保新创建的文件继承目录的组:
  2.    ```bash
  3.    chmod -R g+s /srv/storage/projects/project1
  4.    chmod -R g+s /srv/storage/projects/project2
复制代码

1.
  1. 设置默认ACL(访问控制列表):apk add acl
  2. setfacl -d -m u::rwx,g::rwx,o::--- /srv/storage/projects/project1
  3. setfacl -d -m u::rwx,g::rwx,o::--- /srv/storage/projects/project2
复制代码
  1. apk add acl
  2. setfacl -d -m u::rwx,g::rwx,o::--- /srv/storage/projects/project1
  3. setfacl -d -m u::rwx,g::rwx,o::--- /srv/storage/projects/project2
复制代码

配置磁盘配额

磁盘配额可以限制用户或组可用的磁盘空间量,防止单个用户占用过多空间。

1. 安装配额工具:apk add quota
2. 编辑/etc/fstab文件,为文件系统启用配额:vim /etc/fstab

安装配额工具:
  1. apk add quota
复制代码

编辑/etc/fstab文件,为文件系统启用配额:
  1. vim /etc/fstab
复制代码

修改相关行,添加usrquota和grpquota选项:
  1. /dev/sdb1   /srv/storage   ext4   defaults,usrquota,grpquota   0   0
复制代码

1. 重新挂载文件系统:mount -o remount /srv/storage
2. 创建配额数据库文件:quotacheck -cug /srv/storage
3. 生成初始配额表:quotacheck -avug
4. 启用配额:quotaon -avug
5. 为用户设置配额:# 为user1设置软限制10GB,硬限制12GB
setquota -u user1 10G 12G 0 0 /srv/storage
6. 为组设置配额:# 为developers组设置软限制50GB,硬限制60GB
setquota -g developers 50G 60G 0 0 /srv/storage
7. 查看配额报告:repquota -a

重新挂载文件系统:
  1. mount -o remount /srv/storage
复制代码

创建配额数据库文件:
  1. quotacheck -cug /srv/storage
复制代码

生成初始配额表:
  1. quotacheck -avug
复制代码

启用配额:
  1. quotaon -avug
复制代码

为用户设置配额:
  1. # 为user1设置软限制10GB,硬限制12GB
  2. setquota -u user1 10G 12G 0 0 /srv/storage
复制代码

为组设置配额:
  1. # 为developers组设置软限制50GB,硬限制60GB
  2. setquota -g developers 50G 60G 0 0 /srv/storage
复制代码

查看配额报告:
  1. repquota -a
复制代码

安全配置

配置SSH安全

SSH是远程管理服务器的主要方式,确保其安全性至关重要。

1. 编辑SSH配置文件:vim /etc/ssh/sshd_config
2. 修改以下配置以提高安全性:
“`禁用root登录PermitRootLogin no

编辑SSH配置文件:
  1. vim /etc/ssh/sshd_config
复制代码

修改以下配置以提高安全性:
“`

PermitRootLogin no

# 仅允许特定用户登录
   AllowUsers user1 user2

# 禁用密码认证,仅允许密钥认证(可选)
   PasswordAuthentication no

# 更改默认端口
   Port 2222

# 禁用空密码
   PermitEmptyPasswords no

# 设置最大登录尝试次数
   MaxAuthTries 3

# 设置登录超时时间
   LoginGraceTime 60

# 仅使用SSH协议2
   Protocol 2
  1. 3. 重启SSH服务:
  2.    ```bash
  3.    service sshd restart
复制代码

1. 为用户生成SSH密钥(在客户端计算机上):ssh-keygen -t rsa -b 4096
2. 将公钥复制到服务器:ssh-copy-id -p 2222 user1@fileserver.example.com

为用户生成SSH密钥(在客户端计算机上):
  1. ssh-keygen -t rsa -b 4096
复制代码

将公钥复制到服务器:
  1. ssh-copy-id -p 2222 user1@fileserver.example.com
复制代码

配置Fail2ban

Fail2ban是一个入侵防御软件,可以保护服务器免受暴力破解攻击。

1. 安装Fail2ban:apk add fail2ban
2. 创建配置文件:cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
3. 编辑配置文件:vim /etc/fail2ban/jail.local
4.
  1. 修改以下配置:
  2. “`
  3. [DEFAULT]
  4. bantime = 1h
  5. findtime = 10m
  6. maxretry = 5
复制代码

安装Fail2ban:
  1. apk add fail2ban
复制代码

创建配置文件:
  1. cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
复制代码

编辑配置文件:
  1. vim /etc/fail2ban/jail.local
复制代码

修改以下配置:
“`
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
   enabled = true
   port = 2222
   logpath = /var/log/messages
  1. 5. 启动Fail2ban服务:
  2.    ```bash
  3.    rc-update add fail2ban default
  4.    service fail2ban start
复制代码

配置自动安全更新

定期更新系统是保持服务器安全的重要措施。

1. 安装必要的工具:apk add e2fsprogs-extra
2. 创建自动更新脚本:vim /etc/periodic/daily/security-updates
3. 添加以下内容:
“`bash
#!/bin/sh

安装必要的工具:
  1. apk add e2fsprogs-extra
复制代码

创建自动更新脚本:
  1. vim /etc/periodic/daily/security-updates
复制代码

添加以下内容:
“`bash
#!/bin/sh

# 更新包索引
   apk update > /var/log/apk-update.log 2>&1

# 升级系统
   apk upgrade –available > /var/log/apk-upgrade.log 2>&1

# 清理缓存
   cache_clean
  1. 4. 使脚本可执行:
  2.    ```bash
  3.    chmod +x /etc/periodic/daily/security-updates
复制代码

1. 确保定期任务服务已启用:rc-update add crond default
service crond start
  1. rc-update add crond default
  2. service crond start
复制代码

高级功能

配置RAID

如果之前没有配置RAID,现在可以按照以下步骤配置:

1. 安装mdadm:apk add mdadm
2. 创建RAID1阵列(假设有两个磁盘/dev/sdb和/dev/sdc):mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
3. 格式化RAID设备:mkfs.ext4 /dev/md0
4. 挂载RAID设备:mkdir -p /srv/storage
mount /dev/md0 /srv/storage
5. 配置自动挂载:
编辑/etc/fstab文件:vim /etc/fstab

安装mdadm:
  1. apk add mdadm
复制代码

创建RAID1阵列(假设有两个磁盘/dev/sdb和/dev/sdc):
  1. mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
复制代码

格式化RAID设备:
  1. mkfs.ext4 /dev/md0
复制代码

挂载RAID设备:
  1. mkdir -p /srv/storage
  2. mount /dev/md0 /srv/storage
复制代码

配置自动挂载:
编辑/etc/fstab文件:
  1. vim /etc/fstab
复制代码

添加以下行:
  1. /dev/md0   /srv/storage   ext4   defaults   0   0
复制代码

1. 保存RAID配置:mdadm --detail --scan >> /etc/mdadm/mdadm.conf
  1. mdadm --detail --scan >> /etc/mdadm/mdadm.conf
复制代码

配置LVM快照

LVM快照是创建文件系统时间点映像的有效方法,可用于备份或测试目的。

1. 创建快照:# 创建一个大小为1GB的快照
lvcreate -L 1G -s -n lv_data_snapshot /dev/vg_storage/lv_data
2. 挂载快照:mkdir -p /mnt/snapshot
mount /dev/vg_storage/lv_data_snapshot /mnt/snapshot
3. 使用快照(例如,备份或恢复文件):# 从快照恢复文件
cp /mnt/snapshot/important_file /srv/storage/
4. 卸载并删除快照:umount /mnt/snapshot
lvremove /dev/vg_storage/lv_data_snapshot

创建快照:
  1. # 创建一个大小为1GB的快照
  2. lvcreate -L 1G -s -n lv_data_snapshot /dev/vg_storage/lv_data
复制代码

挂载快照:
  1. mkdir -p /mnt/snapshot
  2. mount /dev/vg_storage/lv_data_snapshot /mnt/snapshot
复制代码

使用快照(例如,备份或恢复文件):
  1. # 从快照恢复文件
  2. cp /mnt/snapshot/important_file /srv/storage/
复制代码

卸载并删除快照:
  1. umount /mnt/snapshot
  2. lvremove /dev/vg_storage/lv_data_snapshot
复制代码

配置自动备份

定期备份是保护数据的重要措施。以下是一个使用rsync进行增量备份的示例。

1. 安装rsync:apk add rsync
2. 创建备份脚本:vim /usr/local/bin/backup.sh
3. 添加以下内容:
“`bash
#!/bin/sh

安装rsync:
  1. apk add rsync
复制代码

创建备份脚本:
  1. vim /usr/local/bin/backup.sh
复制代码

添加以下内容:
“`bash
#!/bin/sh

# 设置变量
   SOURCE_DIR=”/srv/storage”
   BACKUPDIR=“/srv/backups”
   DATE=$(date +%Y%m%d%H%M%S)
   LOG_FILE=“/var/log/backup.log”

# 创建备份目录(如果不存在)
   mkdir -p $BACKUP_DIR

# 记录开始时间
   echo “Backup started at\((date)" >> \)LOG_FILE

# 执行备份
   rsync -a –delete –link-dest=\(BACKUP_DIR/latest \)SOURCE_DIR/\(BACKUP_DIR/\)DATE >> $LOG_FILE 2>&1

# 更新最新备份链接
   rm -f\(BACKUP_DIR/latest
   ln -s \)BACKUP_DIR/\(DATE \)BACKUP_DIR/latest

# 记录结束时间
   echo “Backup completed at\((date)" >> \)LOG_FILE
   echo “————————” >> $LOG_FILE
  1. 4. 使脚本可执行:
  2.    ```bash
  3.    chmod +x /usr/local/bin/backup.sh
复制代码

1. 添加到crontab以定期执行:crontab -e
  1. crontab -e
复制代码

添加以下行以每天凌晨2点执行备份:
  1. 0 2 * * * /usr/local/bin/backup.sh
复制代码

1. 确保crond服务已启用:rc-update add crond default
service crond start
  1. rc-update add crond default
  2. service crond start
复制代码

监控与维护

配置系统监控

监控系统资源使用情况对于维护服务器性能至关重要。

1. 安装监控工具:apk add htop iotop vmstat
2. 使用htop监控系统资源:htop
3. 使用iotop监控磁盘I/O:iotop
4. 使用vmstat监控虚拟内存统计:vmstat 1

安装监控工具:
  1. apk add htop iotop vmstat
复制代码

使用htop监控系统资源:
  1. htop
复制代码

使用iotop监控磁盘I/O:
  1. iotop
复制代码

使用vmstat监控虚拟内存统计:
  1. vmstat 1
复制代码

配置日志管理

1. 安装logrotate:apk add logrotate
2. 创建日志轮转配置:vim /etc/logrotate.d/fileserver
3.
  1. 添加以下内容:
  2. “`
  3. /var/log/samba/log.* {
  4.    weekly
  5.    missingok
  6.    rotate 4
  7.    compress
  8.    delaycompress
  9.    notifempty
  10.    create 640 root adm
  11. }
复制代码

安装logrotate:
  1. apk add logrotate
复制代码

创建日志轮转配置:
  1. vim /etc/logrotate.d/fileserver
复制代码

添加以下内容:
“`
/var/log/samba/log.* {
   weekly
   missingok
   rotate 4
   compress
   delaycompress
   notifempty
   create 640 root adm
}

/var/log/vsftpd.log {
  1. weekly
  2.    missingok
  3.    rotate 4
  4.    compress
  5.    delaycompress
  6.    notifempty
  7.    create 640 root adm
复制代码

}

/var/log/backup.log {
  1. weekly
  2.    missingok
  3.    rotate 4
  4.    compress
  5.    delaycompress
  6.    notifempty
  7.    create 640 root adm
复制代码

}
  1. 4. 测试logrotate配置:
  2.    ```bash
  3.    logrotate -f /etc/logrotate.d/fileserver
复制代码

配置系统更新

1. 创建系统更新脚本:vim /usr/local/bin/system-update.sh
2. 添加以下内容:
“`bash
#!/bin/sh

创建系统更新脚本:
  1. vim /usr/local/bin/system-update.sh
复制代码

添加以下内容:
“`bash
#!/bin/sh

# 记录开始时间
   echo “System update started at $(date)” >> /var/log/system-update.log

# 更新包索引
   apk update >> /var/log/system-update.log 2>&1

# 升级系统
   apk upgrade –available >> /var/log/system-update.log 2>&1

# 清理缓存
   cache_clean >> /var/log/system-update.log 2>&1

# 记录结束时间
   echo “System update completed at $(date)” >> /var/log/system-update.log
   echo “————————” >> /var/log/system-update.log
  1. 3. 使脚本可执行:
  2.    ```bash
  3.    chmod +x /usr/local/bin/system-update.sh
复制代码

1. 添加到crontab以每周执行一次:crontab -e
  1. crontab -e
复制代码

添加以下行以每周日凌晨2点执行系统更新:
  1. 0 2 * * 0 /usr/local/bin/system-update.sh
复制代码

实战案例

企业环境案例

假设我们需要为一家中型企业搭建文件服务器,要求如下:

• 支持多部门文件共享
• 提供用户认证和权限管理
• 支持Windows和Linux客户端访问
• 实现数据冗余和备份
• 提供监控和日志功能

1. 硬件准备:服务器:2U机架式服务器,配备双核CPU,8GB内存,4块1TB SATA硬盘(用于RAID 10)网络:千兆以太网连接
2. 服务器:2U机架式服务器,配备双核CPU,8GB内存,4块1TB SATA硬盘(用于RAID 10)
3. 网络:千兆以太网连接
4. 系统安装:
按照前面的步骤安装Alpine Linux,并配置静态IP地址(例如192.168.1.100)。
5. 存储配置:
“`bash安装mdadm和lvm2apk add mdadm lvm2

硬件准备:

• 服务器:2U机架式服务器,配备双核CPU,8GB内存,4块1TB SATA硬盘(用于RAID 10)
• 网络:千兆以太网连接

系统安装:
按照前面的步骤安装Alpine Linux,并配置静态IP地址(例如192.168.1.100)。

存储配置:
“`bash

apk add mdadm lvm2

# 创建RAID 10阵列
   mdadm –create /dev/md0 –level=10 –raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 创建物理卷
   pvcreate /dev/md0

# 创建卷组
   vgcreate vg_raid /dev/md0

# 创建逻辑卷
   lvcreate -l 100%FREE -n lv_data vg_raid

# 格式化逻辑卷
   mkfs.ext4 /dev/vg_raid/lv_data

# 挂载逻辑卷
   mkdir -p /srv/storage
   mount /dev/vg_raid/lv_data /srv/storage

# 配置自动挂载
   echo “/dev/vg_raid/lv_data   /srv/storage   ext4   defaults   0   0” >> /etc/fstab

# 保存RAID配置
   mdadm –detail –scan >> /etc/mdadm/mdadm.conf
  1. 4. **目录结构创建**:
  2.    ```bash
  3.    # 创建部门目录
  4.    mkdir -p /srv/storage/departments/{hr,finance,engineering,marketing}
  5.    mkdir -p /srv/storage/public
  6.    mkdir -p /srv/storage/backups
  7.    # 创建用户和组
  8.    addgroup hr
  9.    addgroup finance
  10.    addgroup engineering
  11.    addgroup marketing
  12.    # 创建用户并添加到相应组
  13.    adduser -h /home/hr_manager -s /bin/bash -G hr hr_manager
  14.    adduser -h /home/finance_manager -s /bin/bash -G finance finance_manager
  15.    adduser -h /home/engineer1 -s /bin/bash -G engineering engineer1
  16.    adduser -h /home/marketing_manager -s /bin/bash -G marketing marketing_manager
  17.    # 设置目录权限
  18.    chown -R root:hr /srv/storage/departments/hr
  19.    chown -R root:finance /srv/storage/departments/finance
  20.    chown -R root:engineering /srv/storage/departments/engineering
  21.    chown -R root:marketing /srv/storage/departments/marketing
  22.    chown -R root:nogroup /srv/storage/public
  23.    chmod -R 770 /srv/storage/departments/hr
  24.    chmod -R 770 /srv/storage/departments/finance
  25.    chmod -R 770 /srv/storage/departments/engineering
  26.    chmod -R 770 /srv/storage/departments/marketing
  27.    chmod -R 777 /srv/storage/public
  28.    # 设置SGID位
  29.    chmod -R g+s /srv/storage/departments/hr
  30.    chmod -R g+s /srv/storage/departments/finance
  31.    chmod -R g+s /srv/storage/departments/engineering
  32.    chmod -R g+s /srv/storage/departments/marketing
复制代码

1. Samba配置:
“`bash安装Sambaapk add samba samba-common-tools

Samba配置:
“`bash

apk add samba samba-common-tools

# 创建Samba配置
   cat > /etc/samba/smb.conf << EOF
   [global]
  1. workgroup = COMPANY
  2.    server string = Company File Server
  3.    netbios name = FILESERVER
  4.    security = user
  5.    map to guest = bad user
  6.    dns proxy = no
  7.    log file = /var/log/samba/log.%m
  8.    max log size = 1000
  9.    syslog = 0
  10.    panic action = /usr/share/samba/panic-action %d
  11.    encrypt passwords = true
  12.    passdb backend = tdbsam
  13.    obey pam restrictions = yes
  14.    unix password sync = yes
  15.    passwd program = /usr/bin/passwd %u
  16.    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  17.    pam password change = yes
复制代码

[public]
  1. comment = Public Storage
  2.    path = /srv/storage/public
  3.    browsable = yes
  4.    writable = yes
  5.    guest ok = yes
  6.    read only = no
  7.    create mask = 0777
  8.    directory mask = 0777
  9.    force user = nobody
  10.    force group = nogroup
复制代码



  1. comment = HR Department
  2.    path = /srv/storage/departments/hr
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = @hr
  6.    create mask = 0770
  7.    directory mask = 0770
  8.    force group = hr
复制代码

[finance]
  1. comment = Finance Department
  2.    path = /srv/storage/departments/finance
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = @finance
  6.    create mask = 0770
  7.    directory mask = 0770
  8.    force group = finance
复制代码

[engineering]
  1. comment = Engineering Department
  2.    path = /srv/storage/departments/engineering
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = @engineering
  6.    create mask = 0770
  7.    directory mask = 0770
  8.    force group = engineering
复制代码

[marketing]
  1. comment = Marketing Department
  2.    path = /srv/storage/departments/marketing
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = @marketing
  6.    create mask = 0770
  7.    directory mask = 0770
  8.    force group = marketing
复制代码

EOF

# 添加Samba用户
   echo -e “password\npassword” | smbpasswd -a hr_manager
   echo -e “password\npassword” | smbpasswd -a finance_manager
   echo -e “password\npassword” | smbpasswd -a engineer1
   echo -e “password\npassword” | smbpasswd -a marketing_manager

# 启动Samba服务
   rc-update add samba default
   service samba start
  1. 6. **NFS配置**(用于Linux客户端):
  2.    ```bash
  3.    # 安装NFS服务器
  4.    apk add nfs-utils
  5.    # 配置NFS导出
  6.    cat > /etc/exports << EOF
  7.    /srv/storage/departments/hr 192.168.1.0/24(rw,sync,no_subtree_check)
  8.    /srv/storage/departments/finance 192.168.1.0/24(rw,sync,no_subtree_check)
  9.    /srv/storage/departments/engineering 192.168.1.0/24(rw,sync,no_subtree_check)
  10.    /srv/storage/departments/marketing 192.168.1.0/24(rw,sync,no_subtree_check)
  11.    /srv/storage/public 192.168.1.0/24(rw,sync,no_subtree_check)
  12.    EOF
  13.    # 启动NFS服务
  14.    rc-update add nfs default
  15.    service nfs start
  16.    # 导出NFS目录
  17.    exportfs -a
复制代码

1. 备份配置:
“`bash安装rsyncapk add rsync

备份配置:
“`bash

apk add rsync

# 创建备份脚本
   cat > /usr/local/bin/backup.sh << ‘EOF’
   #!/bin/sh

# 设置变量
   SOURCE_DIR=”/srv/storage”
   BACKUPDIR=“/srv/backups”
   DATE=$(date +%Y%m%d%H%M%S)
   LOG_FILE=“/var/log/backup.log”

# 创建备份目录(如果不存在)
   mkdir -p $BACKUP_DIR

# 记录开始时间
   echo “Backup started at\((date)" >> \)LOG_FILE

# 执行备份
   rsync -a –delete –link-dest=\(BACKUP_DIR/latest \)SOURCE_DIR/\(BACKUP_DIR/\)DATE >> $LOG_FILE 2>&1

# 更新最新备份链接
   rm -f\(BACKUP_DIR/latest
   ln -s \)BACKUP_DIR/\(DATE \)BACKUP_DIR/latest

# 记录结束时间
   echo “Backup completed at\((date)" >> \)LOG_FILE
   echo “————————” >> $LOG_FILE
   EOF

# 使脚本可执行
   chmod +x /usr/local/bin/backup.sh

# 添加到crontab以每天凌晨2点执行备份
   echo “0 2 * * * /usr/local/bin/backup.sh” | crontab -

# 确保crond服务已启用
   rc-update add crond default
   service crond start
  1. 8. **监控配置**:
  2.    ```bash
  3.    # 安装监控工具
  4.    apk add htop iotop vmstat
  5.    # 创建系统监控脚本
  6.    cat > /usr/local/bin/system-monitor.sh << 'EOF'
  7.    #!/bin/sh
  8.    # 设置变量
  9.    LOG_FILE="/var/log/system-monitor.log"
  10.    DATE=$(date +"%Y-%m-%d %H:%M:%S")
  11.    # 记录系统状态
  12.    echo "===== System Status at $DATE =====" >> $LOG_FILE
  13.    # 记录磁盘使用情况
  14.    echo "Disk Usage:" >> $LOG_FILE
  15.    df -h >> $LOG_FILE
  16.    # 记录内存使用情况
  17.    echo "Memory Usage:" >> $LOG_FILE
  18.    free -h >> $LOG_FILE
  19.    # 记录CPU使用情况
  20.    echo "CPU Usage:" >> $LOG_FILE
  21.    uptime >> $LOG_FILE
  22.    # 记录进程信息
  23.    echo "Top Processes:" >> $LOG_FILE
  24.    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >> $LOG_FILE
  25.    echo "=============================" >> $LOG_FILE
  26.    echo "" >> $LOG_FILE
  27.    EOF
  28.    # 使脚本可执行
  29.    chmod +x /usr/local/bin/system-monitor.sh
  30.    # 添加到crontab以每小时执行一次
  31.    echo "0 * * * * /usr/local/bin/system-monitor.sh" | crontab -
复制代码

个人环境案例

假设我们需要为家庭用户搭建文件服务器,要求如下:

• 提供家庭媒体存储和共享
• 支持多设备访问(PC、手机、平板等)
• 提供个人文件备份功能
• 简单易用的用户界面
• 低功耗运行

1. 硬件准备:设备:树莓派4B(4GB内存)或类似低功耗设备存储:1TB或2TB外置USB硬盘网络:千兆以太网连接
2. 设备:树莓派4B(4GB内存)或类似低功耗设备
3. 存储:1TB或2TB外置USB硬盘
4. 网络:千兆以太网连接
5. 系统安装:
下载适用于树莓派的Alpine Linux镜像,按照官方指南安装到SD卡。
6. 存储配置:
“`bash识别USB硬盘(假设为/dev/sda)fdisk -l

硬件准备:

• 设备:树莓派4B(4GB内存)或类似低功耗设备
• 存储:1TB或2TB外置USB硬盘
• 网络:千兆以太网连接

系统安装:
下载适用于树莓派的Alpine Linux镜像,按照官方指南安装到SD卡。

存储配置:
“`bash

fdisk -l

# 创建分区(如果需要)
   # fdisk /dev/sda

# 格式化分区(假设为/dev/sda1)
   mkfs.ext4 /dev/sda1

# 创建挂载点
   mkdir -p /srv/storage

# 挂载分区
   mount /dev/sda1 /srv/storage

# 配置自动挂载
   echo “/dev/sda1   /srv/storage   ext4   defaults   0   0” >> /etc/fstab
  1. 4. **目录结构创建**:
  2.    ```bash
  3.    # 创建目录结构
  4.    mkdir -p /srv/storage/{media,documents,backups,public}
  5.    mkdir -p /srv/storage/media/{movies,music,photos}
  6.    mkdir -p /srv/storage/documents/{personal,shared}
  7.    # 创建用户
  8.    adduser -h /home/family -s /bin/bash family
  9.    # 设置目录权限
  10.    chown -R family:family /srv/storage
  11.    chmod -R 755 /srv/storage
  12.    chmod -R 777 /srv/storage/public
复制代码

1. Samba配置:
“`bash安装Sambaapk add samba samba-common-tools

Samba配置:
“`bash

apk add samba samba-common-tools

# 创建Samba配置
   cat > /etc/samba/smb.conf << EOF
   [global]
  1. workgroup = WORKGROUP
  2.    server string = Home File Server
  3.    netbios name = HOMESERVER
  4.    security = user
  5.    map to guest = bad user
  6.    dns proxy = no
  7.    log file = /var/log/samba/log.%m
  8.    max log size = 1000
  9.    syslog = 0
  10.    panic action = /usr/share/samba/panic-action %d
  11.    encrypt passwords = true
  12.    passdb backend = tdbsam
  13.    obey pam restrictions = yes
  14.    unix password sync = yes
  15.    passwd program = /usr/bin/passwd %u
  16.    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  17.    pam password change = yes
复制代码

[public]
  1. comment = Public Storage
  2.    path = /srv/storage/public
  3.    browsable = yes
  4.    writable = yes
  5.    guest ok = yes
  6.    read only = no
  7.    create mask = 0777
  8.    directory mask = 0777
  9.    force user = family
  10.    force group = family
复制代码

[media]
  1. comment = Media Files
  2.    path = /srv/storage/media
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = family
  6.    create mask = 0755
  7.    directory mask = 0755
  8.    force user = family
  9.    force group = family
复制代码

[documents]
  1. comment = Documents
  2.    path = /srv/storage/documents
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = family
  6.    create mask = 0755
  7.    directory mask = 0755
  8.    force user = family
  9.    force group = family
复制代码

[backups]
  1. comment = Backup Storage
  2.    path = /srv/storage/backups
  3.    browsable = yes
  4.    writable = yes
  5.    valid users = family
  6.    create mask = 0755
  7.    directory mask = 0755
  8.    force user = family
  9.    force group = family
复制代码

EOF

# 添加Samba用户
   echo -e “password\npassword” | smbpasswd -a family

# 启动Samba服务
   rc-update add samba default
   service samba start
  1. 6. **配置DLNA媒体服务器**(用于媒体流):
  2.    ```bash
  3.    # 安装minidlna
  4.    apk add minidlna
  5.    # 配置minidlna
  6.    cat > /etc/minidlna.conf << EOF
  7.    media_dir=V,/srv/storage/media/movies
  8.    media_dir=A,/srv/storage/media/music
  9.    media_dir=P,/srv/storage/media/photos
  10.    db_dir=/var/lib/minidlna
  11.    log_dir=/var/log
  12.    port=8200
  13.    inotify=yes
  14.    enable_tivo=no
  15.    strict_dlna=no
  16.    notify_interval=900
  17.    serial=12345678
  18.    model_name=Home Media Server
  19.    friendly_name=Home Media Server
  20.    EOF
  21.    # 创建必要的目录
  22.    mkdir -p /var/lib/minidlna
  23.    # 启动minidlna服务
  24.    rc-update add minidlna default
  25.    service minidlna start
复制代码

1. 配置FTP(用于远程访问):
“`bash安装vsftpdapk add vsftpd

配置FTP(用于远程访问):
“`bash

apk add vsftpd

# 配置vsftpd
   cat > /etc/vsftpd/vsftpd.conf << EOF
   listen=YES
   anonymous_enable=NO
   local_enable=YES
   write_enable=YES
   local_umask=022
   dirmessage_enable=YES
   xferlog_enable=YES
   connect_from_port_20=YES
   xferlog_std_format=YES
   chroot_local_user=YES
   allow_writeable_chroot=YES
   pam_service_name=vsftpd
   userlist_enable=YES
   userlist_file=/etc/vsftpd/user_list
   userlist_deny=NO
   pasv_min_port=40000
   pasv_max_port=50000
   EOF

# 创建用户列表
   echo “family” > /etc/vsftpd/user_list

# 启动vsftpd服务
   rc-update add vsftpd default
   service vsftpd start
  1. 8. **配置自动备份**:
  2.    ```bash
  3.    # 安装rsync
  4.    apk add rsync
  5.    # 创建备份脚本
  6.    cat > /usr/local/bin/backup.sh << 'EOF'
  7.    #!/bin/sh
  8.    # 设置变量
  9.    SOURCE_DIR="/home/family"
  10.    BACKUP_DIR="/srv/storage/backups"
  11.    DATE=$(date +%Y%m%d_%H%M%S)
  12.    LOG_FILE="/var/log/backup.log"
  13.    # 创建备份目录(如果不存在)
  14.    mkdir -p $BACKUP_DIR
  15.    # 记录开始时间
  16.    echo "Backup started at $(date)" >> $LOG_FILE
  17.    # 执行备份
  18.    rsync -a --delete --link-dest=$BACKUP_DIR/latest $SOURCE_DIR/ $BACKUP_DIR/$DATE >> $LOG_FILE 2>&1
  19.    # 更新最新备份链接
  20.    rm -f $BACKUP_DIR/latest
  21.    ln -s $BACKUP_DIR/$DATE $BACKUP_DIR/latest
  22.    # 记录结束时间
  23.    echo "Backup completed at $(date)" >> $LOG_FILE
  24.    echo "------------------------" >> $LOG_FILE
  25.    EOF
  26.    # 使脚本可执行
  27.    chmod +x /usr/local/bin/backup.sh
  28.    # 添加到crontab以每天凌晨2点执行备份
  29.    echo "0 2 * * * /usr/local/bin/backup.sh" | crontab -
  30.    # 确保crond服务已启用
  31.    rc-update add crond default
  32.    service crond start
复制代码

1. 配置Web界面(可选,用于简化管理):
“`bash安装Nginx和PHPapk add nginx php7 php7-fpm php7-session php7-json

配置Web界面(可选,用于简化管理):
“`bash

apk add nginx php7 php7-fpm php7-session php7-json

# 配置Nginx
   cat > /etc/nginx/nginx.conf << EOF
   user nginx;
   worker_processes auto;
   error_log /var/log/nginx/error.log;
   pid /var/run/nginx.pid;

events {
  1. worker_connections 1024;
复制代码

}

http {
  1. include /etc/nginx/mime.types;
  2.    default_type application/octet-stream;
  3.    sendfile on;
  4.    keepalive_timeout 65;
  5.    server {
  6.        listen 80;
  7.        server_name localhost;
  8.        root /var/www/html;
  9.        index index.php index.html index.htm;
  10.        location / {
  11.            try_files $uri $uri/ =404;
  12.        }
  13.        location ~ \.php$ {
  14.            fastcgi_pass unix:/var/run/php/php7-fpm.sock;
  15.            fastcgi_index index.php;
  16.            include fastcgi_params;
  17.            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  18.        }
  19.    }
复制代码

}
   EOF

# 配置PHP-FPM
   cat > /etc/php7/php-fpm.conf << EOF
   [global]
   pid = /var/run/php/php7-fpm.pid
   error_log = /var/log/php/php7-fpm.log

[www]
   user = nginx
   group = nginx
   listen = /var/run/php/php7-fpm.sock
   listen.owner = nginx
   listen.group = nginx
   pm = dynamic
   pm.max_children = 5
   pm.start_servers = 2
   pm.min_spare_servers = 1
   pm.max_spare_servers = 3
   EOF

# 创建Web根目录
   mkdir -p /var/www/html

# 创建简单的文件管理界面
   cat > /var/www/html/index.php << ‘EOF’
   <!DOCTYPE html>
  1. <title>Home File Server</title>
  2.    <style>
  3.        body { font-family: Arial, sans-serif; margin: 20px; }
  4.        table { border-collapse: collapse; width: 100%; }
  5.        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
  6.        th { background-color: #f2f2f2; }
  7.        tr:nth-child(even) { background-color: #f9f9f9; }
  8.        a { text-decoration: none; }
  9.        a:hover { text-decoration: underline; }
  10.    </style>
复制代码
  1. <h1>Home File Server</h1>
  2.    <p>Welcome to your home file server. You can access your files using the links below:</p>
  3.    <ul>
  4.        <li><a href="/media">Media Files</a></li>
  5.        <li><a href="/documents">Documents</a></li>
  6.        <li><a href="/public">Public Files</a></li>
  7.        <li><a href="/backups">Backups</a></li>
  8.    </ul>
  9.    <h2>File Browser</h2>
  10.    <?php
  11.    $dir = isset($_GET['dir']) ? $_GET['dir'] : '/srv/storage';
  12.    $dir = realpath($dir);
  13.    if (strpos($dir, '/srv/storage') !== 0) {
  14.        $dir = '/srv/storage';
  15.    }
  16.    echo '<p>Current directory: ' . htmlspecialchars($dir) . '</p>';
  17.    echo '<table>';
  18.    echo '<tr><th>Name</th><th>Size</th><th>Type</th><th>Modified</th></tr>';
  19.    if ($dir != '/srv/storage') {
  20.        $parent = dirname($dir);
  21.        echo '<tr><td><a href="?dir=' . urlencode($parent) . '">..</a></td><td>-</td><td>Parent Directory</td><td>-</td></tr>';
  22.    }
  23.    if (is_dir($dir)) {
  24.        if ($dh = opendir($dir)) {
  25.            while (($file = readdir($dh)) !== false) {
  26.                if ($file != '.' && $file != '..') {
  27.                    $fullpath = $dir . '/' . $file;
  28.                    $type = filetype($fullpath);
  29.                    $size = is_file($fullpath) ? filesize($fullpath) : '-';
  30.                    $modified = date('Y-m-d H:i:s', filemtime($fullpath));
  31.                    if ($type == 'dir') {
  32.                        $name = '<a href="?dir=' . urlencode($fullpath) . '">' . htmlspecialchars($file) . '</a>';
  33.                    } else {
  34.                        $name = htmlspecialchars($file);
  35.                    }
  36.                    echo '<tr><td>' . $name . '</td><td>' . $size . '</td><td>' . $type . '</td><td>' . $modified . '</td></tr>';
  37.                }
  38.            }
  39.            closedir($dh);
  40.        }
  41.    }
  42.    echo '</table>';
  43.    ?>
复制代码
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

手机版|联系我们|小黑屋|TG频道|RSS |网站地图

Powered by Pixtech

© 2025-2026 Pixtech Team.

>