Skip to content

Ubuntu インストールと初期設定

インストール直後サイズ:5.1GB

セキュリティ

  • 作業用ユーザー作成
  • SSH root ログイン不可
  • SSH 公開鍵認証のみ
  • ufw fail2ban ファイアウォール
  • ローカル接続のみ許可
  • SSH ポート変更
  • 適切な所有権 755, 644

インストール

Ubuntu の初期設定

Terminal window
サブネット 192.168.100.0/24
アドレス 192.168.100.xxx
ゲートウェイ 192.168.100.1
ネームサーバー 8.8.8.8,8.8.4.4

初期設定

ルーターのポートをフォワーディング

root パスワード (付与されたものと同じでいい) 設定しておかないと一般ユーザーから su ができない

Terminal window
sudo passwd root

ユーザー追加、sudo 付与

Terminal window
adduser USER
sudo gpasswd -a $USER sudo

これは不要 ユーザーに sudo 権限 (ubuntu では不要)

Terminal window
# rootで実行
su
usermod -aG wheel [USER]
EDITOR=vim visudo

これも不要 visudo で wheel グループを有効化

Terminal window
# アンコメント
%wheel ALL=(ALL) ALL

アップデートとタイムゾーン

Terminal window
sudo apt update && sudo apt upgrade -y
sudo c set-timezone Asia/Tokyo

ウェルカムメッセージ

Terminal window
# コメントアウトする
sudo vim /etc/update-motd.d/10-help-text
sudo vim /etc/update-motd.d/50-motd-news
# またはすべて無効化 > /etc/motd のみ表示
sudo chmod -x /etc/update-motd.d/*
# ログイン時一切表示しない
touch ~/.hushlogin

ログインメッセージ

Terminal window
sudo vim /etc/ssh/sshd_config
# motdを非表示
PrintMotd no
# 最後のログインを非表示
PrintLastLog no

ログインバナー

Terminal window
sudo vim /etc/motd

アスキーアート https://patorjk.com/software/taag/#p=display&f=Fun%20Face&t=Type%20Something%20

IVrit、Varsity

Terminal window
┬┌─┐┬─┐┌┬┐╔═╗╦═╗╔═╗╔═╗╔═╗
││││ │├┬┘ ││╠═╝╠╦╝║╣ ╚═╗╚═╗
└┴┘└─┘┴└──┴┘╩ ╩╚═╚═╝╚═╝╚═╝

ホスト名変更

Terminal window
sudo echo ホスト名 > /etc/hostname
# または
sudo vim /etc/hostname

hosts も変更

Terminal window
sudo vim /etc/hosts
127.0.0.1 localhost SolarPi

IPv4 のみ

https://linuxfan.info/force-apt-ipv4-or-ipv6

apt に失敗する場合

Terminal window
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4

IP アドレスの変更

インストール時にここに記載される

Terminal window
sudo vim /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens160:
addresses:
- 192.168.100.XX/24
gateway4: 192.168.100.1
nameservers:
addresses:
- 8.8.8.8
search: []
version: 2

適用

Terminal window
sudo netplan apply

SSH

Terminal window
sudo vim /etc/ssh/sshd_config
Terminal window
PermitRootLogin no

公開鍵で SSH 接続

https://ygkb.jp/2397

Terminal window
ssh-keygen -t rsa -b 4096
# ユーザー名とホスト名を記述しない
ssh-keygen -t rsa -b 4096 -C ""
パスワードなし
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 秘密鍵確認
cd ~/.ssh
cat id_rsa

既存の公開鍵を使う場合は、~/.ssh/ に authorized_keys を置く

Terminal window
mkdir -p ~/.ssh && cd $_
cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7o4HLMvoz5rE2jx8BILBApOQNF/f+iHvMCr1d3uIfGdoFKfiJ4Ps3M8Q/sVhNb+tT+d2aF46pdpn+qtWJLb5PzaghGudL6JbStPWL84ytd5dJDz8j34AlnnNYZLEqW6MI+cPFKeZa0J31ALFKFvuecLvWmqc4u773TgY+P3mNDPdreKV9G92RrdXZabb8SbyM4RvdpUqzf2S0NHn28aHqkQSKKliT01+8mQMPOmVrqxcT5keOykhZ/+TLVanQID10St/271CJJLERkXsYIeN1sBhi8WW4hUD9dgBtHSOBwkTVpg4u/I9vmtFg1FguJWIeYaW3Kq2vmXJBeKes5sS/....
Terminal window
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

パスワードによる認証を許可しない (VM なら紛失時復旧可能)

Terminal window
sudo vim /etc/ssh/sshd_config
# アンコメント
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Terminal window
sudo sed -i "s/^#\?PasswordAuthentication.*/PasswordAuthentication no/" /etc/ssh/sshd_config
sudo sed -i "s/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/" /etc/ssh/sshd_config
sudo sed -i "s/^#\?PermitRootLogin.*/PermitRootLogin no/" /etc/ssh/sshd_config

https://tech-blog.rakus.co.jp/entry/20210512/ssh

リモート接続時の省略 クライアントに .ssh/config ファイルを作成しておく パスワードは保存できないので、公開鍵を使う

Terminal window
Host [エイリアス1]
HostName リモートのホスト名
User リモートユーザー
IdentityFile /home/[user名]/.ssh/[秘密鍵]

必要なら加える

Terminal window
Port 443

接続

Terminal window
ssh エイリアス1

root ログイン不可にする

Terminal window
PermitRootLogin no

再起動

Terminal window
sudo service ssh restart

nvim

Terminal window
# 不要
# sudo time apt install nodejs npm -y%%
Terminal window
sudo apt install neovim -y
Terminal window
mkdir -p ~/.config/nvim
Terminal window
vim ~/.config/nvim/init.vim

設定

Terminal window
runtime! color.vim
runtime! keymap.vim
runtime! option.vim
set nowritebackup
set nobackup
set virtualedit=block
set backspace=indent,eol,start
set ambiwidth=double
set wildmenu
set ignorecase
set smartcase
set wrapscan
set incsearch
set hlsearch
set noerrorbells
set shellslash
set showmatch matchtime=1
set cinoptions+=:0
set cmdheight=2
set laststatus=2
set showcmd
set display=lastline
set list
" set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
set history=10000
set expandtab
set encoding=utf-8
scriptencoding utf-8
set shiftwidth=4
set softtabstop=4
set tabstop=4
set guioptions-=T
set guioptions+=a
set guioptions-=m
set guioptions+=R
set showmatch
set smartindent
set noswapfile
set nofoldenable
set title
set number
nnoremap <Esc><Esc> :nohlsearch<CR><ESC>
syntax on
set nrformats=
set whichwrap=b,s,h,l,<,>,[,],~
" set mouse=a
hi Comment ctermfg=246
set clipboard+=unnamedplus
augroup source-vimrc
autocmd!
autocmd BufWritePost *vimrc source $MYVIMRC | set foldmethod=marker
autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC
augroup END
augroup auto_comment_off
autocmd!
autocmd BufEnter * setlocal formatoptions-=r
autocmd BufEnter * setlocal formatoptions-=o
augroup END
augroup MyXML
autocmd!
autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
augroup END
if has("autocmd")
augroup redhat
" In text files, always limit the width of text to 78 characters
autocmd BufRead *.txt set tw=78
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
endif

キーマップ https://zenn.dev/2lu3/articles/f048385af884f7

Terminal window
vim ~/.config/nvim/keymap.vim
Terminal window
let mapleader = "\<Space>"
inoremap <silent> jj <Esc>:<C-u>w<CR>
inoremap jk <Esc>
inoremap <silent> っj <Esc>:<C-u>w<CR>
nmap <silent> <Esc><Esc> :nohlsearch<CR>
nnoremap <silent> <Leader>v :vs<CR>
nnoremap <silent> <Leader>s :sp<CR>
nnoremap <silent> <Leader>h <C-w>h
nnoremap <silent> <Leader>j <C-w>j
nnoremap <silent> <Leader>k <C-w>k
nnoremap <silent> <Leader>l <C-w>l
nnoremap <silent> <Leader>h <C-w>h
nnoremap <silent> <Leader>j <C-w>j
nnoremap <silent> <Leader>k <C-w>k
nnoremap <silent> <Leader>l <C-w>l
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"

カラー管理 (配色ごと)

Terminal window
vim ~/.config/nvim/color.vim

カラー A

Terminal window
set cursorline
hi clear CursorLine
hi Normal ctermbg=235 ctermfg=255
hi lineNR ctermbg=237 ctermfg=255
hi cursorlineNR ctermbg=27 ctermfg=255
hi CursorLine ctermbg=237
hi Search ctermbg=197 ctermfg=255

プラグイン管理 vim-plug root でも必要

Terminal window
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

プラグインディレクトリ作成

Terminal window
mkdir -p ~/.config/nvim/plugged

使うプラグインを記述

Terminal window
vim ~/.config/nvim/option.vim

vim-airline:ステータスバーカスタマイズ

Terminal window
call plug#begin('~/.config/nvim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'tpope/vim-commentary'
Plug 'preservim/nerdtree'
call plug#end()
nnoremap <silent><C-e> :NERDTreeToggle<CR>

一旦 nvim 終了

root でも sh=>Pluginstall 作業をする OrangePi ではなぜか root で実行できず

Terminal window
:PlugInstall

NERDTree 使い方

Terminal window
:NERDTreeToggle
または
Ctrl + e

カラー設定

以下に .vim のカラーファイルを置く

Terminal window
~/.config/nvim/colors
Terminal window
vim ~/.config/nvim/init.vim
colorscheme XXX

Vim

nvim があるなら不要

Terminal window
vim ~/.vimrc
# root、sudo の場合
su
vim ~/.vimrc

設定 再読み込み

Terminal window
source ~/.vimrc
# root の場合
su
source ~/.vimrc

sudo の場合 root 側 の設定も変更する

まとめて設定

https://qiita.com/iwaseasahi/items/0b2da68269397906c14c

source ~/.vimrc でエラーが出ても大丈夫

Terminal window
set nowritebackup
set nobackup
set virtualedit=block
set backspace=indent,eol,start
set ambiwidth=double
set wildmenu
set ignorecase
set smartcase
set wrapscan
set incsearch
set hlsearch
set noerrorbells
set shellslash
set showmatch matchtime=1
set cinoptions+=:0
set cmdheight=2
set laststatus=2
set showcmd
set display=lastline
set list
set listchars=tab:^\ ,trail:~
set history=10000
set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
set guioptions-=T
set guioptions+=a
set guioptions-=m
set guioptions+=R
set showmatch
set smartindent
set noswapfile
set nofoldenable
set title
set number
set clipboard=unnamed,autoselect
nnoremap <Esc><Esc> :nohlsearch<CR><ESC>
syntax on
set nrformats=
set whichwrap=b,s,h,l,<,>,[,],~
set mouse=a
augroup source-vimrc
autocmd!
autocmd BufWritePost *vimrc source $MYVIMRC | set foldmethod=marker
autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC
augroup END
augroup auto_comment_off
autocmd!
autocmd BufEnter * setlocal formatoptions-=r
autocmd BufEnter * setlocal formatoptions-=o
augroup END
augroup MyXML
autocmd!
autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
augroup END
if has("autocmd")
augroup redhat
" In text files, always limit the width of text to 78 characters
autocmd BufRead *.txt set tw=78
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
endif

色設定

256 色確認 https://jonasjacek.github.io/colors/

Terminal window
hi

syntax 凡例 https://vim-jp.org/vimdoc-ja/syntax.html

Normal:一般的な文字の背景。背景をNONEにすることで全体の80%程度は透過
LineNr :Vimの左にある行数を表す数字
VertSplit:vimを縦に分割した時の分割線
Special:&などの記号
Identifier:vimrcとかでよくあるのような予約語。
Comment:コメント
Terminal window
# 通常テキスト
highlight Normal ctermbg=233 ctermfg=grey
# 行番号
set cursorline
hi clear CursorLine
highlight lineNR ctermbg=255 ctermfg=235
highlight cursorlineNR ctermbg=255 ctermfg=4

クリップボード連携

クリップボードの使える vim へ

Terminal window
sudo apt remove vim -y &&
sudo apt install vim-gtk -y

クリップボード連携設定

Terminal window
set clipboard=unnamedplus

通常モードのみ有効、マウスで選択してコピー

nginx

Terminal window
sudo apt install nginx -y

ユーザー:www-data に変更する

Terminal window
sudo chown $USER:www-data -R /var/www/html

グループを確認後、ログアウトする

Terminal window
id

パーミッションを一括変更

Terminal window
find /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +

80 ポートのみ

Terminal window
sudo vim /etc/nginx/sites-available/default

default

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html /_h5ai/public/index.php;
server_name _;
server_tokens off;
client_max_body_size 100M;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
}

SSL 443 ポート

mkcert で ホスト名の公開鍵と秘密鍵を作成 (ローカルの場合)

Terminal window
mkcert wp wp.com 192.168.100.XXX

鍵ファイルを nginx 内に作成

Terminal window
sudo mkdir /etc/nginx/ssl
# それぞれ鍵を作成 > パーミッション指定は特にいらない
sudo vim /etc/nginx/ssl/php.pem
sudo vim /etc/nginx/ssl/php-key.pem

SSL

Terminal window
listen 8090 ssl http2;
ssl on;
ssl_certificate /etc/letsencrypt/live/XXX.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/XXX.com/privkey.pem;

default の構成を変更 7.4=>8.1

server {
listen 443 ssl http2;
root /var/www/html;
index index.php index.html /_h5ai/public/index.php;
server_name _;
server_tokens off;
client_max_body_size 100M;
ssl on;
ssl_certificate /etc/nginx/ssl/php.pem;
ssl_certificate_key /etc/nginx/ssl/php-key.pem;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
}
}
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}

シンボリックリンク (default は任意のファイル名)

Terminal window
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 解除
sudo unlink /etc/nginx/sites-enabled/default

Apache のふりをする

Terminal window
error_page 403 404 500 503 = /apache_404.html;
location = /apache_404.html {
return 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p>The requested URL $request_uri was not found on this server.</p>\n<hr>\n<address>Apache/2.2.31 Server at $host Port $server_port</address>\n</body></html>";
internal;
}

エラーページ

自前 error.php の場合

error_page 404 /error.php?id=404;
error_page 403 /error.php?id=403;
error_page 401 /error.php?id=401;
error_page 403 /error.php?id=500;
error_page 401 /error.php?id=502;
error_page 401 /error.php?id=503;
location = /error.php?id=404 {
root /var/www/html;
}
location = /error.php?id=403 {
root /var/www/html;
}
location = /error.php?id=401 {
root /var/www/html;
}
location = /error.php?id=500 {
root /var/www/html;
}
location = /error.php?id=502 {
root /var/www/html;
}
location = /error.php?id=503 {
root /var/www/html;
}

ローカルの hosts

Terminal window
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
Terminal window
sudo vim /etc/hosts
192.168.100.xxx php.com

PHP 7.4

Terminal window
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
Terminal window
sudo apt update
sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip unzip -y

PHP 8.1

以下は debian で確認

Terminal window
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
curl -fsSL https://packages.sury.org/php/apt.gpg| sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/sury-keyring.gpg
sudo apt update
Terminal window
sudo apt install php8.1-fpm php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip unzip -y

MySQL

Terminal window
sudo apt install mariadb-server mariadb-client -y
sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service
sudo mysql_secure_installation
- - -
Enter current password for root (enter for none): Enterをおす
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
----
sudo systemctl restart mysql.service

MySQL テーブル作成

Terminal window
sudo mysql -u root -p
root パスワード入力
CREATE DATABASE nextcloud;
# ユーザー作成
CREATE USER 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
# データベースの権限
GRANT ALL ON nextcloud.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

ユーザーの権限 (CRUD)

Terminal window
GRANT ALL ON **.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

ユーザー作成

Terminal window
CREATE USER 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
FLUSH PRIVILEGES;
EXIT;

root 権限

Terminal window
grant all privileges on *.* to root@localhost identified by 'PASSWORD' with grant option;
FLUSH PRIVILEGES;
EXIT;

SQlite3

Terminal window
sudo apt install php7.4-sqlite3

一般ユーザー作成

Terminal window
# rootで実行
adduser ユーザー名

パスワード、所属を入力後、y で作成

sudo を付与

Terminal window
# rootで実行
gpasswd -a ユーザー名 sudo

sudo グループに入っているか確認

Terminal window
cat /etc/group | grep ユーザー名

メモ:以下のコマンドでも OK

Terminal window
sudo usermod -aG sudo ユーザー名

ファイアウォール

https://qiita.com/hana_shin/items/a630871dce209cff04f3

  • SSH 22
  • Web 80, 443
  • FTP 21
  • Rsysnc 873
  • Samba 139, 445
  • WireGuard 任意
Terminal window
sudo apt install ufw -y
Terminal window
sudo ufw enable

設定再読み込み

Terminal window
sudo ufw reload

ポート許可

Terminal window
sudo ufw allow XXX
# 範囲指定
ufw allow 1111:2222/tcp

udp の場合

Terminal window
sudo ufw allow 21/udp
sudo ufw allow 6100:6105/tcp

ルール削除

Terminal window
sudo ufw delete ルール番号

ステータス

Terminal window
sudo ufw status

ログ

Terminal window
sudo view /var/log/ufw.log

permission denied on key 'net.ipv4.tcp_sack エラー T4V の場合 エラーが出ることがあるので再起動が必要

IP アドレス、ネットワーク指定

Terminal window
# SSH22 をローカルのみ
sudo ufw allow from 192.168.100.0/24 to any port 22
Terminal window
sudo apt install ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# sudo ufw allow 873/tcp
sudo ufw allow from 192.168.100.0/24 to any port 22/tcp
sudo ufw allow from 10.0.0.0/24 to any port 22/tcp

Fail2ban

https://www.osarusystem.com/misc/fail2ban_with_ufw.html

具体的には、ログファイルに記録される内容を監視して、何度も認証に失敗しているログや、 連続アクセスしているログを見つけると、ファイアーウォールを自動的に調整して、 接続元からの不正アクセスを禁止にします。

Terminal window
sudo apt install -y fail2ban

フィルタの動作確認

Terminal window
sudo fail2ban-client status sshd

再起動

Terminal window
sudo fail2ban-client restart

ban した IP アドレスを UNBAN

Terminal window
sudo fail2ban-client set sshd unbanip XXX.XXX.XXX
Terminal window
sudo vim /etc/fail2ban/jail.local

20 秒間で 3 回ログイン失敗で 1 時間アクセス拒否

Terminal window
[sshd]
enabled = true
bantime = 3600
findtime = 20
maxretry = 3

ufw と連携 https://xnonce.com/fail2ban_ufw/

Terminal window
sudo vim /etc/fail2ban/filter.d/ufw.conf
Terminal window
[INCLUDES]
before = common.conf
[Definition]
failregex = UFW BLOCK.* SRC=<HOST> DST
ignoreregex =
Terminal window
sudo vim /etc/fail2ban/jail.local
Terminal window
[ufw]
enabled = true
filter = ufw
action = ufw
logpath = /var/log/ufw.log
bantime = -1
findtime = 3d
maxretry = 1
ignoreip = 127.0.0.0/8 ::1

WordPress

最小構成 これで動作確認した (T4V) ポート 80

server {
listen 80;
server_name 127.0.0.1;
location / {
root /var/www/html;
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}

nginx に権限を付与、更新作業に必須 以下でできる、WP ダッシュボードからはできない?

Terminal window
# 必要
sudo gpasswd -a user www-data
sudo chown -R $USER:www-data /var/www/html

または

Terminal window
sudo vim /etc/nginx/nginx.conf

パーミッションを一括で変更

Terminal window
sudo find /var/www/html -type f -exec chmod 664 {} \;
sudo find /var/www/html -type d -exec chmod 775 {} \;

SAMBA

Terminal window
sudo apt install samba -y
Terminal window
sudo vim /etc/samba/smb.conf
Terminal window
[StoragePi]
comment = Storage
path = /mnt
guest ok = no
read only = no
browsable = yes
Terminal window
sudo systemctl restart smbd

samba 用のパスワードを設定

Terminal window
sudo smbpasswd -a user

ufw でポートを開かないと使えない 139, 445

vsftpd

FTP バックアップ

ポートを 21 以外にすると外部から接続できなくなる場合ある

Terminal window
sudo apt -y install vsftpd
sudo vim /etc/vsftpd.conf

設定

Terminal window
# スタンドアロンで起動
LESTEN=YES
# run two copies of vsftpd for IPv4 and IPv6 エラーがdたら
listen_ipv6=NO
# 31行目:コメント解除 (書き込み許可)
write_enable=YES
# パーミッション ディレクトリ=755、ファイル=644
local_umask=022
# 99,100行目:コメント解除 (アスキーモード転送許可)
ascii_upload_enable=YES
ascii_download_enable=YES
# 122行目:コメント解除 (chroot 有効)
chroot_local_user=YES
# 123行目:コメント解除 (chroot リスト有効)
chroot_list_enable=YES
# 125行目:コメント解除 (chrootリスト指定)
chroot_list_file=/etc/vsftpd.chroot_list
# 131行目:コメント解除 (ディレクトリごと一括での転送有効)
ls_recurse_enable=YES
# 最終行へ追記:chroot のルートディレクトリ指定。必要なら
local_root=/var/www/html

以下は全てメモ

Terminal window
# パッシブモードでの接続を設定する場合 (不要)
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=6100
pasv_max_port=6105
# 待受時間 変更不要 (初期値300)
idle_session_timeout=300
data_connection_timeout=300

不要

Terminal window
# seccomp filter をオフ (ログインできない場合追加:基本不要)
seccomp_sandbox=NO
# ポートを変更する場合追記 (外部接続できない可能性)
listen_port=10991

FTP over SSL を有効にする場合 Cyberduck FTP-SSL 21 ポート ローカル証明書を信頼する

Terminal window
# 最後の方にあるので、一番下だけYESに
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES

必要

Terminal window
sudo vim /etc/vsftpd.chroot_list
# ユーザーを追加
storage
user
Terminal window
sudo systemctl restart vsftpd

ユーザーを追加していない場合

Terminal window
sudo passwd user

ファイアウォールを指定している場合

Terminal window
sudo ufw allow 10991/tcp

文法チェック

Terminal window
sudo /usr/sbin/vsftpd /etc/vsftpd.conf

ステータス

Terminal window
sudo service vsftpd status

接続テスト

Terminal window
telnet localhost 21
# 他のローカルサーバーから
telnet 192.168.100.55 21
telnet wasabee.net 21
# Ctrl + ] 、q で抜ける

エラー対応

530 ログインエラー 変更

pam_service_name=ftp
  • ufw ポート確認

開いているポートをチェック

Terminal window
netstat -pan|grep :21;

BackWPup

SSL をオンにするとアップロード失敗する。vsftpd でssl_enable=YESにしておく。

mDNS

https://qiita.com/m-tmatma/items/7668afea91aff4fbfa85

mDNS(=multicast DNS) を使うことによりローカル DNS サーバーを立てなくても、LAN 内の名前解決が容易に行えます。

Terminal window
sudo apt install -y avahi-daemon
sudo systemctl start avahi-daemon
sudo systemctl enable avahi-daemon

ファイアウォール 5353 ポート UDP

WebDAV

https://github.com/mar10/wsgidav

実用的でない。素直に nextcloud にしたほうがいい

8080 ポート、ユーザー認証

Terminal window
sudo apt install python3-pip -y
pip install wsgidav cheroot python-pam lxml
wsgidav --host=0.0.0.0 --port=8080 --root=/home/user --auth=anonymous
wsgidav --host=0.0.0.0 --port=8080 --root=/home/user --auth=pam-login

裏で起動

Terminal window
nohup wsgidav --host=0.0.0.0 --port=8080 --root=/home/user --auth=pam-login > /dev/null 2>&1 &

匿名で接続 nginx でリバースプロキシ