环境准备
(安装)Debian 10 系统,我是以腾讯云服务器的 Debian 10.2 系统镜像重装的系统,其他云服务器或者物理机安装系统可能不同,内置的软件也可能不同,故此处步骤省略。
挂载数据盘
安装系统后,除了系统盘,debian默认是没有挂载其他硬盘的,我们需要先挂载其他硬盘作为数据盘。
查看磁盘
# 查看新磁盘是否已连接
fdisk -l
图中可见,系统识别出 /dev/vda
和 /dev/vdb
两个磁盘,盘符分别是 /dev/vda1
和 /dev/vdb1
。
# 查看现有磁盘信息,是否已挂载
df -h
可以看到,系统只挂载了 /dev/vda1
一个磁盘作为系统盘,挂载路径为 /
。
格式化磁盘
然后我们需要格式化 /dev/vdb1
以便挂载。
注意,格式化要慎重,会清空原来的数据!
# 格式化为ext4。慎重!慎重!慎重!
mkfs -t ext4 /dev/vdb1
# 格式化时会询问是否继续,输入y继续
y
挂载
先创建挂载点,即挂载路径,再进行挂载,还需要设置重启时自动挂载。
# 创建挂载点
mkdir /data
# 给全部权限
chmod 777 /data
这里创建挂载点时,提示路径 /data
已经存在,可忽略,也可以另外再创建其他路径。
# 挂载
mount /dev/vdb1 /data
挂载之后,需要设置重启系统时自动挂载,以免每次重启系统还要重新挂载数据盘。
# 查磁盘的UUID
ls -l /dev/disk/by-uuid
这里使用快捷键 Ctrl + Insert
复制UUID,用于设置挂载。
# 编辑 /etc/fstab
nano /etc/fstab
在文件尾部添加新的一行 UUID=4af78fcb-bf85-4f22-8f01-a0720dc09efa /data ext4 defaults 0 0
,保存文件并退出。
这里用到了 nano
编辑器,Ctrl + W
搜索、 Ctrl + O
保存、 Ctrl + X
退出是常用的三个快捷键。
# 再次查看现有磁盘信息,看是否挂载成功
df -h
更新升级系统
sudo apt-get update -y
sudo apt-get upgrade -y
新建普通用户
由于直接使用
root
用户操作很不安全,一旦密码泄露或被破解,系统就完全失去保护了,所以要新建一个普通用户来进行日常的系统操作和维护。
这里我以新建 dev
用户为例进行操作。
# 添加 dev 用户
useradd -m -s /bin/bash dev
命令 | 完整命令 | 英文说明 | 中文说明 |
---|---|---|---|
-m | –create-home | create the user’s home directory | 创建用户的home路径 |
-s | –shell SHELL | login shell of the new account | 指定新账号登录的脚本 |
# 修改密码
passwd dev
注意,linux系统在输入密码时,是不显示 *
等符号的,所以直接输入即可,不要在意是否显示。
# 将新增的用户加入 sudo 用户组
usermod -aG sudo dev
命令 | 完整命令 | 英文说明 | 中文说明 |
---|---|---|---|
-a | –append | append the user to the supplemental GROUPS mentioned by the -G option without removing him/her from other groups | 将用户附加到-G选项中提到的补充组中,而不将其从其他组中移除 |
-G | –groups GROUPS | new list of supplementary GROUPS | 指定补充组的新名单 |
# 编辑 sudo 配置,把 dev 用户加入 sudo 名单
visudo
在配置文件中加入下面代码,表示给 dev 用户所有 sudo 权限:
# User Privilege Specification
dev ALL=(ALL:ALL) ALL
保存并退出。
SSH 配置
为了提高安全性,我们需要修改默认的 ssh 端口号,并禁用
root
用户。
# 编辑 /etc/ssh/sshd_config
nano /etc/ssh/sshd_config
端口号改为 Port 2222
。
禁用 root 用户 PermitRootLogin no
。
然后临时开启密码登录 PasswordAuthentication yes
,以便 dev 用户上传公钥。
最后保存文件并退出。
# 重启 ssh 服务
service sshd restart
注意,这个窗口不要关闭,以免设置错误导致无法登录。
dev 用户登录初始设置
由于dev 用户登录系统,缺失环境变量
/sbin
,所以需要先设置环境变量。
新打开一个 shell 窗口,密码登录 dev 用户。
设置环境变量
# 编辑 .bashrc 文件
vi .bashrc
这里用的是 vim
编辑器,可用 Insert
键切换 INSERT
插入和 REPLACE
替换两种模式,当为 INSERT
时,我们将 export PATH=$PATH:/sbin
添加至文件末尾,然后按 Esc
退出插入模式,再键入 :wq
保存并退出。
:q!
是强制退出不保存。
# 执行以下语句使 .bashrc 生效
source ~/.bashrc
# 查看环境变量
echo $PATH
环境变量是以 :
分隔的。
创建 ssh 公钥文件
# 创建 ssh 文件夹
mkdir .ssh && chmod 700 .ssh
# 创建 authorized_keys 文件,并授予权限
touch .ssh/authorized_keys && chmod 755 .ssh/authorized_keys
在客户端上传 dev 用户的公钥
在客户端打开 shell 窗口,这里以 Windows 10 系统为例,以管理员身份打开 PowerShell
软件。
添加 ssh 密钥
# 生成一对 ED25519 密钥
ssh-keygen -t ed25519 -C "dev" -f C:\Users\Administrator\.ssh\id_ed25519_dev
生成的密钥存放在 C:\Users\你登录的用户名\.ssh
文件夹内,你只需要在资源管理器的地址栏输入 %HOMEPATH%\.ssh
和 回车
即可看到。
其中,id_ed25519_dev
是私钥,是属于你自己设备的密钥;id_ed25519_dev.pub
是公钥,是需要传给服务器的密钥。它们是一对,如果私钥与公钥不匹配,那么身份校验就会失败。
接下来要用 scp
命令登录 dev
用户把公钥传到服务器上。
# 上传公钥
scp -P 2222 .ssh/id_ed25519_dev.pub dev@[ip]:/home/dev/.ssh/authorized_keys
注意替换ip地址 [ip]
。
显示 id_ed25519_dev.pub
上传 100%
即成功。
注意,这个窗口不要关闭,以免设置错误导致无法登录。
上传安全脚本
默认情况下,系统是开放所有端口的,很容易被侵入。我们需要上传一个自定义的脚本
ServerSecurity.sh
,以备后面配置iptables
。
编写安全脚本
在 D:\
根目录新建一个 ServerSecurity.sh
文件,写入下面代码。
#!/bin/bash
echo "服务器安全脚本"
echo "系统更新"
sudo apt-get update -y
sudo apt-get upgrade -y
echo "iptables"
echo "安装 iptables"
sudo apt-get install -y iptables
echo "清除已有规则"
sudo iptables -F
sudo iptables -X
sudo iptables -Z
echo "关闭端口"
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
echo "放行端口"
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 2222 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
echo "保存放行规则"
sudo iptables-save
echo "重启系统"
sudo reboot
上传安全脚本
在客户端打开 shell 窗口,这里以 Windows 10 系统为例,以管理员身份打开 PowerShell
软件。
# 上传
scp -P 2222 D:/ServerSecurity.sh dev@[ip]:/home/dev/ServerSecurity.sh
注意替换ip地址 [ip]
。
dev 用户使用密钥登录
新打开一个 shell 窗口,使用密钥 dev 用户,测试是否配置成功,登录成功后可以关掉其他窗口了。
查看上传的文件
先来查看一下刚才 ServerSecurity.sh
脚本文件是否上传成功。
# 切换到用户目录
cd
# 查看当前目录中的文件
ls
可以看到,已有 ServerSecurity.sh
脚本文件,但是看不到 .ssh
文件夹,原因是 .ssh
文件夹是隐藏的,需要用 ls -a
命令查看。
禁止密码登录
# 编辑 /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
注意,如果需要使用 root
权限,可以在命令前加上 sudo
命令,这样就可避免很多权限问题。
首次使用 sudo
命令或者验证过期时,需要输入密码。
在文件末尾处修改 PasswordAuthentication no
,退出并保存。
# 重启 ssh 服务
sudo service sshd restart
配置 iptables
前面上传的
ServerSecurity.sh
脚本文件,就是用来安装和配置iptables
的。
我们执行一行代码即可实现自动配置:
# 执行脚本
bash ServerSecurity.sh
注意,此脚本会禁用一些端口,并重启系统,执行前请确认好 放行端口
。
执行脚本并重启系统后,安全防护就基本完成了。