配置Linux服务器是运维和开发中的核心任务,涉及系统安装、基础配置、安全加固、服务部署及监控维护等多个环节,合理的配置能确保服务器稳定、安全、高效运行,本文将详细说明关键步骤及注意事项。
系统安装与初始准备
选择合适的Linux发行版是首要任务,常见选择包括Ubuntu Server(适合新手,社区支持丰富)、CentOS Stream(企业级,稳定可靠)及Debian(严格的开源标准),安装时需注意分区规划:建议/boot分区(500MB,存放引导文件)、/分区(剩余空间的70%-80%,根目录)、swap分区(内存的1-2倍,用于虚拟内存,若内存≥8GB可适当减小),/home分区(可选,存放用户数据,便于系统重装时保留数据)。
安装完成后,通过ip a
查看服务器IP地址,使用SSH客户端(如PuTTY、Xshell)远程连接,初始建议使用普通用户登录,再通过sudo
提升权限,避免直接使用root账户,执行sudo apt update && sudo apt upgrade
(Ubuntu/Debian)或sudo yum update
(CentOS)更新系统软件包,确保基础环境安全。
基础系统配置
用户与权限管理
创建管理员用户(如admin
):sudo adduser admin
,并将其加入sudo组:sudo usermod -aG sudo admin
,为增强安全性,禁用root远程登录:编辑/etc/ssh/sshd_config
文件,将PermitRootLogin yes
改为no
,保存后执行sudo systemctl restart sshd
重启SSH服务。
网络与时区配置
配置静态IP(以Ubuntu为例):编辑/etc/netplan/01-netcfg.yaml
,添加以下内容:
network: version: 2 ethernets: ens33: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]
执行sudo netplan apply
使配置生效,时区设置为Asia/Shanghai:sudo timedatectl set-timezone Asia/Shanghai
,并启用NTP同步时间:sudo timedatectl set-ntp true
。
系统资源限制
调整文件描述符限制:编辑/etc/security/limits.conf
,添加:
* soft nofile 65535
* hard nofile 65535
避免因文件描述符耗尽导致服务异常。
安全加固
防火墙配置
使用firewalld(CentOS/Ubuntu)或ufw(Ubuntu)管理端口,以CentOS为例:
- 开启防火墙:
sudo systemctl start firewalld
- 开放必要端口(如SSH 22、HTTP 80、HTTPS 443):
sudo firewall-cmd --permanent --add-service=ssh
、sudo firewall-cmd --permanent --add-service=http
- 重新加载规则:
sudo firewall-cmd --reload
SSH安全增强
修改SSH默认端口(如改为2222):编辑/etc/ssh/sshd_config
,设置Port 2222
,并禁用密码登录,仅允许密钥认证:
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
将本地公钥(~/.ssh/id_rsa.pub
)上传至服务器用户目录的.ssh/authorized_keys
文件中,重启SSH服务。
入侵检测与日志管理
安装fail2ban防暴力破解:sudo apt install fail2ban
(Ubuntu),配置/etc/fail2ban/jail.local
,设置SSH监禁规则:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
启用日志轮转:编辑/etc/logrotate.conf
,确保系统日志定期清理,避免磁盘占满。
核心服务部署
根据业务需求部署Web、数据库等服务,以下以Nginx和MySQL为例:
Web服务器(Nginx)
安装Nginx:sudo apt install nginx
(Ubuntu),启动服务并开机自启:sudo systemctl enable --now nginx
,配置虚拟主机:编辑/etc/nginx/sites-available/example.com
,添加:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
}
创建软链接启用站点:sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
,测试配置并重启:sudo nginx -t && sudo systemctl restart nginx
。
数据库(MySQL)
安装MySQL:sudo apt install mysql-server
,安全初始化:sudo mysql_secure_installation
,设置root密码、移除匿名用户、禁止root远程登录,创建数据库和用户:
mysql -u root -p CREATE DATABASE mydb; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; FLUSH PRIVILEGES;
服务部署对比
服务类型 | 常用软件 | 安装命令(Ubuntu) | 配置文件位置 | 适用场景 |
---|---|---|---|---|
Web服务器 | Nginx | apt install nginx |
/etc/nginx/nginx.conf |
静态资源、反向代理 |
Web服务器 | Apache | apt install apache2 |
/etc/apache2/apache2.conf |
动态页面、模块化扩展 |
数据库 | MySQL | apt install mysql-server |
/etc/mysql/mysql.conf.d/mysqld.cnf |
关系型数据存储 |
数据库 | PostgreSQL | apt install postgresql |
/etc/postgresql/14/main/postgresql.conf |
复杂查询、事务处理 |
监控与维护
监控工具
部署Prometheus+Grafana:安装Prometheus采集服务器指标(CPU、内存、磁盘IO),通过Grafana可视化展示,或使用轻量级工具htop
(实时进程监控)、df -h
(磁盘使用)、free -h
(内存占用)。
备份策略
定期备份数据库和重要配置:使用mysqldump
备份数据库:mysqldump -u root -p mydb > backup.sql
,通过rsync
同步文件到远程服务器:rsync -avz /var/www/ user@remote:/backup/www/
,配合crontab
设置定时任务(如每天凌晨2点执行备份)。
优化建议
- 内核参数调整:编辑
/etc/sysctl.conf
,优化网络栈(如net.core.somaxconn=65535
提升并发连接数)。 - 文件系统选择:XFS适合大文件存储,ext4兼容性更好,根据业务场景选择。
- 资源隔离:使用Docker容器部署服务,避免应用间相互影响。
FAQs
Q1:忘记Linux服务器root密码如何重置?
A1:
- 重启服务器,进入GRUB引导菜单,选择“Advanced options for Linux”,按
e
编辑内核参数。 - 找到
linux
或linuxefi
行,在末尾添加rd.break
,按Ctrl+X
启动。 - 系统进入紧急模式,执行
mount -o remount,rw /sysroot
重新挂载根目录。 - 执行
chroot /sysroot
切换到根环境,使用passwd
修改root密码。 - 输入
exit
,执行reboot
重启服务器,新密码生效。
Q2:如何排查服务器高负载问题?
A2:
- 使用
top
或htop
查看占用资源最高的进程,记录PID。 - 执行
iostat -x 1
检查磁盘IO是否繁忙(%util接近100%表示磁盘瓶颈)。 - 运行
free -h
查看内存使用,若swap占用高,说明内存不足。 - 使用
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
检查网络连接状态,如大量TIME_WAIT连接可能导致端口耗尽。 - 定位异常进程后,根据业务需求终止进程(
kill -9 PID
)或优化应用配置。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22492.html