云计算百科
云计算领域专业知识百科平台

服务器(CentOS)相关常用操作汇总(持续更新中)

目录

账户及登录

账户管理

阿里云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格式,步骤如下:

  • 开始菜单搜索运行PuttyGen,点击Load导入私钥文件;
  • 可以为生成的新私钥文件设置密码,点击save private key,即可生成ppk格式的私钥文件;
  • 生成ppk格式的私钥文件后,在打开Putty软件,在Session页面配置相关连接信息;
  • 在SSH-Auth-Credentials页面配置私钥文件
  • 配置完成,点击Open可进行连接,返回Session页面点击save可保存此车接配置。
  • 禁用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,显示详细交互过程

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 服务器(CentOS)相关常用操作汇总(持续更新中)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!