Ubuntu セキュリティ関連設定

パスワード認証のSSHの場合

SSH

ポートの変更

sudo vim /etc/ssh/sshd_config
Port
22 > 50022

再起動
service ssh restart

ここでSSHを秘密鍵・公開鍵に切り替える。
(秘密鍵・公開鍵を作成+TeraTermから接続)

ufw

最初は有効になっていない。

IPv6無効化
sudo vim /etc/default/ufw
IPV6=no

sshを許可
sudo ufw allow 50022/tcp

起動
sudo ufw enable
(enable後は、再起動してもufwは有効になっている)

再起動する場合
sudo ufw reload

SSH

ルートを弾く(必要なら)
sudo vim /etc/ssh/sshd_config
PermitRootLogin
yes > no

パスワード認証を停止
sudo vim /etc/ssh/sshd_config
PasswordAuthentication
ChallengeResponseAuthentication
GSSAPIAuthentication

3つともnoへ

接続ユーザを限定(必要なら)
sudo vim /etc/ssh/sshd_config
AllowUsers ubuntu
追加

再起動
service ssh restart

秘密鍵・公開鍵を作成+TeraTermから接続

秘密鍵・公開鍵作成1
ssh-keygen -t rsa

ファイル名を聞かれるのでidとする。
パスフレーズも聞かれる。ここではとりあえず付けない。

公開鍵(id.pub)、秘密鍵(id)が生成される。

秘密鍵・公開鍵作成2

TeraTerm>設定>SSH鍵生成
公開鍵(id_rsa.pub)、秘密鍵(id_rsa)を保存する。

公開鍵の内容は
.ssh/authorized_keys
に記載する必要がある。
(なければ作成。他に書き込みがある場合、新しい行でも大丈夫)

パーミッション確認
chmod 600 authorized_keys

秘密鍵はローカルに保存しTeraTermのフォルダへ入れる。
名前は変えてしまってOK

再起動
service ssh restart

TeraTermから接続
connect ‘192.168.xxx.xxx:50022 /ssh /2 /auth=publickey /user=xxx /keyfile=xxx’

WinSCPから接続

WinSCPはppk形式なので、OpenSSH→ppkが必要。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
から
puttygen.exe
を保存し、実行する。

Conversions>Import keyで秘密鍵(id_rsa)を読み込み、Save private keyで保存する。

新しいサイトを作成する。
転送プロトコル:SFTP
ホスト名:IPアドレス
ポート番号:50022
ユーザー名:root
パスワード:空白

設定>SSH>認証>認証条件
の秘密鍵に、
*.ppkを指定する。

管理>名前をつけて保存
を実行。

鍵の種類

・ppk
PuTTY形式

・pem
OpenSSL形式
OpenSSH7.8未満
—–BEGIN RSA PRIVATE KEY—–

・OpenSSH形式
OpenSSH7.8以上
—–BEGIN OPENSSH PRIVATE KEY—–

・OpenSSH公開鍵
ssh-rsa

Ubuntuでの自動起動について

サービスの自動起動について(スタートアップ)

sysv-rc-conf

インストール
sudo apt-get install sysv-rc-conf

グラフィカルな設定
sudo sysv-rc-conf

自動起動できているか。
sudo sysv-rc-conf -list | grep xxx

サービスを自動起動へ設定
sudo sysv-rc-conf xxx on

自動起動オフ
sudo sysv-rc-conf xxx off

起動スクリプトの場所(sysvinit)

/etc/init.d/
の中がスクリプト実体。

/etc/の中に
rc.local (ホスト固有の設定)
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
があり、ここにシンボリックを置いておく。

これらの0~6はOSが起動しているrunlevelの時に
対応していて、そのフォルダのスクリプトが読まれる。

SoftEtherをUbuntuとWinにインストール

SoftEtherを使うとき、自動で立ち上げるのに、
/etc/rc.local
の中に
/home/okamura/vpnserver/vpnserver start
と書いてしまった。

ランレベル

0:システム停止
1:シングルユーザモード
2:ローカルマルチユーザモード(NFSなどはなし)
3:フルマルチユーザモード(テキストコンソール)
4:未使用
5:フルマルチユーザモード(グラフィカル環境)
6:システム再起動

init.d 起動と service 起動の違い
/etc/init.d/xxxx start
は環境変数が引き継がれる。
service xxxx start
はPATH,TERM,LANGが引き継がれる。

SoftEther Ubuntu/Win インストール

Windows(サーバー)

公式サイトのSoftEther VPNのダウンロードから、
・ダウンロードするソフトウェア:SoftEther VPN(Freeware)
・コンポーネントを選択:SoftEther VPN Server
・プラットフォームを選択:Windows
・CPUを選択:Intel(x86 and x64)
・SoftEther VPN Server and VPN Bridge (Ver xxx, Build xxx, rtm)
をダウンロード、インストール。

・最初の選択画面でSoftEther VPN Serverを選択。
(管理ツールも一緒インストールされる)

・管理者パスワードを設定する。
(ユーザーのパスワードとは別なので注意)

・リモートアクセス VPN サーバーを選択する。

・仮想HUB名を設定する。(VPNから特に変更の必要なし)

・ユーザーを作成する。

途中からダイナミックDNSを有効にする場合、
サーバー管理マネージャ>接続>Config編集>
DDnsClient>bool Disabled
をfalseにする。

Windows(クライアント)

公式サイトのSoftEther VPNのダウンロードから、
・ダウンロードするソフトウェア:SoftEther VPN(Freeware)
・コンポーネントを選択:SoftEther VPN Client
・プラットフォームを選択:Windows
・CPUを選択:Intel(x86 and x64)
・SoftEther VPN Client (Ver xxx, Build xxx, rtm)
をダウンロード、インストール。

・最初の選択画面でSoftEther VPN Clientを選択。
(管理ツールも一緒インストールされる)

1.新しい接続設定の作成
を実行し仮想LANカードを作成する。

2.仮想LANカードにIPを設定する。
現在利用しているのとは別ネットワークで、設定はIPアドレスとサブネットマスクだけでOK。例えば現在のネットワークが192.168.1.xだったら、仮想LANカードには192.168.2.xというように。

3.新しい接続設定の作成
を実行する。

・接続設定名:
適当に入力する。

ホスト名:
サーバーがあるLANのグローバルIP/サーバーのローカルIPというように記入する。

・ポート、ユーザー名、パスワード:
サーバーで設定した値を入力する。

・高度な通信設定:
コネクションを8本に変更する。
半二重モードを使用するにチェックする。
VPN Serverとの間の通信をSSLで暗号化するにチェックする。
再接続間隔:60秒

・サーバー証明書を必ず検証する:
をチェックする。

初回のみ、
固有証明書の登録をクリック>ファイルから証明書を読み込む
にて登録。
(ファイル実体は削除しても大丈夫)

証明書の書き出しは
サーバー管理マネージャ>接続>暗号化と通信関係の設定>エクスポート
PKCS#12にてエクスポート。

作成した接続設定の右クリックから、スタートアップ接続を指定する。

Ubuntu(サーバー)

ここではUbuntuにSambaを入れ共有フォルダにWindowsのクライアントからアクセスしてみる。

CPUを調べる
cat /proc/cpuinfo

bitを調べる
uname -a

ダウンロード
wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz

インストール
tar -zxvf softether-vpnserver-v …
cd vpnserver
make

エラーがでる場合、
sudo apt-get update
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install binutils
とするか、
sudo apt-get install build-essential
(yum groupinstall “Development Tools”)

あたりを実行。

パーミション

インストールフォルダにて
chmod 600 *

chmod 700 vpncmd
chmod 700 vpnserver

・サービス登録

インストールフォルダに
startup.sh※文末
を作成し以下を書き込み。

vim /etc/systemd/system/vpnserver.service
以下、書き込み。

起動
sudo systemctl daemon-reload
sudo systemctl start vpnserver

終了
sudo systemctl stop vpnserver

自動起動する場合
sudo systemctl enable vpnserver

管理者パスワード設定
インストールフォルダにて
./vpncmd
Select 1, 2 or 3: 1
Hostname of IP Address of Destination: localhost
Specify Virtual Hub Name: 空白
VPN Server>ServerPasswordSet
とりあえず123123abcのような簡単なパスワードにしておく。
VPN Server>exit

ポート開放
sudo ufw allow 5555/tcp
(firewall-cmd –add-port=5555/tcp –zone=public –permanent)

・Windowsのサーバー管理マネージャで作業。

起動画面にて、新しい接続設定を実行
・接続設定名:ConoHa(CentOS)
・ホスト名:IPアドレス
・ポート番号:5555
・管理パスワード:123123abc

接続すると初回接続時のみ簡易セットアップダイアログが開く。

・リモートアクセスVPNサーバー
をチェックし次へ

・仮想HUB名:VPN(そのまま)
と入力しOK。

・ダイナミックDNS機能
はそのまま変更なし。

・IPsec/L2TP/EtherIP/L2TPv3サーバー機能の設定
はチェック無し(そのまま)でOK。

・VPN Azureクラウド
VPN Azureを無効にする
をチェックしOK。

1.ユーザーを作成する
をクリックし、ユーザー名とパスワードを入力してOK。
3.ローカルブリッジの設定
ではブリッジの設定しない。
閉じる。

簡易セットアップダイアログここまで。
ここからサーバー管理マネージャの通常画面で作業。

・リスナーポートを5555以外削除

・暗号化と通信関係の設定>管理者パスワードの変更

・ローカルブリッジ設定

仮想HUBでVPNを選択する。
新しいtapデバイスとのブリッジ接続をチェックし、
vpnserver
と入力しローカルブリッジを追加を実行。

Windowsのクライアント接続マネージャで作業。

・新規仮想LANカードの作成

を実行。名前はそのままでOK。

Microsoft ネットワーク用クライアント
Microsoft ネットワーク用ファイルとプリンター共有
インターネットプロトコル4(TCP/IPv4)
のみ残し、IPアドレスを
192.168.13.2 / 255.255.255.0
としておく。

・接続設定の新規作成

接続名:ConoHa(CentOS)
ホスト名:IPアドレス
ポート番号:5555
仮想HUB名:VPN
使用するLANカード:作成したLANカード
ユーザー認証:サーバー管理マネージャで作成した値

その他の部分は、上記のWindows(クライアント)の部分を参考。

sambaのインストール

Sambaのインストール

ポート開放
sudo ufw allow from 192.168.12.2 to any app samba

これで、VPS上のsambaのフォルダにアクセスできる。

Ubuntu(サーバー) アップデート

サービス停止
sudo systemctl stop vpnserver

バックアップ
mv vpnserver vpnserver20230117

ダウンロード
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz

インストール
tar -zxvf softether-vpnserver-v …
rm softether-vpnserver-v …
cd vpnserver
make

パーミッション
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver

設定ファイルコピー
sudo cp /home/ubuntu/vpnserver20230117/vpn_server.config /home/ubuntu/vpnserver/
sudo cp /home/ubuntu/vpnserver20230117/startup.sh /home/ubuntu/vpnserver/

起動
sudo systemctl start vpnserver

startup.sh補足

・for 変数 in リスト
do 処理
done

・ip tuntap
tuntapデバイス一覧

・tuntap
仮想ネットワークデバイス。
ハードウェアではなくプログラムにデータを渡す。

・grep -q
標準出力しない

・$?
直前コマンドの結果
0:成功
1:失敗(1以外もある)

・ifconfig インタフェース IPアドレス
インタフェースにIPアドレスを割り当てる。

・ExecStartPost
ExecStartが正常終了した場合実行される。

UbuntuでのIPアドレス固定化

route -n
ゲートウェイチェック。

ifconfig
DHCPのアドレスとマスクを確認。

cat /etc/resolv.conf
DNSネームサーバ

nameserver 127.0.1.1
のように自PCになっている場合あり。

デフォルト設定だと NetworkManager が有効になっていて、
dnsmasq が DNS キャッシュサーバーとして動いている模様。

NetworkManager(ネットワーク切り替え補助)

/etc/network/interfaces
に以下を追記する。

auto wlan0
iface wlan0 inet static
address 192.168.102.15
netmask 255.255.255.0
gateway 192.168.102.1
dns-nameservers 192.168.102.1
wpa-ssid xxx
wpa-ap-scan 1
wpa-key-mgmt WPA-PSK
wpa-psk xxx

有線の場合等
auto eth1
iface eth1 inet static
address 192.168.102.100
netmask 255.255.255.0
gateway 192.168.102.1
dns-nameservers 192.168.102.1

loとはローカルループバック
autoとは自動接続

再度読み込む場合(上手く行かないことが多い)
sudo service networking restart
sudo service network-manager restart

Ubuntu キーバインド変更(xmodmap)

キーバインドはWinと同等にする。

Windows 初期設定

xmodmap -pke > .xmodmap_def
このファイルを改造してリセット用のファイルを作成する。

先頭に以下を追加
clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5

末尾に以下を追加
add shift = Shift_L
add shift = Shift_R
add lock = Eisu_toggle
add control = Control_L
add control = Control_R
add mod1 = Alt_L
add mod1 = Alt_R
add mod1 = Meta_L
add mod2 = Num_Lock
add mod4 = Super_L
add mod4 = Super_R
add mod4 = Super_L
add mod4 = Hyper_L
add mod5 = ISO_Level3_Shift
add mod5 = Mode_switch

コンソールからxevを実行してキーコードを調べる。

xmodmap -pm でモディファイを確認しておく。(xmodmap -pke で割り当ての一覧)

keycode xxx  = キーシム 1 2 3 4 5 6 となる。

1: そのキーだけを押した時の出力
2: Shiftで修飾の出力。
3: mod2で修飾の出力。
4: Shift+mod2で修飾の出力。

モディファイキーを移動する場合、モディファイから削除しておく。
remove control = Control_L等

移動後、再度追加。
add control = Control_L等

最終的に以下のように設定。

注意点として、xmodmapを繰り返すと、一度摘要された設定に再度設定するので、半角/英数などの部分でエラーになってしまう。defを一度実行すれば大丈夫。

WinがAutohotkeyで対応している部分は後々考える。

自動起動について

/etc/rc.local に xmodmap ~/.xmodmap
.profile に xmodmap .xmodmap
等に書いてもダメ。unable to open displayになってしまう。

GUI側のターミナルで、echo $DISPLAY とすると、:0 と表示されるので、
.profileには
export DISPLAY=”:0″
xmodmap .xmodmap
の2つを追記する。

これで一応SSHから入るとxmodmapが読み込まれるようだが、GUI側のターミナルを開いただけでは読まれない模様。(上記2行を/etc/profileに書いても同じ症状)
SSHで入ると、GUIの方にもxmodmapが読み込まれるようだけど。

GUIの自動起動に追加してみる。

~/.config の中に autostart フォルダを作成する。
(全ユーザ共通は /usr/share/gnome/autostart となる)
そのフォルダの中にファイルを作りファイル名は *.desktop とする。

ファイルの中に
[Desktop Entry]
Exec=xmodmap .xmodmap
Type=Application
を書いておく。

これで問題なく動いた。

作るタイミングによっては自動で.xmodmapを検出して自動起動するか確認される場合もあって気がするが、今回はなかった。

1 /etc/profile 全ユーザ共通。
2 .bash_profile なくてもいい。
3 .bash_login 上記2がない場合読まれる。なくてもいい。
4 .profile  上記2,3が無い場合読まれる。なくてもいい。
5 .bashrc シェルごとに読まれる。

Ubuntu Windows共有フォルダをマウント

sudo apt-get install cifs-utils(ないとエラー)

sudo mount -t cifs -o user=s.okamura,password=1234 //192.168.102.4/Desktop /mnt/LIFEBOOK-A
mountは自動でマウントされない。

sudo umount /mnt/LIFEBOOK-A
アンマウント

自動接続するためには、
/etc/fstab
に記述する。

//192.168.102.4/Desktop /mnt/LIFEBOOK-A cifs username=s.okamura,password=1234 0 0

1列目: デバイス名
2列目: マウントポイント
3列目: ファイルシステム
4列目: マウント時のオプション
5列目: ファイルシステムをdumpするかどうか。0はdump不要
6列目: システム起動時のfsckチェック。0はチェックを行わない。
    ルートファイルシステムでチェックは1。ルートファイルシステム以外でチェックは2。

sudo mount -a
でfstabが正しいかどうか試験できる

 

Sambaのインストール

sudo apt-get install samba

必要なフォルダ作成

mkdir xxx
chmod ugo+rwx /xxx
フルアクセスにする。

設定ファイル

sudo vim /etc/samba/smb.conf

[global]
の中に以下追記。

netbios name = xxx (現在は使えない)
unix charset=UTF-8
dos charset=CP932

security = user(デフォルト)

ゲストアカウントの許可について、
security=shareはverによってはダメなので、
代替として「security=user」+「map to guest=Bad User」の組み合わせ

securityの選択肢、
security = share パスワードだけ(Samba 3.6.0以降deprecated)
security = domain ドメインコントローラ
security = server ほかのSMBサーバにより
security = ads AD(アクティブディレクトリ)ドメインのドメインコントローラ
などある。

guest account = nobody
ゲストをどのLinuxアカウントとして扱うか。

map to guest = bad user (もともと記述済み)
不正なパスワードは拒否だが、ユーザが存在しない場合ゲストとして扱う。

map to guest
の選択肢、
Never = 不正なパスワードによるユーザーのログイン要求を拒否。
Bad User = 指定されたユーザーが存在しなかった場合はguest accountで指定したユーザーとして扱う。
Bad Password = 不正なパスワードによるユーザーのログイン要求を guest accountで指定したユーザーとして扱う。

以下を最終行に追加。

[share]
[]は共有名となる。
path = /home/xxx
writable = yes
guest ok = yes (public = yesのエイリアス)
force create mode = 0777 (作成したファイルに付加されるアクセス権)
force directory mode = 0777 (作成したディレクトリに付加されるアクセス権)
share modes = yes (他人が開いているかどうかチェック。verによっては使えない)
vfs objects = recycle (ゴミ箱機能)

ちょっと設定が違うタイプ。

[private]
path = /home/xxx
writable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
share modes = yes
vfs objects = recycle
browseable = no

・アクセスについて

sambaのアカウントとlinuxのアカウントは別管理される。sambaでフォルダごとのユーザー管理が手間の場合、browseable = noとすると見えなくはなる。

Winから手動アクセスがないのなら、フォルダのアクセス管理で対応するのもひとつ。
chmod ugo+rwx /xxx

・コンピュータ名について

現在はSMBv1が停止しているので、netbios nameでは表示できない。WSDをスクリプトで対応する方法があるらしい。

現在、SMBのどのバージョンでコネクションしているか
PowerShell>get-smbconnection
でわかる。

ちなみに、現在のPCに接続してきているセッションは、
PowerShell>get-smbsession
現在のPCが共有化しているフォルダは、
PowerShell>get-smbshare
でわかる。

起動

testparm
で設定をチェックできる。

sudo /etc/init.d/smbd start
sudo /etc/init.d/nmbd start

Win7では接続できてWin10で接続できないのでWin10で色々やってみた。

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi

を走らせてSMB1とした。

処理後、管理ツール、サービス、Workstation、依存関係から確認できる。
が、接続できない。空のパスワードがダメかと思ったがHOMEのためローカルセキュリティポリシーが使用できないため、「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduse」
の設定値を0にしてみた。が、接続できない。

そういえばsambaとは関係なく以前も同じような症状があったと思い出し、資格情報マネージャ、Windows資格情報に、ユーザー名:guest、パスワード:空白で追加してみたら繋がった。

設定

comment
共有フォルダのコメント設定。
path
共有したいディレクトリのパス名を設定。
public
パスワードなしでのアクセスを認める。securityをshare以外に設定したときは意味を持たない。
guest ok
ゲストユーザでの接続を許可。
guest only
ゲストユーザのみ接続を許可。
guest account
ゲストとして接続するときのユーザ名を設定。
read only
共有フォルダへの書き込みを許可しない。
writable
共有フォルダに書き込めるように設定。
create mask
共有フォルダに作成されるファイルのパーミッションを3桁で指定。
directory mask
共有フォルダに作成されるディレクトリのパーミッションを3桁で指定。
force user
接続したときのユーザ名を無視して、指定したユーザとして操作。ファイルを作成したときは指定したユーザの所有になる。
browseable
共有フォルダの一覧に表示させる。noを指定すると隠し共有になる。
valid users
指定したユーザだけが利用できる。
invalid users
指定したユーザは利用できない。
write list
指定したユーザだけに書き込みを許可。
hosts allow
指定したホスト(IPアドレスも可)だけに利用を許可する。
hosts deny
指定したホスト(IPアドレスも可)からの利用を拒否する。

CentOSの場合(抜粋)

インストール
yum install samba

インストール確認
systemctl status smb nmb

自動起動
systemctl enable smb nmb

自動起動確認
systemctl is-enabled smb nmb

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

ファイアーウォール追加
firewall-cmd –add-service=samba –permanent

ファイアーウォール再起動
firewall-cmd –reload

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

Vim コマンド

操作基本

u, Ctrl+R
アンドゥ、リドゥ

gg
画面トップ

G
画面末尾

w, e, b
単語単位での移動

Ctrl+V
矩形選択

Shift+j
行結合

>>,  <<
インデント

Ctrl+u, Ctrl+d, Ctrl+f, Ctrl+B
スクロール

*
カーソル下の文字を検索

: を入力後、Ctrl+R, Ctrl+W
コマンド下の文字をvimgrep

split, vsplit
:sp xxx名, :vsp xxx名
画面の分割

:e.
ファイラで開く

Ctrl-W, W
分割画面の移動

Ctrl+U, Ctrl+D
スクロール

Ctrl+i
進む

Ctrl+o
戻る

言語設定

e ++enc=utf-8
指定文字コードで開きなおす

set fenc=shift_jis
指定文字コードに変更

set encoding=utf-8
Vim自体の言語設定

:verbose highlight cursorline
設定を見れる

置き換え

:%s/old/new/gc

‘g’ を加えると行の先頭だけではなく行の中全て
‘c’ を加えると置換の度に確認を求める

sが置き換えの意味、%が現在開いているファイルの意味。

ただし、通常の正規表現とは違うエスケープが必要らしい。
以下は、#から始まる行と、改行だけの行を削除。
:%s/^#.*\n\|^\n//g

Vimgrep

正規表現のパターン

:vim {pattern} app/**
:vim {pattern} **/*
が基本の書き方。

パスの指定は、先ず検索したいパスを指定して、それに、
*
**
*.txt
**/*.txt
の組み合わせの何れかがくっつくイメージ。

| cw で渡して、 :copen で開く。

Ctrl-w, w
移動

:q
閉じる。

ちなみに通常のgrep基本

grep -rn xxx *
等記述する

G
通常正規表現

E
拡張正規表現

P
Perl互換正規表現

r
階層下のファイル内を対象

n
行番号

Vim PHPのdic作成

上記をmkvimdic.phpとして保存。

php mkvimdic.php > php.dict

php.dictが作成される。

autocmd FileType php :set dictionary=~/dict/php.dict

.vimrcに追記する。

 

レンタルサーバーにVimとctagsをインストール

レンタルサーバーは自分でコンパイルする必要がある。

./configureをするとmakefileが作られる。ここでオプションを指定することができる。

例えば、–prefix=???とすると、そこにインストールされる。

makeでコンパイルし、make installでインストールする感じ。

Vim

ctags