目录
账户及登录
账户管理
阿里云root密码重置
用户/用户组管理
ssh登录设置
配置SSH密钥登录
通过阿里云控制台配置(不推荐)
本地生成密钥文件并配置
Putty密钥登录设置
禁用root用户登录和密码登录
网络连通
安全组设置
防火墙设置
网络连通性检查
IP连通性检查 – ping
传输层检查(端口监听)
TCP端口监听
UDP端口监听
网络数据抓包分析(tcpdump)
应用层诊断
账户及登录
账户管理
阿里云root密码重置


用户/用户组管理
首先使用root用户登录云服务器


进入云服务器后,进行账号管理
# 在root账户下:[root@xxx ~]#:
adduser [username] # 添加账户
passwd [username] # 给添加的账户设置或修改密码
userdel -r [username] # centos及debian系统通用,推荐
deluser –remove-home [username] # 删除用户,仅用于debian系统,不推荐
# 给非root用户赋予sudo权限
sudo usermod -aG wheel [username] # 实现方式是将用户加入wheel用户组(centos系统),对ubuntu系统,则是将wheel改为sudo组;-a表示追加,即不会改变用户已加入的用户组;
# 切换用户
sudo su – [username]
# 此时需要输入切换后的username的密码,而不是切换前用户的密码;
# 查看用户/用户组相关信息(lid命令需要sudo权限):
cat /etc/passwd # 查看系统中所有用户的列表
cat /etc/group # 查看系统中所有用户组的列表
whoami # 查看当前登录用户,注,若使用sudo命令,则返回的当前用户变为root;
groups # 查看当前用户所在的用户组
groups [username] # 查看用户所在的用户组信息;
lid -i/-n [username] # 查看用户所在的用户组信息,-i包含groupid信息,-n只显示用户组名称
lid -g [groupname] # 查看某用户组下的用户成员信息;
【补充说明】关于deluser命令和userdel命令:
1. deluser命令仅用于debian系统(仅验证了ubuntu),userdel命令可用于centos及debian系统;
2. 部分文章描述deluser是userdel的封装,使用命令deluser [username]可以删除用户信息,home目录,邮箱等,描述不准确,实测要删除用户home目录,必须加选项–remove-home,邮箱等未验证;
3. 部分文章描述adduser/deluser,useradd/userdel是两对命令,adduser生成的账号只能用deluser删除,useradd生成的账号只能用userdel删除,不准确,实测仅使用了adduser命令新建账号,在ubuntu下两个删除命令均可以删除账号;
综上,建议使用adduser和userdel命令来新建和删除账号;
ssh登录设置
为保证安全,一般对远程访问作以下设置:
- 禁用root用户远程登录:禁止使用root用户通过远程方式登录,防止网络恶意攻击,暴力破解root密码,而改用非root用户+sudo权限方式实现root功能,此替代的好处是恶意攻击首先需要获取到有效的用户名;
- 禁用密码远程登录:为进一步保证安全,还可以设置禁止用户通过密码远程登录,只能通过ssh密钥进行登录;
- 设置ssh密钥的密码:进一步,在生成ssh密钥用于登录时,还可以设置ssh密钥的密码(非用户登录密码),这样在使用ssh密钥进行登录时,还需要输入ssh密钥的密码,防止ssh私钥丢失后被恶意登录。
上述几项配置要注意顺序,例如禁用密码登录前需要将密钥登录配置完成并验证通过,防止密钥登录配置失败导致无法访问系统。
配置SSH密钥登录
SSH密钥登录指生成一对密钥对,包含公钥和私钥,服务器存储公钥,远程登录设备存储私钥。远程登录设备携带私钥文件申请访问服务器,密钥对配对通过即表示验证通过,比密码登录有更高的安全性。
通过阿里云控制台配置(不推荐)
阿里云控制器配置的密钥对默认只在服务器的root账户下写入公钥文件,因此默认只能通过root账户进行密钥登录,如果需要切换至非root用户,还需要手动绑定公钥文件至非root用户,比较麻烦,理解整个过程不太清晰。
本地生成密钥文件并配置
windows系统在cmd或powershell中,linux在终端中按下面步骤生成密钥文件并配置ssh密钥登录:
###### 1. 生成密钥文件
# windows下在cmd或powershell下运行
ssh-keygen -t rsa -b 4096 -C "comment msg"
# -C 是添加的注释信息,会写入pub文件,方便标识不同的密钥;
# 此命令生成的结果是一个rsa文件和一个.pub文件,分别对应私钥和公钥;
###### 2. 云服务器创建.ssh文件夹及公钥文件
mkdir ~/.ssh # 创建.ssh文件夹
chmod 700 ~/.ssh # 设置文件夹属性
touch ~/.ssh/authorized_keys # 创建公钥文件
chmod 600 ~/.ssh/authorized_keys # 设置公钥文件属性
# 注:1. 上述命令必须在以当前用户执行;2. 权限设置不正确可能导致无法ssh登录;
###### 3. 将公钥内容写入云服务器
echo "ssh-rsa xxxxxxxxxxxxxxxxxxxxxxx" >> ~/.ssh/authorized_keys
# 1. 写入位置:写入用户对应的.ssh目录下,对应ssh登录时必须以该用户登录;
# 2. echo语法:
# > 表示覆盖,文件不存在则自动创建文件;
# >> 表示追加;
# 每一个echo语句会在写入前自动追加换行符,因此不用手动换行;
###### 4. 云服务器SSH登录配置
sudo vim /etc/ssh/sshd_config
### 找到并设置如下内容
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
###
###### 5. 本地设备登录
ssh -i private_key_rsa username@server_ip
###### 6. 配置简化连接
# 上一步的登录命令需要写入私钥文件地址及ip地址,非常麻烦,可以通过config文件配置连接,然后以配置的连接名快速登录。
# windows在C:\\\\Users\\[UserName]\\.ssh\\目录下新建config文件;
# linux在~/.ssh/目录下新建config文件;
# config 文件内容如下:
###
Host test # 连接配置的别名,用于连接命令使用
HostName 127.0.0.1 # 连接的server ip;
Port 22 # 连接的端口号,默认22
User root # 连接的用户,此项可省略
PreferredAuthentications publickey # 连接方式:SSH密钥
IdentityFile D:\\personal\\.ssh\\id_rsa-aliyun # 私钥文件,可以不放在.ssh目录下;
Host …
…
###
# 基于上述配置,可简化连接命令为
ssh root@test # 对应没有配置User选项时;
ssh test # 对应配置了User选项时;
Putty密钥登录设置
windows下使用putty登录也非常常见。Putty使用密钥登录时对应的私钥文件格式为ppk,因此需要先将rsa私钥文件转化为ppk格式,步骤如下:




禁用root用户登录和密码登录
###### 1. 修改配置文件
sudo vim /etc/ssh/sshd_config
#对应修改内容如下:
###
PermitRootLogin no # 允许root用户登录,设置为no
PasswordAuthentication no # 允许密码登录,设置为no
###
###### 2. 重启ssh服务
sudo systemctl restart sshd
网络连通
安全组设置
略。
防火墙设置
此部分内容比较复杂,对于centos或阿里云的服务器,根据版本不同,一般会使用firewalld或iptables其一作为防火墙工具,高版本的系统使用iptables,但同时也保留有firewalld,这会导致firewalld的一些配置有效,一些配置又没有效果,比较混乱。这一部分有空了再慢慢补充吧。
网络连通性检查
根据网络协议的7层/5层模型,目前主要涉及到网络层(ip层面),传输层(TCP/UDP,端口)及应用层(http访问等)相关,同时按服务部署又可分为与服务器宿主机的数据通讯及docker容器内的数据通讯。
IP连通性检查 – ping
# 核心命令:ping
ping baidu.com
ping 192.168.125.10
# 查看IP相关配置
ipconfig # windows
ip addr # linux, 可简写为ip a; 建议以此替换以前的ifconfig命令,展示内容更丰富;
# ip addr结果示例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:xx:xx:xx:xx:70 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.125.130/24 brd 192.168.125.255 scope global dynamic noprefixroute ens33
valid_lft 967sec preferred_lft 967sec
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
## 结果解读
# 接口列表:有3个网络接口,分别是本地回环lo,以态网ens33,docker虚拟网络接口docker0;
# 每个接口的详细信息
# 第一行:接口基本信息:
# 网络状态:LOOPBACK,回环网络;UP,接口已启用;LOWER_UP,物理链路正常;
# 网络状态:BROADCAST,支持广播;MTLTICAST,支持多播;NO-CARRIER,无载波信号(即当前无docker服务运行)
# mtu 65536/1500: 最大传输单元;qdist noqueue/fd_codel:队列调度器类型;
# state UNKNOWN/UP/DOWN:接口逻辑状态;qlen 1000:最大队列长度;
# 第二行:MAC地址行:link/loopback/ether:链路层接口,分别代表回环接口和以太网接口;
# 第三行:inet行,ipv4地址行
# inet xx.xx.xx.xx: ipv4地址;brd xx.xx.xx.xx: 广播地址
# scope host/global/link: 作用域,分别代表本机,全局网络,同一物理网络内的设备;
# valid_lft forever/xxx sce: 有效生命周期;preferred_lft 首选生命周期;
# 第四行:inet6行,ipv6地址行
传输层检查(端口监听)
这一层检查相关指令主要以linux环境为主。
TCP端口监听
# tcp端口连通性测试
telnet [$HOST] [$PORT]
# 结果:
# 可访问:结果显示Conneted to [$HOST]
# 端口未开放:结果显示Unable to connect to remote host: Connection refused
UDP端口监听
# 1. 安装nc工具
sudo apt install nc
sudo yum install nc
# 2. 服务端监听UDP端口
sudo nc -uvlp [$PORT]
# 3. 客户端向服务端目标UDP端口发送数据测试
sudo nc -u [$HOST] [$PORT]
xxx # 输入任意传输数据
# 若通讯成功,服务端终端上应能显示传输的数据;
# 若无法通讯,服务端无法收到传输数据;
网络数据抓包分析(tcpdump)
# 服务器宿主机抓包
sudo tcpdump -i any udp port [$PORT]
# 服务器内docker内抓包
## 方法一:在容器内运行上述命令;
## 存在问题:容器内往往未安装tcpdump工具;
## 方法二:在宿主机内抓docker容器的包
#### 1. 查找容器id:
sudo docker ps
#### 2. 获取运行容器对应的pid
sudo docker inspect –format "{{.State.Pid}}" <容器id>
#### 3. 在宿主机上抓取容器内的数据包
nsenter -n -t [$PID] tcpdump -i eth0 port [$PORT]
# 其他命令待确认
sudo ss -tulnp # 端口状态查看;
## 典型输出:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=5678,fd=13))
tcp LISTEN 0 128 :::80 :::* users:(("nginx",pid=9012,fd=6))
## 命令解释:t,tcp;u,udp;l,listening,只显示已监听的端口;n,数据显示端口;p,显示进程名称及pid,需要root权限;
nc -zc [$HOST] [$PORT] # 探测端口;
## 命令解释:z,仅扫描端口,不发送数据;v,显示详细信息,仅用于tcp端口连接检查,不可用于udp;
应用层诊断
# 应用层http调试
curl -Iv [URL]
## 说明:I head,只获取响应头,不下载网页内容;v,显示详细交互过程
网硕互联帮助中心





评论前必须登录!
注册