一、查看系统基本信息
创建一个快速查看脚本 system_info.sh:
#!/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)
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具
su = Switch User(切换用户)
用于改变身份
类似:"我要变成另一个人"
sudo = SuperUser DO(超级用户执行)
用于临时借用权限
类似:"借你的权限用一下"
1、创建 test_admin 用户
# 1. 创建新用户(以 test_admin 为例)
useradd test_admin
# 2. 设置用户密码
passwd test_admin
# 输入并确认密码
2、将 test_admin 赋予 root权限
#手动
visudo
#在最后添加添加一行
# 添加以下内容(按需调整)
#需要密码:
test_admin ALL=(ALL) ALL
#不需要密码 (懒人较爱)
test_admin ALL=(ALL) NOPASSWD: ALL
检查 sudo 权限:
# 切换到新用户 su - test_admin # 测试 sudo 权限 sudo whoami # 应该显示 root sudo ls /root # 测试能否访问 root 目录 # 查看可用的 sudo 命令 sudo -l
三、限制远程SSH登录
查看失败的登录尝试
grep "Failed password for" /var/log/secure
可以看到一直都有乱起八糟的 ip 在尝试连接你的服务器。且 root 、 admin 这两个用户是被尝试得最多的。毕竟经典账密 admin 123456 可不是盖的。

所以最好对SSH登录进行一定限制。如限制 root 远程登录与设置仅允许特定用户登录。
禁用 root 远程 SSH 登录
# 1. 编辑 SSH 配置
vim /etc/ssh/sshd_config
# 2. 找到并修改以下行:
PermitRootLogin no # 禁止 root 直接登录
AllowUsers test_admin my_admin # 可选:只允许特定用户登录
# 3. 重启 SSH 服务
systemctl restart sshd
# 4. 重要:测试新用户连接正常后再退出当前 root 会话
# 新开终端用 admin 用户登录测试
# 查看成功的登录
sudo grep "Accepted password for" /var/log/secure
四、切换/使用root
当前是 admin 用户,切到 root用户: sudo su - # 输入 admin 密码,切换到 root
sudo su和sudo su -不完全一样,它们有一些重要的区别。主要体现在环境变量的加载和当前目录的变化上. sudo su目录不变且不会加载环境变量。sudo su - 会,等价于sudo -i简单判断:
如果只是偶尔需要执行特权命令 → 使用 sudo
如果你需要在多个命令中都使用 root 权限 → sudo -i
更推荐的安全做法:
# 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执行安装命令。
例如:
# 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 的优势)
# 查看谁安装了 nginx,什么时间
sudo grep "nginx.*install" /var/log/secure
# 或
sudo journalctl _COMM=sudo | grep nginx
创建安装脚本
# 创建 /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 密钥登录的全面对比
这两种登录方式在安全性、便利性、管理方式上有本质区别:
一、核心区别总结
| 特性 | 密码登录 | 密钥登录 |
|---|---|---|
| 认证方式 | 记忆的密码字符串 | 非对称加密密钥对 |
| 安全级别 | 低-中等(依赖密码强度) | 极高(几乎不可破解) |
| 防暴力破解 | 弱(可能被猜中) | 强(无法通过猜测登录) |
| 传输安全 | 密码可能被嗅探 | 密钥本身不传输 |
| 方便性 | 需要记忆和输入 | 一次配置,永久使用 |
| 自动化脚本 | 需处理密码(不安全) | 可无缝集成 |
| 多服务器管理 | 每台不同密码 | 同一私钥管理所有服务器 |
建议使用SSH密钥对登录Linux云服务器,此方式通过加密的密钥文件进行身份验证,比密码更安全,还能实现免密登录。
具体使用SSH密钥方式有两种:本地自生成密钥对、 使用腾讯云控制台密钥对。本地自生成方式相对麻烦一点,需要手动生成公私钥并上传公钥到服务器。使用腾讯云控制台密钥对相对简单些,但是可能会导致机器重启。
6.1 本地自生成密钥对(推荐)
6.1.1 在每位需要登录的成员的本地电脑上生成专属密钥对,如用户A执行:
ssh-keygen -t rsa -b 2048 -f ~/.ssh/user_a_id_rsa -C "email_of_userA"
# 生成 user_a_id_rsa(私钥,自己保管) 和 user_a_id_rsa.pub(公钥,交给你)
6.1.2 将对应公钥上传到服务器 ~/.ssh 目录
# 1. 登录服务器(使用你最初的管理密钥)
ssh -i admin.pem ubuntu@server_ip
# 2. 切换到需要授权用户的home目录(例如,大家共用ubuntu用户,或各自独立的账户)
cd ~
# 3. 确保.ssh目录和授权文件存在
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 4. 将成员的公钥内容追加到授权文件末尾
echo "这里粘贴user_a的公钥内容" >> ~/.ssh/authorized_keys
echo "这里粘贴user_b的公钥内容" >> ~/.ssh/authorized_keys
6.2 腾讯云控制台密钥对
核心步骤如下:
-
创建SSH密钥对:登录腾讯云控制台,进入云服务器 > SSH密钥页面,选择地域后点击“创建密钥”。建议选择“创建新密钥对”,设置名称后腾讯云会生成密钥对并自动下载私钥(
.pem文件),请务必妥善保管,不同的人可以创建不同的密钥对。 -
绑定密钥对到服务器:在密钥列表中,找到目标密钥,点击“绑定实例”。选择关机状态的同地域Linux服务器进行绑定。绑定过程可能导致服务器重启,建议在业务低峰期操作。
-
使用私钥连接服务器:本地使用SSH命令连接时,通过
-i参数指定私钥文件路径。ssh -i /本地路径/您的密钥名.pem ubuntu@服务器公网IP
安全加固建议:为了提高安全性,绑定密钥后,可以修改服务器SSH配置,禁止密码登录。编辑/etc/ssh/sshd_config文件,找到PasswordAuthentication并将其值改为no,然后重启SSH服务(如sudo systemctl restart sshd)。
这样子配置了密钥登陆并关闭密码登录后,其它非法用户基本就不可能再登录到你的服务器了。


被折叠的 条评论
为什么被折叠?



