前言

本来是top10知识复习与巩固的,结果复习到了xss,之前一直没有搞服务器,每次都是网上搜索解决的,干脆就长期买断一个服务器吧。这样就写了这篇文章。

Ubuntu

服务器安装

由于是云服务,压根就没有安装系统这一步,这我也就直接跳过了

  1. 大学生嫖一个三大云厂商服务器
  2. 我个人选择的是ubuntu22.04,无他,centos不更新了,最开始我也是学的centos的,但是后面慢慢转到了ubuntu

添加用户

既然上了公网,这里就不推荐root执行,以及root远程登录了,怎么说也是学安全的,总不能一直使用root登录吧(我们导师每次看到我虚拟机的root账户都要蛐蛐我)。

  1. 首先使用aliyun自带的web远程登录(这里就是root登录,而且是免密的)
1
useradd -m -s /bin/bash  -G sudo -c "ssh access" username 
  • 我这里就是创建了家目录,以及指定了登录shell,写了一个注释,分配了sudo权限
选项 解释
-c, --comment COMMENT 添加注释,通常用于填写用户全名或描述信息
-d, --home HOME_DIR 指定用户的主目录路径
-m, --create-home 如果主目录不存在,则自动创建主目录
-M 不创建用户的主目录
-D, --defaults 显示或修改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 设置账户的过期日期,格式为 YYYY-MM-DD
-f, --inactive INACTIVE 设置密码过期后,账户被禁用前的天数
-g, --gid GROUP 指定用户的主要组(组名或 GID)
-G, --groups GROUPS 指定用户所属的附加组列表,多个组用逗号分隔
-k, --skel SKEL_DIR 指定骨架目录,用于复制文件到用户主目录(需配合 -m 使用)
-r, --system 创建系统账户
-s, --shell SHELL 指定用户的登录 shell
-u, --uid UID 指定用户的 UID(用户 ID)
-U, --user-group 创建与用户名同名的组,并将其作为用户的主要组

允许用户ssh密码登录

aliyun的云服务器默认是禁止ssh密码登录的,你用xshell连接服务器,密码选项是无法选择的,只能用公钥和密码登录(虽然这样更安全,但真不符合我的习惯,我的这小云服务器还有高级hei客来打吗?那正好我学习学习技术)

  1. 给上一节创建的用户设置密码

    1
    passwd username
  2. 切换到创建的username,然后编辑/etc/ssh/sshd_config

    1
    sudo vim /etc/ssh/sshd_config
  3. 将PasswordAuthentication改为yes即可,保存退出

    1
    PasswordAuthentication yes
  4. 重启ssh服务

    1
    systemctl restart ssh

nginx

安装apache2也可以进行网站服务,但是我这里选择nginx,因为nginx要小一点(符合我这2核2g的小云服务器)

  1. 安装nginx
1
sudo apt install -y nginx
  1. 设置为开机自启
1
sudo systemctl enable nginx
  1. 重启nginx服务
1
sudo systemctl restart nginx
  1. 开启aliyun80端口安全组,访问网站(有下面图片就完成了)

image-20260304110936080

php

我这个服务器主要是写题,所以主流语言还是php7.4.3

  1. 添加第三方仓库,获取apt软件源

    1
    2
    sudo add-apt-repository ppa:ondrej/php -y
    sudo apt update
  2. 安装php7.4.3,以及一系列插件

1
sudo apt install -y php7.4 php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip php7.4-bcmath php7.4-json
  • php-fpm: PHP 进程管理器,Nginx 必须配合它使用
  • php-mysql: 让 PHP 能连接数据库
  • php-curl, php-gd, php-mbstring, php-xml, php-zip: 网站常用功能支持(根据后缀,应该也能知道是支持一系列格式的)
    • gd:处理图片,curl:抓取流量,mbstring:处理其他编码,xml:处理xml文档,zip:处理解压缩
  1. 将php-fpm设为开机自启,并且重启该服务

    1
    2
    sudo systemctl enable php7.4-fpm
    sudo systemctl restart php7.4-fpm
  2. 备份配置文件,并进行修改

    1
    2
    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
    sudo vim /etc/nginx/sites-available/default
  3. 找到如下代码块(将注释掉取消掉,php-cgi的注释保留)

    image-20260304114244908

    检测nginx语法是否有问题

    1
    sudo nginx -t

    重新加载nginx

    1
    sudo systemctl reload nginx
  4. 写一个info探针,测试是否部署成功

    1
    2
    3
    4
    sudo vim /var/www/html/phpinfo.php

    # 文件中写入
    <?php phpinfo()?>
  5. 访问网站,后接uri:phpinfo.php

    image-20260304114511942

mysql

参考文章:Ubuntu 22.04 安装 MySQL 5.7 完整指南_ubuntu22.04安装mysql5.7-CSDN博客

现在mysql的通用版本是8以上,我这里是做题环境,所以用mysql5.7

  1. 清除现有的mysql安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 停止 MySQL 服务
    sudo systemctl stop mysql

    # 卸载现有 MySQL 包
    sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

    # 删除配置文件和数据
    sudo rm -rf /etc/mysql /var/lib/mysql

    # 清理自动安装的依赖
    sudo apt autoremove
    sudo apt autoclean
  2. 下载mysql5.7.42

    1
    2
    3
    4
    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1ubuntu18.04_amd64.deb-bundle.tar

    # 解压包
    tar -xvf mysql-server_5.7.42-1ubuntu18.04_amd64.deb-bundle.tar
  3. 个人推荐move到opt下面,并且创建一个目录mysql

  4. 安装依赖

    1
    sudo apt install libaio1 libmecab2 libtinfo5 -y
  5. 一键安装脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/bin/bash
    set -e

    echo "开始安装 MySQL 5.7..."

    # 按正确顺序安装 MySQL 包
    echo "1. 安装 mysql-common..."
    sudo dpkg -i mysql-common_5.7.42-1ubuntu18.04_amd64.deb

    echo "2. 安装 libmysqlclient20..."
    sudo dpkg -i libmysqlclient20_5.7.42-1ubuntu18.04_amd64.deb

    echo "3. 安装 libmysqlclient-dev..."
    sudo dpkg -i libmysqlclient-dev_5.7.42-1ubuntu18.04_amd64.deb

    echo "4. 安装 libmysqld-dev..."
    sudo dpkg -i libmysqld-dev_5.7.42-1ubuntu18.04_amd64.deb

    echo "5. 安装 mysql-community-client..."
    sudo dpkg -i mysql-community-client_5.7.42-1ubuntu18.04_amd64.deb

    echo "6. 安装 mysql-client..."
    sudo dpkg -i mysql-client_5.7.42-1ubuntu18.04_amd64.deb

    echo "7. 安装 mysql-community-server..."
    sudo dpkg -i mysql-community-server_5.7.42-1ubuntu18.04_amd64.deb

    echo "8. 安装 mysql-server..."
    sudo dpkg -i mysql-server_5.7.42-1ubuntu18.04_amd64.deb

    echo "MySQL 5.7 安装完成!"
  6. 添加执行权限,并执行

    1
    2
    sudo chmod +x install_mysql.sh
    sudo ./install_mysql.sh
  7. 初始化配置(这个脚本是你安装完成之后就有的,不用找在哪)

1
sudo mysql_secure_installation

VALIDATE PASSWORD COMPONENT can be used to test passwords...

  • 输入:n (否),我这小机器就不设置复杂的密码校验了

Change the password for root ?

  • 输入:Y (是)

Remove anonymous users?

  • 输入:Y (是)

Disallow root login remotely?

  • 输入:Y (是) ,为了安全,禁止 root 远程连接,我们稍后会创建专用用户。

Remove test database and access to it?

  • 输入:Y (是)

Reload privilege tables now?

  • 输入:Y (是)
  1. 2g内存的性能优化,以及改编码

    1
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

    修改下面信息,没有就加上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [mysqld]
    bind-address = 127.0.0.1
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci

    # 2G 内存核心优化
    innodb_buffer_pool_size = 256M

    # 日志大小:减小日志文件以节省磁盘和内存映射
    innodb_log_file_size = 32M
    innodb_log_buffer_size = 8M

    # 连接数限制:小网站不需要太多并发连接,减少每个连接的内存开销
    max_connections = 100

    # 关闭性能模式 (Performance Schema)
    performance_schema = OFF

    # 7. 临时表大小限制
    tmp_table_size = 32M
    max_heap_table_size = 32M
  2. 设置为开机自启,并且重启该服务

    1
    2
    sudo systemctl enable mysql
    sudo systemctl restart mysql
  3. 测试是否成功连接

    1. 登录mysql

      1
      mysql -u root -p
    2. 创建测试数据库(一次输入)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      -- 1. 创建数据库 (例如叫 mywebsite)
      CREATE DATABASE mywebsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

      -- 2. MySQL 5.7 推荐使用 mysql_native_password 认证插件,兼容性最好
      CREATE USER 'webuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

      -- 3. 授予该用户对特定数据库的所有权限
      GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost';

      -- 4. 刷新权限
      FLUSH PRIVILEGES;

      -- 5. 退出
      EXIT;
    3. 创建测试文件/var/www/html/db_test.php

    4. 写入下面内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      <?php
      $servername = "localhost";
      $username = "webuser";
      $password = "yourpassword"; // 替换为你刚才设置的密码
      $dbname = "mywebsite";

      // 创建连接
      $conn = new mysqli($servername, $username, $password, $dbname);

      // 检查连接
      if ($conn->connect_error) {
      die("连接失败: " . $conn->connect_error);
      }
      echo "成功连接到 MySQL 5.7! 当前数据库版本信息:<br>";

      // 获取服务器版本
      $result = $conn->query("SELECT VERSION() as version");
      $row = $result->fetch_assoc();
      echo "MySQL Version: " . $row["version"];

      $conn->close();
      ?>

      image-20260304133141608

linux的phpstudy

这个其实可以一键配置lnmp或者lamp环境,但是我这小服务器,我就直接手动配置的lnmp

这个配置很简单,首先有一个纯净的ubuntu,去phpstudy的官网,用脚本一键下载即可

小皮面板安装脚本下载 - 一键部署 Linux 网站环境 | 支持 CentOS/Ubuntu/Debian

1
sudo wget -O install.sh https://dl.xp.cn/dl/xp/install.sh && sudo bash install.sh

image-20260304195932144

TODO1Panel

TODObaota