Ubuntu(Indigo) Postfix+Dovecot

とりあえず確認方法として以下の通り。他のレンサバで実行してみた。

MTA確認
alternatives –display mta

sendmailの場合、
“/etc/alternatives/mta -> /usr/sbin/sendmail.sendmail”

Postfixの場合、
“/etc/alternatives/mta -> /usr/sbin/sendmail.postfix”

もし切り替えるなら
alternatives –config mta

Courier-IMAPのバージョン
/usr/lib/courier-imap/bin/imapd –version

ドメイン取得

今回はムームーでドメイン取得。

ドメイン操作>ムームーDNS
対象ドメインの変更をクリック。

サブドメイン / 種別 / 内容
* / TXT / v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
* / A / xxx.xxx.xxx.xxx
空白 / TXT / v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
空白 / A / xxx.xxx.xxx.xxx
空白 / MX / domain.com
このような感じで登録。

Postfix

・インストール

sudo apt install postfix

Please select the mail server configuration type that best meets your needs
と表示される。

Internet Site(インターネットサイト)
を選択。

次の画面では、
The “mail name” is the domain name used to “qualify” _ALL_ mail address …
等々表示される。

ここではドメイン名を入力。

・設定

sudo vim /etc/postfix/main.cf

myhostname = ドメイン名
に変更する。

DNSで正引きできないと、宛先のメールサーバーから受信拒否されるので、DNSで正引きできる(=Aレコードが存在する)

ちなみに、完全修飾ドメイン名を指定する。
(サブドメインなどを省略しないことアドレス)

mydomain / 指定無し
指定しなければ、デフォルトで$myhostnameから算出される。

myorigin = /etc/mailname
投函されたメールがどのドメインから来るように見えるか。

inet_interfaces = all
リッスンするインターフェース。送信のみで受信しないならlocalhostでもOK。

inet_protocols = ipv4
IPv4のみ

mydestination = $myhostname
自分が宛先(最終)になる場合のドメイン名を指定する。 メールアドレスの右側が mydestinationに一致すると、そのメールは他のサーバには配送せず処理する。 そこで存在しないユーザ宛の場合、エラーになり、送信者にエラーメールを返す。

mynetworks = 127.0.0.0/8 192.168.12.0/24
メールの転送することができる(許可するクライアント)IPアドレスリストを指定する。もし0.0.0.0/0 として、ufwで25を許可すると、スパムメールの踏み台となる。

今回はVPNで固定IPなので、
mynetworks = 127.0.0.0/8 192.168.12.2
と言う感じでもOK。

home_mailbox = mail/
これで/home/ubuntu/mailにメールが入る。

ちなみに、デフォルト状態では環境にもよるが、
/var/mail/ユーザ名
にmbox形式で入る。

再起動
sudo systemctl restart postfix

起動設定
sudo systemctl enable postfix

・ポート開放

sudo ufw allow 25/tcp
sudo ufw reload

ここまでやると、ユーザー名@ドメインで受信できる。
必要ならユーザーを追加する。

・ここで試しに送信。

> sendmail -t
From: xxx
To: xxx
Subject: xxx
xxx
. (最後は.でEnter)

・サブミッションポート有効化する場合

sudo vim /etc/postfix/master.cf

コメントアウト削除(今回は不要)
submission inet n – n – – smtpd

今回はSASL認証を利用しない(クライアントとVPNでつながっているので、mynetworksでローカルアドレスのみ許可しているが、通常はSASL認証を設定する)が、通常は以下のように設定する。

-o smtpd_sasl_auth_enable=yes
SMTP Authを有効

-o smtpd_recipient_restrictions = permit_sasl_authenticated, reject
転送要求の可否(SMTP Auth で認証が確認された接続を許可)

-o smtpd_client_restrictions = permit_sasl_authenticated, reject
接続要求の可否(SMTP Auth で認証が確認された接続を許可)

・ポート開放(今回は不要)

sudo ufw allow 587/tcp
sudo ufw reload

Dovecot

ここまでデフォルトユーザーで作業してきたが、メールアドレスを作成(ユーザー作成)して作業する。

ユーザー作成
sudo useradd -s /sbin/nologin okamura

パスワード設定(ワンライナー)
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo echo okamura:${pass} | sudo chpasswd; sudo echo $pass;

ここでokamuraを作成した。

Maildir作成
/home/okamura/mail
にディレクトリを作成し、所有者を変更

sudo chown -R okamura:okamura okamura

・インストール

sudo apt install dovecot-common dovecot-pop3d
必要なら、 dovecot-imapd

・設定

etc/dovecot/conf.d
が基本ディレクトリ

IPv6をListenしない
sudo vim /etc/dovecot/dovecot.conf

listen = *

sudo vim /etc/dovecot/conf.d/10-master.conf
port = 110

プレーンテキスト認証も許可
sudo vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no

ディレクトリを設定
sudo vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/mail

起動
sudo systemctl start dovecot
sudo systemctl enable dovecot

・ポート開放

sudo ufw allow from 192.168.12.2 to any port 110 proto tcp
sudo ufw status

メーラーからの接続

VPNが192.168.12.1でクライアントが192.168.12.2

SoftEther Ubuntu/Win インストール

になっている状態で、
SMTP/POP3サーバー:192.168.12.1
ユーザーID:okamura
で接続できる。

 

Ubuntu apt(カーネルパッチ)

sudo apt upgrade
にて、以下のようなメッセージがでた。
A new version of /boot/grub/menu.lst is available, but the version installed currently has been locally modified

選択肢としては以下。

・install the package maintainer’s verstion
パッケージメンテナのバージョンをインストール

・keep the local version currently installed
現在インストールされているローカルバージョンを保持

・show the differences between the versions
バージョン間の差異を表示

・show a side-by-side difference between the versions
バージョン間の差異を並行表示

・show a 3-way difference between available vertions
利用可能なバージョン間の3種類の差異を表示

・do a 3-way merge between available versions
利用可能なバージョン間での3種類マージを行う (実験的)

・start a new shell to examine the situation
状況を検討するための新しいシェルを起動

***

・install the package maintainer’s verstion
を実行したが、一応、
sudo vim /boot/grub/menu.lst
をメモしておくと。

●旧

title Ubuntu 18.04.1 LTS, kernel 4.15.0-43-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-43-generic

title Ubuntu 18.04.1 LTS, kernel 4.15.0-43-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-43-generic

●新

title Ubuntu 18.04.5 LTS, kernel 4.15.0-123-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-123-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-123-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-123-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-123-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-123-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-122-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-122-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-122-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-122-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-122-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-122-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-43-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-43-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-43-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-43-generic

となった。

現在のカーネルのバージョン確認方法
uname -r
4.15.0-123-generic

Ubuntu(Indigo) 初期設定

IndigoにUbuntuを設定+ローカルにあるSQLiteをIndigo上のMySQLにエクスポートする実験。

インスタンス生成

ダッシュボード>インスタンス管理>インスタンス
からインスタンス生成し、起動する。

表示されているIPアドレスにTeraTermから接続

TeraTerm 起動マクロ

SSH接続

公開鍵方式でのSSH接続、OSでUbuntuを選択すると、自然とユーザー名はubuntuとなる。

公開鍵で、TeraTermとWinSCPで接続できるように設定する。

Ubuntu セキュリティ関連設定

MySQL

・インストール
sudo apt install mysql-server

(インストール後、起動+自動起動するようになっている)

・バージョン確認
sudo mysql –version

・起動、他
sudo systemctl (start|stop|restart|status)  mysql

・my.cnfを探す
sudo mysql –help | grep my.cnf
今回は
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

・(外部から接続する場合)bind-addressをコメントアウト。
ここで指定したIPアドレスのみ接続を受け付ける。接続元のIPアドレスがわかる場合は指定しても大丈夫だが、複数のIPアドレスは指定できない。

(my.cnfを変更した場合、再起動)

MySQLのrootアカウントは標準でauth_socket認証しており、パスワード設定しても、パスワード無しでログインできる。ここで少しつまづいた。
(sudo mysql -u rootとすれば入れる)

・文字コード確認
sudo mysql -u root
show variables like ‘char%’;

・文字コード変更

今は最初からutf8mb4になっている。
もしなっていない場合、mysqld.cnfに下記を追加する。

これで、utf8に変わる。

・DB作成
sudo mysql -u root
create database check_sheet character set utf8mb4;

・ユーザー作成

(外部から接続する場合ホストは%としておく)
create user ‘app_user’@’%’;

※同時にパスワードを設定する場合、
create user ‘app_user’@’%’ identified by ‘1234’;
auth_socket認証とする場合、
create user user@host identified with auth_socket;

・ユーザー削除
drop user ‘app_user’@’%’;

・ユーザー一覧
select user, host, authentication_string, plugin from mysql.user;

・権限設定
grant create,drop,alter,select,insert,update,delete on check_sheet.* to ‘app_user’@’%’;

これを実行しないと作成したユーザーでDBが操作できない。

・権限確認
show grants for ‘app_user’@’%’;

・権限削除
revoke all, grant option from ‘app_user’@’%’;

・パスワード設定

シェルからワンライナーの場合
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo mysql -u root -e “alter user ‘app_user’@’%’ identified by ‘${pass}'”; echo $pass;

あるいは、
alter user ‘app_user’@’%’ identified by ‘2345’;
set password for ‘app_user’@’%’ = ‘2345’;

MySQL SSL接続

・状態確認
show variables like ‘%ssl%’;

初回起動時に、mysql_ssl_rsa_setup()が実行され、このようにSSLが有効になっていた。MySQLのデータディレクトリ以下に生成される。

ca.pem:自己署名CA証明書
ca-key.pem:CA秘密鍵
server-cert.pem:サーバ用公開鍵
server-key.pem:サーバ用秘密鍵
client-cert.pem:クライアント用公開鍵
client-key.pem:クライアント用秘密鍵
private_key.pem:caching_sha2_password, sha256_password用秘密鍵
public_key.pem:caching_sha2_password, sha256_password用公開鍵

・データディレクトリ確認
show variables like ‘%datadir%’;

(後のコピーでも必要なので、ここで実行)
permission deniedとなるので、
sudo su
を実行する。

・データディレクトリに移動
cd /var/lib/mysql

・コピー+パーミッション変更

データディレクトリから、
client-cert.pem
client-key.pem
ca.pem (必要なら)
をダウンロードするため、先ずホームディレクトリにコピーする。
(これらのファイルはWorkbechで利用するけど、もしC#だけなら、そのまま変換するのでダウンロード不要)

今回は/var/lib/mysql/にあったので、コピーする。
cp /var/lib/mysql/client-cert.pem /home/ubuntu/client-cert.pem;
cp /var/lib/mysql/client-key.pem /home/ubuntu/client-key.pem;
cp /var/lib/mysql/ca.pem /home/ubuntu/ca.pem

・パーミッション変更

ダウンロードするのにパーミッション変更が必要なので、ホームディレクトリ(コピー先)に移動し、
chmod go+r ca.pem;
chmod go+r client-key.pem;
chmod go+r client-cert.pem

のようにする。

これでWinSCPなどでダウンロードできる。

・ユーザー戻す
su ubuntu

・SSLのユーザー状態確認
select user,host,ssl_type from mysql.user;

ssl_typeの部分を確認する。

・権限追加
alter user ‘app_user’@’%’ require X509;

・全ての権限を削除
revoke all, grant option from ‘app_user’@’%’;

requireで指定するオプションについて

・SSL
暗号化接続はサーバーのcert,keyのみなので、クライアントのcert,keyは指定しなくても大丈夫。

・X509
クライアントを証明する必要があるためクライアントにcert,keyを指定する必要がある。

ここの指定とは別にクライアント側からもオプションがある。

・DISABLED
・PREFERRED (default)
サーバが暗号化接続をサポートしている場合は暗号化接続。接続できない場合は通常の接続。
・REQUIRED
サーバー認証を行なって接続する。
・VERIFY_CA
サーバー認証とクライアント認証を行って接続する。

MySQL 外部からの接続

IPアドレスの指定がない、またはIPアドレスの指定をしたいが固定ではない場合、MySQLのbind-addressは複数指定できず、ユーザーのホスト部を頻繁に変更するのも手間なのでufwで弾くのが簡単。

sudo ufw allow 3306/tcp
sudo ufw reload

もしIPアドレスを指定したい場合

sudo ufw allow from IPアドレス to any port 3306 proto tcp
これで、特定のIPのみMySQLに接続できる。

IPアドレスが変更になったら、
sudo ufw status numbered
でNoを確認し、
sudo ufw delete 番号
(複数不可)
で該当ルールを削除し、再度、
sudo ufw allow from IPアドレス to any port 3306 proto tcp
で変更後のIPアドレスを指定する。

Apache+PHP

今回は利用しない。

Ubuntu Apache(PHP+MySQL) 設定

クライアント設定

GCP Cloud SQL(MySQL) 使い方

SQLiteをMySQLへエクスポート

とりあえず動かすためだけの設定で実際は細かく調整する必要がある

DB Browser for SQLiteにて、
ファイル>エクスポート>データベースをSQLファイルへ

・insert into にカラム名を保持
・insert文に複数行(VALUES)
にチェック。

・すべてをエクスポート
・古いスキーマを上書き(DROP TABLE した後に CREATE TABLE)
を選択して保存。(DROPしないと何度か実行するときに作成済みのテーブルが残ったりする)

それぞれデータの内容によって違うが今回は書き出したSQLファイルを下記の通り修正。

・先頭のBIGIN TRANSACTIONをSTART TRANSACTIONに変更。

・全てのダブルクォーテーションの削除。
テーブル名やカラム名がダブルクォーテーションで囲われているため。

・CREATE TABLEで型が抜けている部分にtextを追加。

・全ての型をtextに変更。
insertの部分でint等も空の部分がシングルクォーテーションになっているため

・PRIMARY KEY()を削除。
上の行末のカンマも削除

ファイルサイズが大きいので、WinSCPでアップロードし、
mysql -u root -p db名 < SQLファイル.sql
として実行。
※ちなみに、エクスポートは、
mysqldump –single-transaction -u ユーザ名 DB名 > 出力先ファイル名

Workbenchの場合、
Server>Data Import>Import from Self-Contained File
Default Target Schemaからデータベース名を選択しStart Importを実行。

ERROR 2006 (HY000) at line 1820: MySQL server has gone away
Operation failed with exitcode 1

というエラーがでた場合、
set global max_allowed_packet = 16777216;
(一時的)

インポート後にカラム1つずつデータ型を変更する。
alter table table_name modify column_name int not null primary key auto_increment;
のように処理し、
intに関しては、SQLiteで空文字が入ってしまっているとエラーがでるので、
update table_name set column_name = null where column_name = “”;
このようにした。

 

 

 

Arch Linux MariaDB

・先ずソースから挑戦

入ってなければ
pacman -S cmake
pacman -S ncurses

ソースをダウロードして解凍
tar zxvf mariadb-10.3.12.tar.gz
cd mariadb-10.3.12

cmake . -DCMAKE_INSTALL_PREFIX=/root/share/mariadb -DCMAKE_PREFIX_PATH=/var/lib/pacman/local/ncurses-6.1-6/ -DPLUGIN_TOKUDB=NO

(.はソースディレクトリでCMakeLists.txtが必要)
(DCMAKE_INSTALL_PREFIXはmake installしたときの配置先)

make -j 1
make -j install

パッと調べるとこんな感じのようだかエラーが出るので要調査。

・パッケージにて

pacman -S mariadb
mysql_install_db –user=mysql –basedir=/usr –datadir=/var/lib/mysql

Arch Linux カーネルのコンパイル

・カーネルバージョン確認

uname -r

・カーネルソース保存

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.99.tar.gz

・シンボリックリンク

ln -s linux-4.9.99 linux

・コンフィグ作成

make clean && make mrproper
今までconfigで設定した内容の消去を行う。初期化。

Archのデフォルト設定を利用する場合。
zcat /proc/config.gz > .config

あるいは、

make localmodconfig
ゲストOS内で現在ロードされているカーネルモジュール情報から
カーネルに読みこまれていないmoduleを無効にした設定をおこなう。

・その他コンフィグ

必要な場合。

make oldconfig
今あるconfig使って、新しい設定だけを問い合わせてくるというものがある。

make config
対話型のコンフィギュレータ

make menuconfig
メニューベースのコンフィギュレータ

make xconfig
Xベースのコンフィギュレータ

・コンパイル

make

今回はbcが無いとエラーがでた。

pacman -S bc

makeは時間がかかる。

・カーネルモジュールのコンパイル

make modules_install

以下にコピーされる。

/lib/modules/xxx

・bootディレクトリにカーネルをコピー

名前の前にvmlinuz-をつけるのは必須。
cp -v /usr/src/linux-4.9.99/arch/x86_64/boot/bzImage /boot/vmlinuz-linux49

・initramfs生成

mkinitcpioを利用。

mkinitcpio -k 4.9.99 -g /boot/initramfs-linux49.img

/lib/modules/xxxのソースディレクトリ名を使う。

・ブートローダーの設定

/boot/grub/grub.cfg

linux /vmlinuz-linux …
initrd /initramfs-linux.img
この部分を変更。

これで完了。

・カーネルモジュール

一覧
lsmod

内容確認
modinfo

ロード
insmod

アンロード
rmmod

ロード・アンロードの依存関係を自分で処理。
(lsmodのUsed byにて分かる)

依存関係を自動で処理する場合のロード・アンロード
modprobe xxx
modprobe -r xxx

Arch Linux VirtualBoxのディスクサイズ変更

・VirtualBox

cd C:\Program Files\Oracle\VirtualBox
VBoxManage.exe modifyhd “G:\VirtualBox VMs\Arch Linux\arch.vdi” –resize 20480

・ブートメディアで起動

・パーティーションサイズの変更
parted
p
resizepart xxx 100%

・デバイス名チェック
fdisk -l

・整合性チェック
fsck -f /dev/sda2

・ファイル
resize2fs /dev/sda2 [size]

Arch Linux 初期設定

今回はVirtualBoxにて実験

インストールメディアからブート

基本インストール

・キーボードレイアウト

loadkeys jp106

・パーティション確認

fdisk -l

・起動モード確認

ls /sys/firmware/efi/efivars

ディレクトリがあればUEFI

・パーティション作成

parted /dev/sda
mklabel msdos
mkpart primary ext4 1MiB 100MiB
mkpart primary ext4 100MiB 100%
q

・partedコマンド

p
確認

q
終了

rm
削除

・パーティションフォーマット

mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda2

・マウント

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

・リポジトリ変更

/etc/pacman.d/mirrorlist
日本のリポジトリを一番上に移動。

・ベースシステムインストール

pacstrap /mnt base base-devel

・fstab

genfstab -U /mnt >> /mnt/etc/fstab

・chroot

arch-chroot /mnt /bin/bash

・ロケール設定

/etc/locale.gen
コメントを解除
en_US.UTF UTF-8
ja_JP.UTF UTF-8

実行
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf

・キーマップ設定

/etc/vconsole.conf
追加
KEYMAP=jp106
FONT=lat9w-16

・タイムゾーン設定

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

・ハードウェアとシステムの日時同期

hwclock –systohc –utc

・ホストネーム設定

echo vm > /etc/hostname

/etc/hosts
追加
127.0.0.1 localhost.localdomain localhost vm
::1 localhost.localdomain localhost vm

・DHCP有効化

systemctl enable dhcpcd

・rootパスワード設定

passwd
123

・GRUBインストール

pacman -S os-prober grub
grub-install –target=i386-pc –recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

・起動

exit
umount -R /mnt
reboot

・復旧する場合

起動メディアでブート

mount /dev/sda1 /mnt/boot
mount /dev/sda2 /mnt
arch-chroot /mnt

・VirtualBoxを含めネットワークの設定

VirtualBoxの設定でネットワークをブリッジに。
ncpa.cplからVirtualBoxのNICを192.168.11.200に。

・WiFiオン

wifi-menu -o

有線は自動でつながる

・IPアドレス確認

networkctl status

・DHCP停止

systemctl disable dhcpcd

・IPアドレス指定

/etc/systemd/network/static.network

[Match]
Name=enp0s3

[Address]
Address=192.168.11.201/24

[Network]
DNS=192.168.11.1

[Route]
Gateway=192.168.11.1

systemctl start systemd-networkd
systemctl start systemd-resolved
必要ならenable

・SSHインストール

pacman -S openssh
systemctl start sshd

/etc/ssh/sshd_config
追加
PermitRootLogin yes
AllowUsers root

・iptables設定

この段階では特に編集しなくてもつながる。

確認
iptables -L

/etc/iptables/iptables.rules
追加
-A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT

再起動
systemctl restart iptables

・vim

pacman -S vim

・samba

必要ならユーザー追加。今回はrootで処理。

useradd -c “Guest User” -d /dev/null -s /bin/false pcguest
chown pcguest:pcguest share

作成したユーザがパスにアクセスできること。

LAN向けなので、最低限

pacman -S samba

mkdir share
chmod ugo+rwx share

設定ファイル
vim /etc/samba/smb.conf

作成されない場合ArchLinuxのサイトにサンプルがあるので写す。
あるいは直接作成。

[global]
unix charset=UTF-8
dos charset=CP932
security = user
guest account = root
map to guest = bad user

[share]
path = /root/share
writable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
share modes = yes
vfs objects = recycle

起動
systemctl start smb
systemctl start nmb
必要ならenable

動作確認
ss -ltnp

・dotnet

pacman -S dotnet-runtime
pacman -S dotnet-sdk
pacman -S aspnet-runtime

・pacmanコマンド

レポジトリ最新
-Syy

ソフト更新
-Syyu

レポジトリ検索
-Ss

ローカル検索
-Qs

インストール済みリスト
-Q

-S
インストール

-R
アンインストール

-Rs
依存も含みアンインストール

-Rns
アンイントール時のバックアップ削除

-Scc
インストール時のキャッシュ削除

-Sg
グループに含まれるパッケージ。

GUIの設定

・GUIとCUIの切り替え

Ctrl + Alt + F1,F2~

・グラフィックドライバ

環境にあわせて選択。
pacman -S xf86-video-intel
pacman -S xf86-video-amdgpu
pacman -S xf86-video-ati
pacman -S nvidia nvidia-utils

・調べ方

lspci | grep VGA

・xserver

pacman -S xorg-server
pacman -S xorg-xinit
pacman -S xorg-apps(必要なら)
pacman -S mesa(必要なら)

・キーコンフィグ

/etc/X11/xorg.conf.d/10-keyboard.conf
追加
Section “InputClass”
Identifier “Keyboard Defaults”
MatchIsKeyboard “yes”
Option “XkbLayout” “jp”
EndSection

・デスクトップインストール

pacman -S xfce4

echo “exec startxfce4” >> ~/.xinitrc

startx

・ロケール設定

/etc/locale.conf
追加(あるいは置換)
LANG=ja_JP.UTF-8

・フォントインストール

pacman -S otf-ipafont

MuuMuu + Xserver 独自ドメイン

以前、MuuMuuで取得したドメインがあって、NSをXserverに指定したまま放置していたのでこのドメインを活用する。メールはそのままXserverで、wwwのみVPSに回す。

MuuMuuでXserverのネームサーバー(ns[1-5].xserver.p)を指定する。
Xserverのサーバーパネル>ドメイン設定
から対象ドメインを追加し、
サーバーパネル>DNSレコード設定
から編集する。

AタイプのIPアドレスをVPSのアドレスに変更する。通常はやらないけど今回はアスタリスクを使ったサブドメインとwww付きを消して1つにしてしまう。

MXはホスト名と内容が同じになっているので、ホスト名をそのまま独自ドメインで、内容をXserverのドメイン(xxx.xsrv.jp)にする。

ホスト名 | A | 210.xxx.xxx.xx | 0
ホスト名 | MX | xxx.xsrv.jp | 0

これでしばらく待つと独自ドメインからSSHアクセスできる。

・DNSレコードについて

A:
ドメインとIPv4を関連づける

MX:
メールサーバー

CNAME:
別名

TXT:
ドメインに関連づけるテキスト情報。主に、メール送信の認証(SPFレコード)に利用される。受信サーバは送信もとアドレスのドメインのTXTレコードを取得しチェックする。

・SPFレコードについて

version qualifier mechanism
という組み合わせになる。

・version:
v=spf1固定

・qualifier:
mechanismでマッチしたらそのメールをどうするかを記号で指定する。

+:
正当なメール

-:
不当なメール(配信しない)

~:
不当なメール(配信する)

?:
指定なし

・mechanism:
送信もとアドレスとマッチするデータを指定する。

ip4:
送信アドレスが一致するか

mx:
MXレコードのIPアドレスと一致するか

a:
AレコードのIPアドレスと一致するか

参考として、
*.domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
ここでは、
+ip4:xxx.xxx.xxx.xxx

~all
の2つが指定されている。

例えば、XserverのDNSレコードはどうなっているか。
*.domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
domain.com/A/xxx.xxx.xxx.xxx
*.domain.com/A/xxx.xxx.xxx.xxx
domain.com/MX/domain.com

WSL2 初期設定、Sambaなど

WSL有効化

・WSLの有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

・Virtual Machine Platformの有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

上記2つはoptionalfeaturesから直接チェックしてもOK
・Linux用Windowsサブシステム
・仮想マシン プラットフォーム

WSLコマンド

・インストール済み
wsl –list

・インストールできるもの
wsl –list –online

・WSL1or2どちらで動作しているか。バージョン確認
wsl –list –ver

・WSL、カーネルのバージョン確認
wsl –version

・WSL、カーネルのバージョンアップ
wsl –update

今回は、
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
から
WSL バージョン: 2.1.4.0
カーネル バージョン: 5.15.146.1-2
になった。

***

・インストール
wsl –install -d Ubuntu-22.04

・既定に設定
wsl -s Ubuntu-22.04
(–set-default)

・削除
wsl –unregister Ubuntu-22.04

・リセット
wsl –unregister Ubuntu-22.04
wsl –install -d Ubuntu-22.04
wsl -s Ubuntu-22.04

・起動
wsl
(デフォルトのディストリビューションにログイン)

・終了(削除ではない)
wsl –shutdown
(wsl –terminate Ubuntu-22.04でも終了できる)

・DNS指定
(名前解決できないとエラーがでる)

sudo vim /etc/wsl.conf

[network]
generateResolvConf = false

を追加
(WSL起動のたびresolv.confが上書きされるため)

sudo vim /etc/resolv.conf
を開き
nameserver 8.8.8.8
または
nameserver 192.168.11.1
など、追加する。
(通常は、起動する度にリセットされる)

ポートフォワード

・wslのIPアドレス確認
wsl -e hostname -I

・ポートフォワード(ポート1つ指定)
netsh interface portproxy add v4tov4 listenport=80 listenaddress=* connectport=80 connectaddress=172.19.144.232

・確認
netsh interface portproxy show all

・削除
netsh interface portproxy delete v4tov4 listenport=80

・ファイアーウォール
netsh advfirewall firewall add rule name=”wsl” dir=in action=allow protocol=tcp localport=80,53 profile=private,public

・削除
netsh advfirewall firewall delete rule name=”wsl”

ポートフォワード(PowerShell)

 

GUI

geditなど、使う場合

sudo apt install gedit
sudo gedit /etc/samba/smb.conf
で起動できる。

Samba

・インストール

sudo apt update
sudo apt install samba

・共有フォルダ

sudo vim /etc/samba/smb.conf

[TEST]
path = /home/user
writable = yes
guest ok = yes

を追加。
([]が共有名になる。)

・パーミッション
sudo chmod o+rwx user

Samba-AD

・conf削除
sudo rm -f /etc/samba/smb.conf

・provision
sudo samba-tool domain provision –use-rfc2307 –interactivegyou

SSH接続

sudo apt update
sudo apt install openssh-server

sudo systemctl start ssh
system has not been booted with systemd as init system …
というメッセージが表示される。

通常PID1がsystemdだが、WSL2においては/initがPID1になっている模様。

sudo /etc/init.d/ssh start
sshd: no hostkeys available — exiting.
というメッセージが表示される。

sudo ssh-keygen -A

sudo vim /etc/ssh/sshd_config
から
PasswordAuthentication yes

これでTeraTermからlocalhost:22で接続できる。

・リセットする場合
アプリと機能>Ubuntu>詳細オプション>リセット
スタートメニューにあるUbuntuから起動するとユーザー名、パスワード
を決めるところから。

.NET Core SDKのインストール

https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu
を参考にする。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update; \ sudo apt-get install -y apt-transport-https && \ sudo apt-get update && \ sudo apt-get install -y dotnet-sdk-3.1

・作成方法(WSL)

アプリ作成
dotnet new console -o myapp

実行
dotnet run
(myappの中で実行)

・作成方法(Visual Studio)

Visual StudioでASP.NET Core Webのプロジェクトを作成し、プロジェクトの右クリックから発行をして、WSL側のフォルダに保存。

転送フォルダにて、
dotnet WebApplication1.dll
を実行

・自動起動

WSLなので.profileに入れてプロセスと同時に立ち上げる。

/usr/bin/dotnet /mnt/g/Dropbox/Workspace/Bash/html/WebApplication1.dll > /dev/null 2>&1 &

テスト用のWordPressをインストールする

sudo apt-get update

・Apache2

インストール
sudo apt-get install apache2

起動
sudo /etc/init.d/apache2 start

・wget
sudo apt-get install wget

・PHP
sudo apt-get install php
sudo apt-get install libapache2-mod-php
sudo /etc/init.d/apache2 restart

とりあえずこれでPHPファイルは実行できるようになる。

・MySQL
sudo apt-get install mysql-server
sudo apt-get install php-mysql

データベース作成
mysql > set password = ‘1234’;
mysql > create database wpdb;

・WordPress
sudo wget https://ja.wordpress.org/latest-ja.tar.gz

解凍
sudo tar -zxvf latest-ja.tar.gz

/var/www/html(http://localhost/解凍フォルダ名)
にブラウザからアクセス。

wp-config.php ファイルに書き込みできません。
とでる場合。

まず、
/etc/apache2/envvars
を開き、
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
の部分でユーザー名を確認し、
sudo chown -R www-data:www-data 解凍フォルダ名
を実行する。

CentOS 初期設定

基本コマンド

・起動

CentOS6まで
/etc/init.d/xxx start (7は使えない)
service xxx start (7はsystemctlにリダイレクト)
CentOS7では
systemctlとなる。

・自動起動

CentOS6まで
chkconfig xxx on | off (7はsystemctlにリダイレクト)
CentOS7では
systemctlとなる。

yumとrpm

yumの内部でrpmが呼ばれている。

利用可能かどうかと、インストール済み両方表示。
yum list xxx

パッケージを探す
yum search xxx

パッケージ情報
yum info

yum -y install php
(-yは全てyes回答)

yum remove xxx
削除する場合

アップデート
yum update
yum update xxx

インストール済みでアップデートがあるかどうか
yum check-update

SSHの設定

基本はそのまま接続できるはず、VirtualBoxに接続の場合、
設定>ネットワーク>割り当て
をブリッジアダプターに変更して、自動取得のIPに繋げれば大丈夫。

・SSHの状態確認
systemctl status sshd.service

・ファイアーウォールの確認
firewall-cmd –list-all

・rootのパスワード認証を不可にする。

PasswordAuthentication no
ChallengeResponseAuthentication no

になっているかどうか確認。

ユーザーを追加し、
PermitRootLogin no
にするかrootのままにするなら、
PermitRootLogin without-password
にする。

・ポート番号変更(49152 – 65535辺り)

firewall-cmd –add-port=49152/tcp –zone=public –permanent
firewall-cmd –reload
ポートを開ける。

systemctl restart sshd

現在の接続を切る前に接続できるか試す。

問題なければポートを閉じる。

firewall-cmd –remove-service=ssh –zone=public –permanent
firewall-cmd –reload

・再起動

systemctl restart sshd
systemctl enable sshd

firewalld

publicゾーンにnicが割り当ててあるか確認。
(active)は有効かどうかという意味ではなく、ゾーン指定しないときの対象かどうかという意味。

定義されているサービス
firewall-cmd –get-services

許可されている情報
firewall-cmd –list-all –zone=public
–list-all
–list-services
–list-port

リロード
firewall-cmd –reload

サービスを許可する
firewall-cmd –add-service=http –zone=public –permanent

許可したサービスを削除
firewall-cmd –remove-service=http –zone=public –permanent

許可するポートの追加
firewall-cmd –add-port=22/tcp –zone=public –permanent

ポートを追加。(接続元を指定する場合)
firewall-cmd –permanent –zone=public –add-rich-rule=”rule family=ipv4 source address=192.168.13.2 port protocol=tcp port=80 accept”

許可するポートの削除
firewall-cmd –remove-port=22/tcp –zone=public –permanent

定義済みサービス(編集はしない)
/usr/lib/firewalld/services

定義済みゾーンの確認
firewall-cmd –list-all-zones

アクティブなゾーンの確認
firewall
cmd getactivezones

Nicに対するデフォルトゾーンの確認
firewall-cmd –get-default-zone

NICのゾーンを変える(permanetが不要という記事ある要確認)
firewall-cmd –change-interface=lo –zone=public

NICをゾーンから削除(permanetが不要という記事ある要確認)
firewall-cmd –remove-interface=lo

だいたいの流れ。本来サービス登録なんだろうけど。

登録済みのサービスを消す。
firewall-cmd –remove-service=http –zone=public –permanent
firewall-cmd –remove-service=ssh –zone=public –permanent
firewall-cmd –remove-service=dhcpv6-client –zone=public –permanent

必要なポート追加。
firewall-cmd –add-port=54424/tcp –zone=public –permanent
firewall-cmd –add-port=80/tcp –zone=public –permanent

・ターゲット

定義にマッチしないパケットをどうするかをターゲットといい、ACCEPT,DROP,REJECT(default)がある。

ACCEPT:全て許可。
DROP:拒否ルールに該当すると拒否。
REJECT:拒否ルールに該当すると拒否。(エラーコードを返す)

vimrc

vimrcを作成し以下を記述。
Ubuntuとほぼ同じで自動補完の部分を削除。

bashrc

Ubuntuから必要最低限のみ持ってきた。

LAMP

CentOS(ConoHa) 初期設定 LAMP

.NET Core

https://www.microsoft.com/net/learn/dotnet/hello-world-tutorial
を参考にする。

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-2.1

基本アプリ

dotnet new console -o myapp
cd myapp
dotnet run

ASP.NET CoreWeb

ASP.NET CoreWebアプリケーションのプロジェクトを作成。
Webアプリケーション(モデルビューコントローラー)を選択。
HTTPS用の構成のチェックを外す。

ビルド>xxxの発行
にて作成されたファイルを転送し、転送フォルダにて、
dotnet xxx.dll
のように実行する。

その他

dotnet –info
でバージョン確認できる。

FTPの設定

VSから発行したいのでFTPを入れる。

インストール
yum install -y vsftpd

設定ファイル
/etc/vsftpd/vsftpd.conf

変更
anonymous_enable=NO
listen=YES
listen_ipv6=NO
tcp_wrappers=NO

コメントアウト削除
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
ls_recurse_enable=YES

追加
use_localtime=YES
allow_writeable_chroot=YES

起動
systemctl start vsftpd

スタートアップ
systemctl enable vsftpd

ファイアーウォール
firewall-cmd –add-service=ftp –zone=public –permanent
firewall-cmd –reload
firewall-cmd –list-all –zone=public

ユーザー制御
userlist_enableを有効にすると、userlist_denyも有効になる。
ブラックリストがデフォなので対象のユーザー名を削除のみ実行。

ブラックリスト(デフォルト)
userlist_enable=YES
userlist_deny=YES or 記述なし

ホワイトリスト
userlist_enable=YES
userlist_deny=NO

ファイルのパス(必要なら)
userlist_file=/etc/vsftpd/user_list

userlist_enableを優先度が高い禁止リスト
/etc/vsftpd/ftpusers

user_listとftpusersから対象のユーザー名を削除する。