一、查看系统基本信息
创建一个快速查看脚本 system_info.sh:
bash
#!/bin/bash
echo "===== 系统版本 ====="
cat /etc/centos-release
echo ""
echo "===== 内核版本 ====="
uname -r
echo ""
echo "===== CPU信息 ====="
lscpu | grep -E "Model name|Socket|Core|CPU\(s\)"
echo ""
echo "===== 内存信息 ====="
free -h
echo ""
echo "===== 磁盘信息 ====="
df -h --total
echo ""
echo "===== 网络信息 ====="
ip addr show | grep -E "inet |ether" | grep -v "127.0.0.1"
echo ""
echo "===== 系统运行时间 ====="
uptime
二、创建admin用户
服务器绝对不建议直接使用 root 账号登录。主要原因包括:
-
安全风险:一旦被攻击,攻击者获得完全控制权
-
误操作风险:root 权限下任何操作都可能造成灾难性后果
-
审计困难:多人使用 root 无法追踪具体操作者
-
最小权限原则:按需分配权限,不滥用最高权限
推荐做法:创建拥有 sudo 权限的用户(替代 root)
1、创建 admin 用户
bash
# 1. 创建新用户(以 admin 为例)
useradd admin
# 2. 设置用户密码
passwd admin
# 输入并确认密码
2、将admin 赋予 root权限
bash
#手动
visudo
admin ALL=(ALL) NOPASSWD: ALL
#或者创建一个新文件
sudo visudo -f /etc/sudoers.d/admin-user
# 添加以下内容(按需调整)
#需要密码:
admin ALL=(ALL) ALL
#不需要密码
admin ALL=(ALL) NOPASSWD: ALL
单行命令:
echo "admin ALL=(ALL) ALL" | sudo tee /etc/sudoers.d/admin-user
检查 sudo 权限:
# 切换到新用户
su - admin
# 测试 sudo 权限
sudo whoami # 应该显示 root
sudo ls /root # 测试能否访问 root 目录
# 查看可用的 sudo 命令
sudo -l
三、禁用 root 远程 SSH 登录
bash
# 1. 编辑 SSH 配置
vim /etc/ssh/sshd_config
# 2. 找到并修改以下行:
PermitRootLogin no # 禁止 root 直接登录
PasswordAuthentication no # 推荐:禁用密码登录,使用密钥
AllowUsers admin # 可选:只允许特定用户登录
# 3. 重启 SSH 服务
systemctl restart sshd
# 4. 重要:测试新用户连接正常后再退出当前 root 会话
# 新开终端用 admin 用户登录测试
#直接命令修改:
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
四、切换/使用root
# 当前是 admin 用户
sudo su - # 输入 admin 密码,切换到 root
sudo su和sudo su -不完全一样,它们有一些重要的区别。主要体现在环境变量的加载和当前目录的变化上. sudo su目录不变且不会加载环境变量。sudo su - 会,等价于sudo -i
记忆技巧su = Switch User(切换用户)
用于改变身份
类似:"我要变成另一个人"
sudo = SuperUser DO(超级用户执行)
用于临时借用权限
类似:"借你的权限用一下"
简单判断:
如果你需要在多个命令中都使用 root 权限 → 考虑 su -
如果只是偶尔需要执行特权命令 → 使用 sudo
更推荐的安全做法:
bash
# 1. 只为需要 root 权限的单个命令使用 sudo
sudo systemctl restart nginx
sudo cat /var/log/secure
典型的服务器管理流程:
# 1. 以普通用户登录(如admin) ssh admin@server # 2. 检查系统(不需要root) df -h # 3. 安装软件(需要root) sudo yum install nginx # 4. 配置Nginx(需要root) sudo vi /etc/nginx/nginx.conf # 5. 复杂的多步操作(需要root shell) sudo -i # 进入root环境 cd /etc/nginx/sites-available cp default.conf myapp.conf vi myapp.conf systemctl reload nginx # 立即退出 exit # 回到普通用户继续工作
五、软件安装
在CentOS中,无论是使用admin账户还是root账户安装软件,实际上最终都需要root权限才能安装。但是,从安全性和审计的角度来看,推荐使用具有sudo权限的普通用户(如admin)来安装软件,而不是直接使用root账户。
推荐做法:使用admin账户通过sudo安装
为什么不推荐直接使用root账户安装?
-
安全风险:如果直接使用root账户,一旦被攻击,攻击者将获得完全的控制权。
-
操作风险:root账户没有操作确认,任何命令都会立即执行,可能导致误操作。
-
审计困难:如果多人共享root账户,无法追踪具体是谁执行了操作。
为什么 admin + sudo 更好?
| 方面 | admin + sudo | root 账户 | 说明 |
|---|---|---|---|
| 安全性 | ✅ 高 | ❌ 低 | sudo 需要再次验证身份 |
| 审计跟踪 | ✅ 可追踪 | ❌ 难追踪 | sudo 记录谁、何时、执行了什么 |
| 操作确认 | ✅ 有提醒 | ❌ 无提醒 | 输入密码步骤减少误操作 |
| 权限范围 | ✅ 可控 | ❌ 无限制 | sudo 可配置限制命令 |
| 环境隔离 | ✅ 好 | ❌ 差 | 保持用户环境,避免路径问题 |
| 误操作风险 | ✅ 低 | ❌ 高 | 每个特权命令都需要明确授权 |
步骤:
-
使用admin账户登录。
-
通过sudo执行安装命令。
例如:
bash
# 1. 以 admin 用户登录服务器
ssh admin@服务器IP
# 2. 更新系统包列表
sudo yum update
# 3. 安装 EPEL 仓库(如果需要)
sudo yum install epel-release
# 4. 安装 nginx
sudo yum install nginx
# 5. 启动 nginx
sudo systemctl start nginx
# 6. 设置开机自启
sudo systemctl enable nginx
# 7. 检查状态
sudo systemctl status nginx
优点:
-
审计跟踪:通过sudo执行的命令会被记录在系统日志中(通常是/var/log/secure),可以追踪谁在什么时间执行了安装操作。
-
最小权限原则:admin用户只有在需要时才临时获取root权限,而不是一直拥有root权限。
-
减少误操作:在执行安装命令前,sudo会要求输入密码,这给了用户一个确认的机会。
注意事项:
- 确保admin用户在sudoers文件中配置了安装软件所需的权限。通常,我们给admin用户完整的sudo权限(通过wheel组或直接配置),这样admin用户就可以执行任何root命令,包括安装软件。
查看审计日志(sudo 的优势)
bash
# 查看谁安装了 nginx,什么时间
sudo grep "nginx.*install" /var/log/secure
# 或
sudo journalctl _COMM=sudo | grep nginx
创建安装脚本
bash
# 创建 /usr/local/bin/install-nginx.sh
#!/bin/bash
set -e # 遇到错误立即停止
echo "更新系统..."
sudo yum update -y
echo "安装EPEL仓库..."
sudo yum install epel-release -y
echo "安装nginx..."
sudo yum install nginx -y
echo "配置防火墙..."
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
echo "启动服务..."
sudo systemctl enable --now nginx
echo "验证安装..."
sudo nginx -t
sudo systemctl status nginx
# 给予执行权限
sudo chmod +x /usr/local/bin/install-nginx.sh
sudo chown admin:admin /usr/local/bin/install-nginx.sh
六、密钥登录
root密码登录 vs 密钥登录的全面对比
这两种登录方式在安全性、便利性、管理方式上有本质区别:
一、核心区别总结
| 特性 | 密码登录 | 密钥登录 |
|---|---|---|
| 认证方式 | 记忆的密码字符串 | 非对称加密密钥对 |
| 安全级别 | 低-中等(依赖密码强度) | 极高(几乎不可破解) |
| 防暴力破解 | 弱(可能被猜中) | 强(无法通过猜测登录) |
| 传输安全 | 密码可能被嗅探 | 密钥本身不传输 |
| 方便性 | 需要记忆和输入 | 一次配置,永久使用 |
| 自动化脚本 | 需处理密码(不安全) | 可无缝集成 |
| 多服务器管理 | 每台不同密码 | 同一私钥管理所有服务器 |
密钥登录配置
bash
# 1. 客户端生成密钥对
ssh-keygen -t ed25519 -C "root@server" # 或使用 RSA
# 默认保存到 ~/.ssh/id_ed25519(私钥)和 id_ed25519.pub(公钥)
# 2. 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@server_ip
# 3. 客户端连接(无需密码)
ssh -i ~/.ssh/id_ed25519 root@server_ip
# 4. 或配置 SSH 客户端简化
# 编辑 ~/.ssh/config
Host myserver
HostName server_ip
User root
IdentityFile ~/.ssh/id_ed25519
# 然后只需:ssh myserver
为什么云服务器必须使用密钥登录?
-
公网暴露:云服务器直接暴露在公网,是黑客的重点目标
-
自动化攻击:黑客使用僵尸网络24小时扫描全网,尝试root密码登录
-
腾讯云统计 :未配置密钥的服务器,平均每天遭受 3000+ 次 暴力破解尝试
使用密钥登录过程(以腾讯云为例)必须做的5件事:
-
✅ 在控制台创建并下载密钥对
-
✅ 绑定密钥到服务器并重启
-
✅ 本地设置私钥权限为600
-
✅ 测试连接是否成功
-
✅ 配置SSH Config简化连接
具体步骤如下:
一、腾讯云控制台配置密钥
步骤1:创建密钥对
-
登录腾讯云控制台 :https://console.cloud.tencent.com/
-
进入 云服务器 CVM → 左侧导航栏选择 SSH 密钥
-
点击 创建密钥
-
选择创建方式:
-
创建新密钥对(推荐,腾讯云自动生成公私钥)
-
使用已有公钥(已有密钥时使用)
-
步骤2:下载并保存私钥
-
如果选择"创建新密钥对":
-
输入密钥名称,如:
my-tencent-server -
点击"创建"
-
立即下载私钥(重要!只有一次下载机会)
-
私钥文件格式:
.pem(如:my-tencent-server.pem)
-
步骤3:绑定密钥到云服务器
-
在密钥列表中找到刚创建的密钥
-
点击 绑定实例
-
选择要绑定的云服务器
-
确认绑定
-
重启服务器使配置生效(可以选择"强制关机"重启)
二、本地连接配置
方式1:直接使用私钥连接
bash
# 1. 将私钥文件放到安全位置
mv ~/Downloads/my-tencent-server.pem ~/.ssh/
cd ~/.ssh
# 2. 设置严格的权限(必须!)
chmod 600 my-tencent-server.pem
# 3. 连接到服务器(CentOS默认用户是root)
ssh -i ~/.ssh/my-tencent-server.pem root@你的服务器公网IP
# 如果修改了SSH端口
ssh -i ~/.ssh/my-tencent-server.pem -p 22222 root@你的服务器公网IP
方式2:配置SSH Config文件(推荐)
bash
# 编辑SSH配置文件
vim ~/.ssh/config
# 添加以下内容:
Host tencent # 自定义别名
HostName 你的服务器公网IP
User root # 腾讯云CentOS默认用户
Port 22 # 默认SSH端口,如果修改了要相应更改
IdentityFile ~/.ssh/my-tencent-server.pem
ServerAliveInterval 30 # 每30秒发送一次心跳
ServerAliveCountMax 3 # 最多3次无响应断开
Host tencent-web # 可以配置多个主机
HostName 另一台服务器IP
User root
IdentityFile ~/.ssh/my-tencent-server.pem
# 设置配置文件权限
chmod 600 ~/.ssh/config
# 现在可以这样连接
ssh tencent
连接问题排查
如果连接失败,按顺序检查:
1. 检查私钥权限(必须是600)
ls -la ~/.ssh/你的密钥.pem
应该显示:-rw------- 1 user user
2. 检查服务器是否重启
腾讯云绑定密钥后需要重启服务器生效
3. 检查安全组配置
腾讯云控制台 → 安全组 → 查看22端口是否开放
4. 详细调试信息
ssh -v -i ~/.ssh/你的密钥.pem root@服务器IP
5. 使用-vvv获取更详细日志
ssh -vvv -i ~/.ssh/你的密钥.pem root@服务器IP
紧急情况:
如果密钥登录失败,可以使用腾讯云控制台的 VNC登录 功能:
-
控制台 → 云服务器 → 点击"登录"
-
使用VNC终端
-
输入创建服务器时设置的root密码
-
检查并修复SSH配置
记住 :密钥登录不是可选项,而是腾讯云服务器安全的必选项。配置完成后,应立即禁用密码登录,大大提升服务器安全性。