Ubuntu系统lnmp框架搭建WordPress

系统版本:

linux内核版本号:Linux version 5.11.0-49-generic (buildd@lcy02-amd64-054)

gcc编译器版本号:gcc version 10.3.0

Ubuntu版本号:Ubuntu 10.3.0-1ubuntu1

系统名称:Ubuntu 21.04

部署LNMP环境(Ubuntu 21)

步骤一:准备工作

  1. 关闭系统内部防火墙。
    1. 运行以下命令,检查防火墙当前状态。
       
      sudo ufw status
      • 如果防火墙状态为Status: inactive,则表示防火墙为关闭状态。
      • 如果防火墙状态为Status: active,则表示防火墙为开启状态。
    2. 可选:关闭防火墙。
      如果您的防火墙为开启状态,需要运行以下命令,关闭防火墙并关闭开机自启动防火墙。
       
      sudo ufw disable
       
      说明 如果您想重新开启防火墙并开启开机自启动防火墙,请运行sudo ufw enable命令。

步骤二:安装Nginx

  1. 运行以下命令,更新Ubuntu系统内的软件包。
     
    sudo apt update
  2. 运行以下命令,安装Nginx。
     
    sudo apt -y install nginx
  3. 运行以下命令,查看Nginx版本。
     
    sudo nginx -v
    返回结果如下所示,查看到Nginx的版本信息为1.18.0。同时也表示Nginx已成功安装。
     
    nginx version: nginx/1.18.0 (Ubuntu)

步骤三:安装MySQL

  1. 运行以下命令,安装MySQL。
     
    sudo apt -y install mysql-server
  2. 运行以下命令,查看MySQL版本。
     
    sudo mysql -V
    返回结果如下所示,查看到MySQL的版本为8.0.27。同时也表示MySQL已成功安装。
     
    mysql  Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

步骤四:安装PHP

  1. 运行以下命令,安装PHP。
     
    sudo apt -y install php-fpm
  2. 运行以下命令,查看PHP版本。
     
    sudo php -v
    返回结果如下所示,查看到PHP版本为7.4.3。同时也表示PHP已成功安装。
     
    PHP 7.4.3 (cli) (built: Nov 25 2021 23:16:22) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
        with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

步骤五:配置Nginx

  1. 运行以下命令,修改Nginx默认的配置文件,添加Nginx对PHP的支持。
    1. 打开Nginx默认的配置文件。
       
      sudo vim /etc/nginx/sites-enabled/default
    2. i进入编辑模式,修改Nginx配置文件。
      1. server{}内,找到index开头的配置行,在该行中添加index.phpnginx-indexphp
      2. server{}内找到location ~ \.php$ {},去除以下配置行的注释符号。
         
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        nginx-php
    3. Esc退出编辑模式,然后输入:wq并按Enter键,保存并退出文件。
  2. 运行以下命令,重启Nginx服务。
     
    sudo systemctl restart nginx.service

步骤六:配置MySQL

  1. 运行以下命令,对MySQL进行安全性配置。
     
    sudo mysql_secure_installation
  2. 根据命令行提示,依次完成以下配置项。
    1. 输入Y使用MySQL自带的密码安全校验工具。
       
      VALIDATE PASSWORD COMPONENT can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD component?
      
      Press y|Y for Yes, any other key for No: Y
    2. 设置密码强度。
      本教程中,输入1使用较安全的MEDIUM等级。您可以根据实际业务需求选择适用的密码强度,建议您使用较高的密码强度,增强对数据安全的保护。
       
      There are three levels of password validation policy:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
      
      Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
    3. 设置MySQL的密码。
       
      说明 在输入密码时,系统为了最大限度的保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。
       
      Please set the password for root here.
      
      New password:
      
      Re-enter new password:
      
      Estimated strength of the password: 100
    4. 输入Y确认使用已设置的密码。
       
      Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
    5. 输入Y删除MySQL自带的匿名用户。
       
      By default, a MySQL installation has an anonymous user,
      allowing anyone to log into MySQL without having to have
      a user account created for them. This is intended only for
      testing, and to make the installation go a bit smoother.
      You should remove them before moving into a production
      environment.
      
      Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
    6. 输入Y禁止MySQL的root用户的远程登录权限。
       
      Normally, root should only be allowed to connect from
      'localhost'. This ensures that someone cannot guess at
      the root password from the network.
      
      Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
    7. 输入Y删除MySQL中test库以及用户对test库的访问权限。
       
      By default, MySQL comes with a database named 'test' that
      anyone can access. This is also intended only for testing,
      and should be removed before moving into a production
      environment.
      
      
      Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
    8. 输入Y重新加载授权表。
       
      Reloading the privilege tables will ensure that all changes
      made so far will take effect immediately.
      
      Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
    当命令行回显All done!时,表示配置完成。
  3. 测试登录MySQL数据库。
    1. 运行以下命令,登录MySQL数据库。
       
      sudo mysql -uroot -p
    2. 在命令行回显的Enter password:后输入已设置的数据库密码。
       
      说明 在输入密码时,系统为了最大限度的保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。
      成功登录MySQL数据库后,命令行信息如下图所示:mysql登录
    3. 运行以下命令,退出MySQL数据库。
       
      exit;

步骤七:配置PHP

  1. 运行以下命令,在Nginx网站根目录中,新建phpinfo.php文件。
     
    sudo vi <网站根目录>/phpinfo.php
    <网站根目录>为变量,可通过Nginx配置文件查看。本教程中Nginx配置文件为默认文件/etc/nginx/sites-enabled/default,您可以运行cat /etc/nginx/sites-enabled/default命令查看文件内容,其中如下图所示的/var/www/html部分即为网站根目录。网站根目录因此,对应的运行命令为:
     
    sudo vi /var/www/html/phpinfo.php
  2. i进入编辑模式,添加以下配置信息。
    phpinfo()函数会展示PHP的所有配置信息。
     
    <?php echo phpinfo(); ?>
  3. Esc退出编辑模式,然后输入:wq并按Enter键,保存并退出文件。
  4. 运行以下命令,启动PHP。
     
    sudo systemctl start php7.4-fpm

步骤八:测试访问PHP配置信息页面

  1. 在本地Windows主机或其他具有公网访问能力的Windows主机中,打开浏览器。
  2. 在浏览器的地址栏输入http://<ECS实例公网IP地址>/phpinfo.php进行访问。
    访问结果如下图所示,成功查看到PHP配置信息页面,表示LNMP环境部署成功。php页面

后续步骤

成功搭建LNMP环境后,建议您删除phpinfo.php测试文件,消除数据泄露风险。
 
rm -rf <网站根目录>/phpinfo.php
本教程中网站根目录为/var/www/html,则需要运行以下命令删除测试文件。
 
rm -rf /var/www/html/phpinfo.php

手动搭建WordPress(Ubuntu 21)

搭建WordPress网站

  1. 配置WordPress数据库。
    1. 进入MySQL数据库。
      使用root用户登录MySQL,并输入密码。密码为您在搭建环境时为数据库设置的密码。
       
      mysql -uroot -p
    2. 为WordPress网站创建数据库。

      本教程中数据库名为wordpress

       
      create database wordpress;
    3. 创建一个新用户管理WordPress库,提高安全性。

      MySQL在5.7版本后默认安装了密码强度验证插件validate_password。您可以登录MySQL后查看密码强度规则。

       
      show variables like "%password%";

      本教程中创建新用户user,新用户密码为PASSword123.

       
      create user 'user'@'localhost' identified by 'PASSword123.';
    4. 赋予用户对数据库wordpress的全部权限。
       
      grant all privileges on wordpress.* to 'user'@'localhost';
    5. 使配置生效。
       
      flush privileges;
    6. 退出MySQL。
       
      exit;
  2. 下载并解压WordPress,然后移动至网站根目录。
    1. 进入Nginx网站根目录,下载WordPress压缩包。
      本示例默认安装的是WordPress英文版本。
       
      cd /usr/share/nginx/html
      wget https://wordpress.org/wordpress-5.4.2.zip
      如果您需安装WordPress中文版本,需运行命令wget https://cn.wordpress.org/latest-zh_CN.zip,下载WordPress中文版本压缩包。同时您需要注意,后续操作中压缩包的名称必须替换为latest-zh_CN.zip。
    2. 解压WordPress压缩包。
       
      unzip wordpress-5.4.2.zip
    3. 将WordPress安装目录下的wp-config-sample.php文件复制到wp-config.php文件中,并将wp-config-sample.php文件作为备份。
       
      cd /usr/share/nginx/html/wordpress
      cp wp-config-sample.php wp-config.php
    4. 编辑wp-config.php文件。
       
      vim wp-config.php
    5. i键切换至编辑模式,根据已配置的WordPress数据库信息,修改MySQL相关配置信息,修改代码如下所示。
      WordPress网站的数据信息将通过数据库的user用户保存在名为wordpress的数据库中。
       
      // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
      /** WordPress数据库的名称 */
      define('DB_NAME', 'wordpress');
      
      /** MySQL数据库用户名 */
      define('DB_USER', 'user');
      
      /** MySQL数据库密码 */
      define('DB_PASSWORD', 'PASSword123.');
      
      /** MySQL主机 */
      define('DB_HOST', 'localhost');
    6. 修改完成后,按下Esc键后,输入:wq并回车,保存退出配置文件。
  3. 修改Nginx配置文件。
    1. 运行以下命令打开Nginx配置文件。
       
      sudo vim /etc/nginx/sites-enabled/default
    2. i键进入编辑模式。
      location /大括号内,将root后的内容替换为WordPress根目录。本示例中根目录为/usr/share/nginx/html/wordpress。nginxlocation ~ .php$大括号内,将root后的内容替换为WordPress根目录。nginx修改完成后按Esc键,输入:wq保存并退出配置文件。
    3. 运行以下命令重启Nginx服务。
       
      systemctl restart nginx
  4. 安装并登录WordPress网站。
    1. 在本地物理机上使用浏览器访问ECS实例公网IP,进入WordPress安装页面。
    2. 填写网站基本信息,然后单击安装WordPress。
      填写信息参数说明:
      • 站点标题:WordPress网站的名称。例如:demowp。
      • 用户名:登录WordPress时所需的用户名,请注意安全性。例如:testwp。
      • 密码:登录WordPress时所需的密码,建议您设置安全性高的密码。例如:Wp.123456。
      • 您的电子邮件:用于接收通知的电子邮件。例如:1234567890@aliyun.com。
    3. 单击登录。
    4. 输入在安装WordPress时设置的用户名wenqiang和密码*****,然后单击登录。
      成功进入您个人的WordPress网站。
    5. 建站成功 
 

Ubuntu操做系统加固及Web服务器常见加固方法

借鉴文章

系统加固:https://www.jb51.net/article/135350.htm

系统加固较为详细:https://blog.51cto.com/sf1314/2064736

web服务器加固:https://blog.51cto.com/sf1314/2064733

系统加固

1. 账号和口令

1.1 禁用或删除无用账号

减少系统无用账号,降低安全风险。

操作步骤

  • 使用命令 cat /etc/passwd  查看存在的账号。
  • 使用命令 userdel <用户名> 删除不必要的账号。
  • 使用命令 passwd -l <用户名> 锁定不必要的账号。
  • 使用命令 passwd -u <用户名> 解锁必要的账号。

1.2 检查特殊账号

检查是否存在空口令和root权限的账号。

操作步骤

  1. 查看空口令和root权限账号,确认是否存在异常账号:
    • 使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号。
    • 使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为零的账号。
  2. 加固空口令账号:
    • 使用命令 passwd <用户名> 为空口令账号设定密码。
    • 确认UID为零的账号只有root账号。

1.3 添加口令策略

加强口令的复杂度等,降低被猜解的可能性。

操作步骤

  1. 使用命令 vi /etc/login.defs 修改配置文件。
    • PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
    • PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
    • PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
  2. 使用chage命令修改用户设置。
    例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。
  3. 设置连续输错三次密码,账号锁定五分钟。使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300

1.4 限制用户su

限制能su到root的用户。

操作步骤

使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。例如,只允许test组用户su到root,则添加 auth required pam_wheel.so group=test

1.4 禁止root用户直接登录

限制root用户直接登录。

操作步骤

  1. 创建普通权限账号并配置密码,防止无法远程登录;
  2. 使用命令 vi /etc/ssh/sshd_config修改配置文件将PermitRootLogin的值改成no,并保存,然后使用service sshd restart重启服务。

2. 服务

2.1 关闭不必要的服务

关闭不必要的服务(如普通服务和xinetd服务),降低风险。

操作步骤

使用命令 chkconfig --level <init级别> <服务名> on|off|reset 设置服务在指定init级别下开机是否启动。

2.2 SSH服务安全

对SSH服务进行安全加固,防止暴力破解成功。

操作步骤

使用命令 vim /etc/ssh/sshd_config 编辑配置文件。

  • 不允许root账号直接登录系统。
    设置 PermitRootLogin 的值为 no。
  • 修改SSH使用的协议版本。
    设置 Protocol 的版本为 2。
  • 修改允许密码错误次数(默认6次)。
    设置 MaxAuthTries 的值为 3。

配置文件修改完成后,重启sshd服务生效。

3. 文件系统

3.1 设置umask值

设置默认的umask值,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。

3.2 设置登录超时

设置系统登录后,连接超时时间,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟。

4. 日志

4.1 syslogd日志

启用日志功能,并配置日志记录。

操作步骤

Linux系统默认启用以下类型日志:

  • 系统日志(默认)/var/log/messages
  • cron日志(默认)/var/log/cron
  • 安全日志(默认)/var/log/secure

注意:部分系统可能使用syslog-ng日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。

您可以根据需求配置详细日志。

4.2 记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

1、运行 [root@xxx /]# vim /etc/profile打开配置文件。

2、在配置文件中输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/nullawk '{print $NF}'|sed -e 's/[()]//g'`
if "$USER_IP" "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

3、运行 [root@xxx /]# source /etc/profile 加载配置生效。
注意: /var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。

同时,建议您使用OSS服务收集存储日志。

遇到问题

1.1禁用或删除无用账号

不知道哪些是无用账户,带来的安全问题.

如果下面这些系统默认帐号不需要的话,建议删除。
lp, sync news, uucp, games, bin、man

1.3 添加口令策略 

添加完上面策略,就无法sudo su提权了

1.4 限制用户su

添加完内容,测试没有效果

2.1 关闭不必要的服务

不知道哪些无用

2.2 SSH服务安全

没找到文件配置设置信息

3. 文件系统

没有找到文件配置信息

总结:

系统加固

1.用户和口令.防止越权

2.服务. 防止服务存在漏洞

3.文件 防止查看敏感信息

4.日志 防止清除痕迹.

个人存在问题

1.对Linux系统基础还不是很熟.

2.需要整理一下加固个人方案

Web服务器常见加固

 

1.Wordpress数据库操作权限的安全设置

       首先说说数据库的安全设置。我建议你最好单独给Wordpress建一个数据库,最好不要跟其它网站或应用共享一个数据库。因为如果其中一个网站有漏洞,黑客进入了数据库,这就威胁到了整个数据库表的安全。然后还应该设置Wordpress数据库的操作权限,比如,哪些账户可能有insert、delete和create权限,哪些只有select权限等。

       另外各个数据库账户的密码一定要非常强壮,最好用密码管理软件生成一串包含数字、字母和符号的随机密码。关于权限设置,你可能参考以下代码:

$ mysql -u root -p

mysql> create database 'myblog';

mysql> grant select, insert, delete, update, create, drop, alter on myblog.* to 'bloguser'@'localhost' identified by 'mypassword';

mysql> flush privileges;

mysql> exit;

2.修改默认管理员帐户密码

       不要在管理员的用户名中使用诸如Admin这样的名称,你可以直接用MySQL打开数据库,直接修改数据库中的管理员用户名。表名为_users。也一定注意管理员的密码。要跟上面设置数据库的密码一样,要弄得复杂一些,最好有大写字母、小写字母、数字和符号。可以考虑用一些密码管理软件,如KeePass等来保存密码。

3.使用加密路径访问

       这一条不是很觉见,因为很多站点一般是不支持SSL(HTTPS)的访问模式,需要付费。但Wordpress是支持用HTTPS的方式访问的。如果你的服务器支持HTTPS,你一定使用加密方式访问后台。因为如果使用一般的HTTP,你的密码可能会被人用抓包嗅探软件截取到。要启用HTTPS访问后台的方式的话,你需要在wp-config.php中加入以下代码:

define('FORCE_SSL_ADMIN', true);

4.及时升级到新版本

       新版本的发布除了新功能一定还有对漏洞的修复。所以当有新版本发布时,你一定要重视了解下此版本修复了哪些漏洞。要及时下载最新安装包更新到新版本。

5.定期备份Wordpress数据库和文件

       一定要定期备份数据库。因为一旦数据库被入侵破坏,你可以将数据库恢复过来。谁都不想幸幸苦苦做的内容瞬间化为灰烬。你可以找找Wordpress数据库备份的插件,有些插件可以设置定期自动执行备份操作。有一款叫WP-DB Manager的插件可以自动将备份发送到你的Gmail邮箱。

除了备份数据库以外,也应该把Wordpress的文件做定期备份。特别是当你对代码做了很大的修改的情况下,比如插件、主题模板等,你更应该对源代码做一下备份。万一Wordpress被攻击,恢复起来也容易得多。

6. 屏蔽文件夹目录浏览

  有些主机可能允许浏览目录结构,这个的安全隐患非常大。浏览目录结构表示黑客可以看到你所有的文件名。最简单的办法是在每个目录下面都放上一个空内容的index.html            文件。这样访问者就只能看到一个空白的页面了。要关闭Apache的目录浏览也很简单,只需要在根目录的.htaccess文件中添加这行代码:

Options All -Indexes

总结

1.数据库  进行用户隔离,然后防止弱口令.用插件进行备份

2.版本      防止应用存在版本漏洞

3.日志      对日志进行监控,对溯源,和修复有作用

4.路径      防止黑客看到文件名

 

 

posted @ 2022-02-17 12:48  WeQi_Blog  阅读(796)  评论(0编辑  收藏  举报