RockyLinux 8 安装和保护 PostgreSQL 服务器

PostgreSQL 是一个流行的开源关系数据库管理系统。 它以其可靠性而闻名,由于其稳健性、灵活性和性能而越来越受欢迎。 PostgreSQL 用于管理数据库以及众多的 Web 和分析应用程序。 在撰写本文时,PostgreSQL 13 是最新版本。 此版本对索引和查找系统进行了重大改进,有利于大型数据库。

在这篇文章中,我们将向我们展示 Rocky Linux 8 上安装和保护 PostgreSQL。

先决条件

  • 在 云平台上运行 Rocky Linux 8 的服务器
  • 在我们的服务器上配置的 root 密码

第 1 步 – 创建 云服务器

首先,登录到我们的 云服务器。 创建一个新服务器,选择 Rocky Linux 8 作为至少 2GB RAM 的操作系统。 通过 SSH 连接到我们的云服务器并使用页面顶部突出显示的凭据登录。

登录到服务器后,运行以下命令以使用最新的可用软件包更新基本系统。

dnf update -y

第 2 步 – 添加 PostgreSQL 13 存储库

默认情况下,最新版本的 PostgreSQL 不包含在 Rocky Linux 默认存储库中。 我们可以使用以下命令检查 AppStream 存储库中的默认可用版本:

dnf module list postgresql

我们应该看到只有 PostgreSQL 版本 10 可用:

Rocky Linux 8 - AppStream
Name                         Stream                   Profiles                             Summary                                             
postgresql                   9.6                      client, server [d]                   PostgreSQL server and client module                 
postgresql                   10 [d]                   client, server [d]                   PostgreSQL server and client module                 
postgresql                   12                       client, server [d]                   PostgreSQL server and client module                 
postgresql                   13                       client, server [d]                   PostgreSQL server and client module                 

为了安装最新的 PostgreSQL 版本,我们需要将 PostgreSQL 存储库安装到我们的系统中。

我们可以使用以下命令安装它:

dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

创建存储库后,我们可以继续下一步。

第 3 步 – 在 Rocky Linux 8 上安装 PostgreSQL 13

现在,使用以下命令更新我们的存储库:

dnf update -y

接下来,使用以下命令禁用默认 PostgreSQL 存储库:

dnf -qy module disable postgresql

接下来,通过运行以下命令安装最新版本的 PostgreSQL:

dnf install postgresql13 postgresql13-server

安装 PostgreSQL 13 后,我们将获得以下输出:

Last metadata expiration check: 0:00:08 ago on Fri 22 Oct 2021 08:38:58 AM UTC.
Dependencies resolved.
===============================================================================================================================================
 Package                                  Architecture                Version                                Repository                   Size
===============================================================================================================================================
Installing:
 postgresql13                             x86_64                      13.4-1PGDG.rhel8                       pgdg13                      1.5 M
 postgresql13-server                      x86_64                      13.4-1PGDG.rhel8                       pgdg13                      5.5 M
Installing dependencies:
 postgresql13-libs                        x86_64                      13.4-1PGDG.rhel8                       pgdg13                      414 k

Transaction Summary
===============================================================================================================================================
Install  3 Packages

Total download size: 7.4 M
Installed size: 31 M
Is this ok [y/N]: y

接下来,使用以下命令初始化 PostgreSQL 数据库:

/usr/pgsql-13/bin/postgresql-13-setup initdb

样本输出:

Initializing database ... OK

接下来,启动 PostgreSQL 服务并使用以下命令使其在系统重新启动时启动:

systemctl start postgresql-13
systemctl enable postgresql-13

我们可以使用以下命令检查 PostgreSQL 的状态:

systemctl status postgresql-13

我们应该得到以下输出:

● postgresql-13.service - PostgreSQL 13 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-10-22 08:39:47 UTC; 7s ago
     Docs: https://www.postgresql.org/docs/13/static/
  Process: 36412 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 36417 (postmaster)
    Tasks: 8 (limit: 11411)
   Memory: 16.8M
   CGroup: /system.slice/postgresql-13.service
           ├─36417 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
           ├─36419 postgres: logger 
           ├─36421 postgres: checkpointer 
           ├─36422 postgres: background writer 
           ├─36423 postgres: walwriter 
           ├─36424 postgres: autovacuum launcher 
           ├─36425 postgres: stats collector 
           └─36426 postgres: logical replication launcher 

默认情况下,PostgreSQL 侦听端口 5432。我们可以使用以下命令检查它:

ss -antpl | grep 5432

我们将获得以下输出:

LISTEN 0      128        127.0.0.1:5432       0.0.0.0:*    users:(("postmaster",pid=36417,fd=7))
LISTEN 0      128            [::1]:5432          [::]:*    users:(("postmaster",pid=36417,fd=6))

第 4 步 – 为 Postgres 用户设置密码

默认情况下,Postgres 用户的密码是没有设置的,所以出于安全考虑,建议设置密码。

要设置密码,请使用以下命令登录 PostgreSQL:

su - postgres

接下来,使用以下命令设置安全密码:

psql -c "alter user postgres with password 'securepassword'"

接下来,使用以下命令退出 PostgreSQL shell:

exit

第 5 步 – 更改 PostgreSQL 身份验证方法

默认情况下,PostgreSQL 被配置为使用 peer 方法在本地连接到 PostgreSQL。 但是这种方法不推荐用于生产环境。 建议将身份验证方法从 peer 更改为 scram-sha-256。

我们可以通过编辑 PostgreSQL 主配置文件来更改它:

nano /var/lib/pgsql/13/data/pg_hba.conf

找到以下行:

local   all             all                                     peer

并且,将其替换为以下行:

local   all             all                                     scram-sha-256

保存并关闭文件,然后重新启动 PostgreSQL 服务以应用更改。

systemctl restart postgresql-13

第 6 步 – 在 PostgreSQL 中创建数据库和用户

首先,使用以下命令登录 PostgreSQL shell:

sudo -u postgres psql

我们将获得以下输出:

could not change directory to "/root": Permission denied
psql (13.4)
Type "help" for help.

postgres=# 

接下来,使用以下命令创建一个名为 user1 的新 PostgreSQL 用户:

CREATE USER user1 WITH CREATEDB CREATEROLE PASSWORD 'passoword';

要验证 PostgreSQL 用户,请运行:

\du

我们将获得以下输出:

                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 user1     | Create role, Create DB                                     | {}

要创建一个名为 user1db 的新 PostgreSQL 数据库,请运行:

CREATE DATABASE user1db OWNER user1;

要验证 PostgreSQL 数据库,请运行:

\l

我们将获得以下输出:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 user1db   | user1    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

恭喜! 我们已在 Rocky Linux 8 上成功安装并保护了 PostgreSQL。出于安全原因,始终建议在生产环境中安装最新版本的 PostgreSQL。 试一试来自 的 VPS 托管!

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论