このブログを検索

ラベル centos8 の投稿を表示しています。 すべての投稿を表示
ラベル centos8 の投稿を表示しています。 すべての投稿を表示

2021/05/07

postfixとdovecotのSSL化@CentOS8

iphoneのメール設定の現状確認

outgoing server
 SMTP: 
       Use SSL: on
       Authentication: Password
       Server Port: 587

Advanced - Incoming Settings
  Use SSL: off
  Authentication: Password
  IMAP Path Prefix: /
  Server Port: 143

この状態で送受信できている。

postfixはssl対応できている。

Incoming Settingsで、 Use SSLをonにすると、

Server Portが 993になるが、設定検証でnot respondingとなる。

dovecotがssl対応していない

一応、postfixの設定確認

/etc/postfix/main.cf
smtp_tls_security_level = may
→これでtlsが有効になっている
※smtpd_enforce_tls=yes は古い設定

tlsの付く設定は

smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtpd_tls_security_level = may

証明書関連ファイルの確認

postfix.pem
postfix.key
ca-bundle.crt
 -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt

これらの証明書は存在していて、タイムスタンプがどうやらcentos8をインストールした日のようだ。

最初から入っていた?

とりあえず動いてるっぽい。

dovecotの設定

/etc/dovecot/dovecot.conf

protocols=imap pop3

で、imaps pop3sが有効になっていない?

protocols=imap3 pop3s

に変更してdovecot再起動すると

 5月 07 10:13:53 god dovecot[1269884]: doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:13:53 god dovecot[1269884]: doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:13:53 god dovecot[1269884]: master: Dovecot v2.3.8 (9df20d2db) starting up for imap, pop3
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 
 'imaps' protocol can no longer be specified (use protocol>
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 
 'pop3s' protocol can no longer be specified (use protocol>
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file

古い設定方法だったようだ。

imaps pop3sは imap pop3に戻す

/etc/dovecot/conf.d/10-ssl.conf

に設定する

ssl = no

を変更

ssl = yes

下記設定はデフォルトなのだが、見るとやっぱり証明書がある。

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

firewalldでimaps pop3sを開ける

# firewall-cmd --add-service={pop3s,imaps} --permanent
success

# firewall-cmd --reload
success

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client dns http imap imaps pop3 pop3s samba smtp smtp-submission smtps
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

dovecot再起動すると

May  7 10:27:57 god dovecot[1270364]: imap-login: Error: Failed to initialize SSL server context: 
Can't load DH parameters: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small: 

セキュリティ的に厳しくなった的なことらしい。

https://doteya.at.webry.info/201907/article_5.html
5月 07 10:34:05 god dovecot[1270813]: doveconf: Warning: 
Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: ssl_>
 5月 07 10:34:05 god dovecot[1270813]: master: Dovecot v2.3.8 (9df20d2db) 
 starting up for imap, pop3
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 NOTE: You can get a new clean config file with: doveconf -Pn >>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: ssl_cert_fil>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: ssl_key_file>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: ssl_dh>
 5月 07 10:34:06 god dovecot[1270816]: config: Warning: 
 please set ssl_dh=

ssl_dh= を設定してください、だそうだ。

下記設定を書いて、dh.pemを作成する。

# DH parameters length to use.
# 2021/05/07
#ssl_dh_parameters_length = 1024
ssl_dh_parameters_length = 2048
ssl_dh=</etc/dovecot/dh.pem


# openssl dhparam 2048 -out /etc/dovecot/dh.pem
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................
(略)

take a long timeと表示されるが1分もかからない

dovecot再起動すると

May  7 10:37:28 god dovecot[1271026]: doveconf: Fatal: 
Error in configuration file /etc/dovecot/conf.d/10-ssl.conf 
line 51: ssl_dh: Can't open file /etc/dovecot/dh.pem: No such file or directory

見てみると確かにdh.pemがない。

もう一回やるがやっぱりできない。

ディレクトリを変えてカレントディレクトリに作ったりしても、できない。

調べると、opensslのコマンドオプションの書き方がバージョンにより変わったらしい。

https://iww.hateblo.jp/entry/20191109/dhparam
# openssl dhparam -out /etc/dovecot/dh.pem 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.............+.................
(略)

# ls -l
合計 32
drwxr-xr-x. 2 root root 4096  5月  7 10:35 conf.d
-rw-r--r--. 1 root root  424  5月  7 10:47 dh.pem
-rw-r--r--. 1 root root 4507  5月  7 10:18 dovecot.conf

dh.pemができた!

dovecotを再起動する。

# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-05-07 10:48:33 JST; 10s ago
     Docs: man:dovecot(1)
           http://wiki2.dovecot.org/
  Process: 1271015 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
  Process: 1271512 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
 Main PID: 1271518 (dovecot)
    Tasks: 4 (limit: 4993)
   Memory: 5.2M
   CGroup: /system.slice/dovecot.service
           tq1271518 /usr/sbin/dovecot -F
           tq1271521 dovecot/anvil
           tq1271522 dovecot/log
           mq1271523 dovecot/config

 5月 07 10:48:33 god systemd[1]: Started Dovecot IMAP/POP3 email server.
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: 
 ssl_dh_parameters_length is no longer needed
 5月 07 10:48:33 god dovecot[1271518]: master: Dovecot v2.3.8 (9df20d2db) 
 starting up for imap, pop3
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: 
 ssl_dh_parameters_length is no longer needed

ssl_dh_parameter_lengthは必要ないようだ。

warningとかはまだ出てるけど、とりあえず動いたっぽい。

iphoneのメールアカウント設定で incoming serverのsslを有効にする。

verifyでサーバ証明書の警告がでた。

continueをタップする。

メールを送ってみる。

受信できた!

これで送受信ともにssl化できた!

2021/04/29

SELinux始めました

 SELinuxなんか無効にするのが当たり前となって10年くらいたった。(自分の中で)

さくらのVPSも、conohaのVPSも、SELinuxはデフォルトで無効じゃないか?

自分で無効にした覚えがないから。


初めてCentOSをさわった頃、たしか4か5の頃、なんかおかしいなと思ってSELinuxを無効にしたらうまくいった、ということがあって、そのうち最初から無効にするようになった。

私がLinuxを使うのはほとんどが実験や検証的な場合だったのでそれでよかった。


だが、セキュリティについていろいろとうるさくなってきた昨今、

「めんどくさいからオフる」

という思考回路を改めた方がいいのでは?と感じている。


そこで、とりあえず自分が使っているcentos8のSELinuxを有効にしてみた。


参考

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-enabling_and_disabling_selinux


いまSELinuxが有効かどうかは

getenforce

でわかる。

disabled

になっている。

Enforcingだと有効、Permissiveだとポリシーをチェックするが動作は止めない、disabledだとポリシーもチェックしない無効な状態である。

enforcing/permissiveの切り替えは setenforceコマンドでできるが、

disabledにする、disabledから再度有効にするには、

/etc/selinux/config

を書き換える必要がある。

有効にするなら

SELINUX=enforcing

上記のRedHatの情報を見ると、SELinuxが無効の状態から有効にするときにはいったんpermissiveにして再起動し、ログをチェックして問題がないことを確認してからenforcingにする、と書いてあった。


また、必要なSELinuxのパッケージをインストールしておく必要がある。

(私の場合は事前になんでもかんでも突っ込んでいた)


その通りにやってみると、私の場合sshdに関する以下のようなログが記録された。

Apr 29 03:03:12 god setroubleshoot[1550]: 
SELinux is preventing /usr/sbin/sshd from name_bind access 
on the tcp_socket port xxxxx. 
For complete SELinux messages run: 
sealert -l 78b09f6f-3440-421f-976d-55edb0af1088

port xxxxx の xxxxx は実際には数字が記録されていて、この数字はsshで使用するポートをデフォルトの22から変更したポート番号である。

「SELinuxが有効だとsshのポート変えられないのか!じゃあ無効にしよう!」

ではなく、

SELinuxの設定でもsshで使用するポートを変更あるいは追加すればよいのだ。

semanage port --list

で現在の設定が表示される。

sshでgrepすると

# semanage port --list | grep ssh
ssh_port_t     tcp      22

追加するには

# semanage port --add --type ssh_port_t --proto tcp xxxxx

dnssecはじめました(2)

参考

https://www.nic.ad.jp/ja/dns/dnssec/dnssec-startup-guide.html

centos8で

/home/dnssec

というフォルダを作り、そこへ移動

ZSK (Zone Signing Key) の生成

# dnssec-keygen -a RSASHA256 -b 1024 -n ZONE monqy.net
Generating key pair............................+++++ ............................+++++ 
Kmonqy.net.+008+47608

KSK (Key Signing Key) の生成

# dnssec-keygen -a RSASHA256 -b 2048 -n ZONE -f KSK monqy.net
Generating key pair..........................................................+++++ ...........+++++ 
Kmonqy.net.+008+36227
zoneファイルのあるフォルダへ移動
# cd /var/named

zoneファイルに署名

# dnssec-signzone -S -K /home/dnnssec/ monqy.net.zone
Fetching ZSK 31795/RSASHA256 from key repository.
Fetching KSK 3160/RSASHA256 from key repository.
Verifying the zone using the following algorithms: RSASHA256.
Zone fully signed:
Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked
                      ZSKs: 1 active, 0 stand-by, 0 revoked
monqy.net.zone.signed

zoneファイルの後ろに ".signed"がついたファイル "monqy.net.signed" ができる。

前回のエントリではゾーンファイル名に.zoneを付けていたが、 今回はドメイン名をそのままゾーンファイル名にした。 (なんか.zoneがついてるとうまくいかなかった気がしたが気のせいかもしれない)

これはテキストファイルで中身を見ることができるが、 RRSIG, NSEC, DNSKEYなどが追加されているのがわかる。

そして /etc/named.conf のゾーンファイル名を、 署名付きのものに変更して、namedを再起動する。

zone "monqy.net" {
        type master;
        file "monqy.net.signed";
};
で、dig
# dig @localhost monqy.net DNSKEY +dnssec +multi

とやると、なにやらずらずらと引ける。

この後、DSレコードを上位サーバに登録する必要があるらしい。

参考にしたサイトだと「DSレコードをJPNICに登録します」とあるが、 これは例がJPNICの管理しているIPアドレスの逆引きゾーンだからで、 私がやっている .net のドメインだとどこになるのか?

後で調べます。

2021/04/28

dnssecはじめました(1)

 dnssecについて勉強しているが実感がわかないので実際に設定してみようと思った。

vpsを2台持っているので、まずはそれぞれにbindをインストールする。


1台はcentos8、もう一台はUbuntu 18.04.5 LTS

bindについて調べていたら、centos8が今年で終わるということを知った。


まあなんかしらの後継が出るのだろうから、それはさておき


centosとubuntuでbindのインストール・設定方法が違うのでまずそれを書く。


まずcentos8

# rpm -q bind bind-chroot bind-utils
パッケージ bind はインストールされていません。
パッケージ bind-chroot はインストールされていません。
bind-utils-9.11.20-5.el8_3.1.x86_64

# dnf install bind bind-chroot bind-utils

(略)

基本設定

# cat /etc/named.conf

options {
        listen-on port 53 {
                                127.0.0.1;
                                xx.xx.xx.xx;
        };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     {
                        localhost;
                        yy.yy.yy.yy;
        };

recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};




zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "monqy.net" {
        type master;
        file "monqy.net.zone";
};

dnssec-enable yes; dnssec-validation yes; がデフォルトで書いてある。

デフォルトからの変更箇所

まずlistenするipアドレス。xx.xx.xx.xxは自身のIPアドレス。

        listen-on port 53 {
                                127.0.0.1;
                                xx.xx.xx.xx;
        };

queryを許可するアドレス。とりあえず確認のため、localhostともう一台のbindを動かすサーバーのIPアドレスyy.yy.yy.yyだけを許可する。

        allow-query     {
                        localhost;
                        yy.yy.yy.yy;
        };

zoneファイルの情報。こっちをmasterにする。

zone "monqy.net" {
        type master;
        file "monqy.net.zone";
};

zoneファイル。ns01.monqy.netが自身のfqdnである。 参考にした情報だと、fqdnのAレコードとホスト名のみのAレコードが両方あったのでとりあえずマネする。

# cat /var/named/monqy.net.zone
$TTL 3600
@       IN      SOA     ns01.monqy.net. root.monqy.net. (
        2021042801      ;Serial
        3600            ;Refresh
        300             ;Retry
        360000          ;Expire
        86400   )       ;Negative

                        IN      NS      ns01.monqy.net
ns01.monqy.net          IN      A       xx.xx.xx.xx
ns01                    IN      A       xx.xx.xx.xx
www2                    IN      A       xx.xx.xx.xx
www3                    IN      A       yy.yy.yy.yy

named-checkconfと named-checkconf -zをやって設定に問題がないことを確認。

# named-checkconf
(問題がなければ何もでない)


# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone monqy.net/IN: loaded serial 2021042801

firewallについては省略。 queryを許可したyy.yy.yy.yyからdigで名前解決できることを確認する。

~$ dig @xx.xx.xx.xx www2.monqy.net

(略)
;; ANSWER SECTION:
www2.monqy.net.         3600    IN      A       xx.xx.xx.xx
(略)

今度はubuntu。パッケージ名(だっけ?)がcentosと違う。

sudo apt-get install bind9

ubuntuの方は、named.confの中にincludeが書いてあって、設定ファイルが分かれている。

/etc/bind/named.conf.options
/etc/bind/named.conf.local
/var/cache/bind/monqy.net.zone ※作る

/etc/bind/named.options は、listen-onとallow-queryを書く。

$ sudo cat /etc/bind/named.conf.options
[sudo] password for clebriz:
options {
        directory "/var/cache/bind";

        listen-on port 53 { localhost; yy.yy.yy.yy; };
        allow-query { localhost; xx.xx.xx.xx; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

/etc/bind/named.conf.local は、zone情報を書く。自身をslaveとして、masterのIPアドレスを書く。

ゾーンファイルはmasterからコピーされることになると思う。masterと同じ名前でいいと思うが、一応変えておく。

$ sudo cat /etc/bind/named.conf.local
zone "monqy.net" IN {
        type slave;
        file "monqy.net.slave.zone";
        masters { xx.xx.xx.xx; };
};

/var/cache/bind/monqy.net.slave.zone がゾーンファイル。

これはmasterからコピーされるので中身はなくてもいいのか?でも動作確認のため書いておく。

(後でゾーンファイルの中身を見ようとcatとかすると文字化けして表示できない。これは直接見ちゃいけないファイルなのか?)

bindを起動する。

sudo systemctl enable bind9
sudo systemctl start bind9
sudo systemctl status bind9

statusを見てみると... 動いてはいるのだが、パーミッションがなくてzoneファイルを更新できないというメッセージが。

sudo systemctl status bind9
(略)
zone monqy.net/IN: transfer: could not set file modification time of 'monqy.net.slave.zone': permission denied
(略)

chownでownerとグループを bindに変える。

$ sudo chown bind:bind /var/cache/bind/monqy.net.slave.zone
$ ls /var/cache/bind/ -l
total 16
-rw-r--r-- 1 bind bind 821 Apr 28 02:35 managed-keys.bind
-rw-r--r-- 1 bind bind 512 Apr 28 02:35 managed-keys.bind.jnl
-rw-r--r-- 1 bind bind 525 Apr 28 02:33 monqy.net.slave.zone

dnssec-validation auto; という設定があるが、dnssec-enable yes; は、ない。


$ sudo cat /etc/bind/named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";


$ sudo cat /etc/bind/named.conf.local
zone "monqy.net" IN {
        type slave;
        file "monqy.net.slave.zone";
        masters { xx.xx.xx.xx; };
};


$ sudo cat /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        listen-on port 53 { localhost; yy.yy.yy.yy; };
        allow-query { localhost; xx.xx.xx.xx; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

dnssec-enable yes; を書くだけじゃダメだよね。鍵を作ったり署名したりしないと... (続く)

2020/06/06

さくらのVPSにcentos8をインストールして最初にしたこと

まず、さくらのVPSのコントロールパネルで、「パケットフィルタ」というファイアウォール的な設定があったのでSSH(カスタム)とWEBを開放したのだが、
これって、centosのfirewallのさらに外側の設定だよね?

二重管理になるから嫌だな.... 

でも、開放ポートを設定するようになっているから、
centosのFirewallで設定するようにするなら全開放にするってことか。
それもヤダな....

まあ、あとで考える。


さて、やったこと。

hostnameの変更

hostnamectlコマンド

sshd.confの設定変更
・ポート番号変更
・PermitRootLogin を noに

httpdのインストール(dnfで)


python3は最初から入っているのかと思ったら入ってなかった。
(たしかconohaは入ってた)

python3のインストール(dnfで)

python3とpip3を、それぞれ「python」「pip」で呼べるように変更

・sudo alternatives --config python を実行し、python3を選ぶ
・sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

コントロールパネルで、OS再インストールしたら「帯域制限中」と表示されていたのに気づいたのだがいつのまにか消えた。
OSをインストール直後はこうなるのかな。

2020/02/15

postgresqlをインストールしテーブルにデータを登録するまで(postgresql on CentOS8)

インストール

# dnf install postgresql

サーバーをインストール

# dnf install postgresql-server


初期化

# postgresql-setup initdb


設定ファイル変更
# cd /var/lib/pgsql/data/

デフォルト設定をバックアップ
# cp postgresql.conf postgresql.conf.org

# vi /var/lib/pgsql/data/postgresql.conf

最後の行に1行追加

  ....
  # CUSTOMIZED OPTIONS
  #------------------------------------------------------------------------------
  # Add settings for extensions here
  listen_addresses = '*'


もう一個設定ファイル変更

# cd ../data
# pwd
/var/lib/pgsql/data

# cp pg_hba.conf pg_hba.conf.org
# vi pg_hba.conf

以下のように変更
# cat pg_hba.conf

  # PostgreSQL Client Authentication Configuration File
  # ===================================================
 local   all     all                     trust
  host    all     all     127.0.0.1/32    trust
  host    all     all     ::1/128         trust




postgresqlを再起動

# systemctl restart postgresql

active(running) になる。

# systemctl status postgresql

● postgresql.service - PostgreSQL database server

   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)

   Active: active (running) since Sat 2020-02-15 13:58:56 JST; 1s ago

  Process: 14332 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
(以下略)


接続

# psql -U postgres -h 127.0.0.1 -w
psql (10.6)
Type "help" for help.

postgres=#

^Zで抜ける


パスワード変更

# psql -U postgres -c "ALTER ROLE postgres WITH PASSWORD 'hogehoge'"
ALTER ROLE

データベース作成


#psql -U postgres -W -c "CREATE DATABASE my_db";
Password for user postgres:

CREATE DATABASE

データベースを指定して接続

psql -U postgres my_db
my_db=#

Users というテーブルを作る

my_db=# create table Users (
my_db(#   userid         char(032)     primary key,
my_db(#   fullname       char(100),
my_db(#   phonenum       char(11),
my_db(#   postal         char(7),
my_db(#   created        timestamp,
my_db(# active boolean);
CREATE TABLE

my_db=#

確認

my_db=# \d
         List of relations
 Schema | Name  | Type  |  Owner
--------+-------+-------+----------
 public | users | table | postgres

(1 row)



テーブル定義を表示



my_db=# \d Users

                          Table "public.users"
  Column  |            Type             | Collation | Nullable | Default
----------+-----------------------------+-----------+----------+---------
 userid   | character(32)               |           | not null |
 fullname | character(100)              |           |          |
 phonenum | character(11)               |           |          |
 postal   | character(7)                |           |          |
 created  | timestamp without time zone |           |          |
 active   | boolean                     |           |          |
Indexes:
    "users_pkey" PRIMARY KEY, btree (userid)


テーブルにレコードを追加

my_db=# INSERT INTO Users(userid,fullname,created) VALUES ('john','John Lennon', current_timestamp);

INSERT 0 1

my_db=# INSERT INTO Users(userid,fullname,created) VALUES ('paul','Paul McCartney', current_timestamp);

INSERT 0 1


テーブルのレコードを表示



my_db=# select * from Users;

   userid   |   fullname      | phonenum | postal |     created                | active
------------+-----------------+----------+--------+----------------------------+--------
 John       | John Lennon     |          |        | 2020-02-15 14:23:36.832459 |
 monqy      | Paul McCartney  |          |        | 2020-02-15 14:23:53.176765 |
(2 rows)


※実際は項目長の長さだけ表示されるので折り返して汚くなったが上記は見やすく整形してある。



とりあえず一つのテーブルが作成できた。

今度はこのDBの内容をCGIで表示してみる。
そして登録、修正、削除ができるようにする。

2020/01/31

ConoHaのVPS

さくらのVPSを1台借りていて2つのドメインで使用しているのだが、

やっぱり物理的に(VPSだから本当は物理的にではないが)2台ほしくなってきた。

さくらのVPSには何の不満もないのだが、VPSってほかにもないのかなと調べてみたら、
なんとConoHaというサービスの利用者はさくらより多いということを知った。

てっきりVPSといえばさくらだと思っていたのだが。

サービス内容をざっと見したところさくらとそんなに違うところはない。

初期費用がない、特定の用途向けのパッケージみたいなものがある、
というのが気づいたところ。

OSはCentOS8にした。去年リリースされたそうだ。

ようやくCentOS7に慣れたところだが、きっとこれから使うことになると思うので
勉強を兼ねて。

6→7 ほどの違いはないっぽい。

yumがdnfというものになっているそうだが、yumも使える。

yumはpython2ベース、dnfはpython3ベース。

python2と3のゴタゴタは嫌だったのでこっちの方がいい。