添加普通用户
为了安全,平时我们应该以普通用户的身份操作 VPS,所以需要添加一个普通用户。添加用户有两个命令,adduser 和 useradd,在不同系统中的定义以及用法上有区别,这里提供一个通用添加方法:
以添加用户名为 admin 的普通用户为例子,输入命令
useradd -m -s /bin/bash admin
然后对该用户设置密码,输入命令后会提示输入两次密码
passwd admin
授予普通用户 sudo 权限
有时需要使用 root 权限,比如安装软件、启动服务等操作时就需要用到 sudo 命令来提升权限才能进行操作。授予用户 sudo 权限最简单的方法是把用户添加到 sudo 用户组。
如果系统中没有 sudo,需要先安装。
Debian
apt install sudo -y
Centos
yum install sudo -y
以添加 admin 这个用户到 sudo 用户组为例子,输入下面命令:
usermod -aG sudo admin
或者用以下方法:
修改 sudo 配置文件(/etc/sudoers)
打开 sudo 配置文件
visudo
以授予 admin 这个用户 sudo 权限为例子,添加如下内容。
admin ALL=(ALL) ALL
添加配置文件到/etc/sudoers.d/目录中
这个是系统文档推荐的做法。/etc/sudoers.d/ 目录中的文件相当于是 /etc/sudoers 文件的补充。如果你写的配置文件有问题或者是想去除用户的 sudo 权限,直接删除文件即可,不用去修改 /etc/sudoers 文件,不会影响到系统默认配置。
以授予 admin 这个用户 sudo 权限为例子,在终端中输入以下命令直接添加配置文件:
tee /etc/sudoers.d/admin <<< 'admin ALL=(ALL) ALL'
如果你不想输入每次 sudo 都输入密码,可以设置免密。
tee /etc/sudoers.d/admin <<< 'admin ALL=(ALL) NOPASSWD: ALL'
最后赋予正确的权限:
chmod 440 /etc/sudoers.d/admin
配置 SSH 密钥登录
使用 ssh-keygen 生成密钥对(私钥和公钥)
在本地终端中执行 ssh-keygen 命令,提示都不用管,一路回车 (Enter)
操作完后会在 ~/.ssh 目录中生两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。
使用 ssh-copy-id 配置公钥
执行以下命令自动将公钥上传并配置到 VPS 上:
ssh-copy-id -i ~/.ssh/id_rsa.pub User@HostName -p Port
-i为指定公钥路径,后面的~/.ssh/id_rsa.pub是公钥路径。
User 为用户名,HostName 为 IP 地址,Port 为端口号。
ssh-copy-id 命令相当于执行了以下复杂的手动操作:
复制公钥文件中的内容
cat ~/.ssh/id_rsa.pub
登录到远程主机
ssh User@HostName -p Port
创建 ~/.ssh 目录
mkdir -p ~/.ssh
把公钥文件写入到 ~/.ssh/authorized_keys
vim ~/.ssh/authorized_keys
设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
所以使用 ssh-copy-id 大大简化了 SSH 密钥的配置过程。
禁用不安全的登录方式
前面的一系列操作都是铺垫,是为禁止 root 账户登录和密码登录以及修改 SSH 端口做准备,这才是提升 VPS 安全性的主要目的。
打开 sshd 配置文件 (/etc/ssh/sshd_config) 进行修改。
sudo nano /etc/ssh/sshd_config
禁止密码登录
找到 PasswordAuthentication,一般情况看到的应该是这样的:
#PasswordAuthentication yes
去掉前面的#,把 yes 改为 no,像下面这样:
PasswordAuthentication no
禁止 root 登录
找到 PermitRootLogin,对默认使用 root 登录的 VPS ,看到的应该是这样的:
PermitRootLogin yes
要完全禁止 root 登录,把 yes 改为 no,像下面这样:
PermitRootLogin no
修改 SSH 端口
找到 Port,默认情况下这个选项是被注释,像下面这样:
#Port 22
去掉前面的#,把后面的 22 换成其它端口,比如 2222,像下面这样:
Port 2222
重启 sshd 服务
为了使以上修改生效,需要重启 sshd 服务
sudo service sshd restart
清除 root 用户密码
当清除 root 用户密码后,就无法使用 su 命令切换到 root 用户。只有被授予 sudo 权限的用户执行 sudo -i 命令并输入当前用户的密码才能切换到 root 用户,进一步提升了安全性。
sudo passwd -d root
删除用户
以删除 admin 这个用户为例子,首先终结该用户所有进程
pkill -u admin
然后输入删除命令
userdel -r admin
-r 表示删除用户的同时,将其宿主目录和系统内与其相关的内容删除。
配置ssh密钥一键脚本:
Usage
bash <(curl -fsSL bit.ly/key-sh) [options...] <arg>
Options
-o- Overwrite mode, this option is valid at the top-g- Get the public key from GitHub, the arguments is the GitHub ID-u- Get the public key from the URL, the arguments is the URL-f- Get the public key from the local file, the arguments is the local file path-p- Change SSH port, the arguments is port number-d- Disable password login
e.g
bash <(curl -fsSL bit.ly/key-sh) -og ceigt -p 2222 -d
通过acme.sh申请ECC证书:
curl https://get.acme.sh | sh
. .bashrc
acme.sh --upgrade --auto-upgrade
acme.sh --set-default-ca --server letsencrypt
export CF_Key="xxxxxxxxxx"
export CF_Email="you@email.com"
acme.sh --issue --dns dns_cf -d www.example.com --keylength ec-256 --force
acme.sh --install-cert -d www.example.com --ecc --fullchain-file ~/certs/example.crt --key-file ~/certs/example.key