Published on

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

featured_image
Table of Contents

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

セキュリティ

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

インストール

Ubuntu の初期設定

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

初期設定

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

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

sudo passwd root

ユーザー追加、sudo 付与

adduser USER
sudo gpasswd -a $USER sudo

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

# rootで実行
su

usermod -aG wheel [USER]
EDITOR=vim visudo

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

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

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

sudo apt update && sudo apt upgrade -y

sudo c set-timezone Asia/Tokyo

ウェルカムメッセージ

# コメントアウトする
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

ログインメッセージ

sudo vim /etc/ssh/sshd_config

# motdを非表示
PrintMotd no

# 最後のログインを非表示
PrintLastLog no

ログインバナー

sudo vim /etc/motd

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

IVrit、Varsity

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

ホスト名変更

sudo echo ホスト名 > /etc/hostname

# または
sudo vim /etc/hostname

hosts も変更

sudo vim /etc/hosts

127.0.0.1 localhost SolarPi

IPv4 のみ

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

apt に失敗する場合

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

IP アドレスの変更

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

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

適用

sudo netplan apply

SSH

sudo vim /etc/ssh/sshd_config
PermitRootLogin no

公開鍵で SSH 接続

https://ygkb.jp/2397

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 を置く

mkdir -p ~/.ssh && cd $_

cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7o4HLMvoz5rE2jx8BILBApOQNF/f+iHvMCr1d3uIfGdoFKfiJ4Ps3M8Q/sVhNb+tT+d2aF46pdpn+qtWJLb5PzaghGudL6JbStPWL84ytd5dJDz8j34AlnnNYZLEqW6MI+cPFKeZa0J31ALFKFvuecLvWmqc4u773TgY+P3mNDPdreKV9G92RrdXZabb8SbyM4RvdpUqzf2S0NHn28aHqkQSKKliT01+8mQMPOmVrqxcT5keOykhZ/+TLVanQID10St/271CJJLERkXsYIeN1sBhi8WW4hUD9dgBtHSOBwkTVpg4u/I9vmtFg1FguJWIeYaW3Kq2vmXJBeKes5sS/....
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

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

sudo vim /etc/ssh/sshd_config

# アンコメント
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
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 ファイルを作成しておく パスワードは保存できないので、公開鍵を使う

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

必要なら加える

  Port 443

接続

ssh エイリアス1

root ログイン不可にする

PermitRootLogin no

再起動

sudo service ssh restart

nvim

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

設定

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

vim ~/.config/nvim/keymap.vim
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><C-w>h
nnoremap <silent> <Leader><C-w>j
nnoremap <silent> <Leader><C-w>k
nnoremap <silent> <Leader><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>"

カラー管理 (配色ごと)

vim ~/.config/nvim/color.vim

カラー A

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 でも必要

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'

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

mkdir -p ~/.config/nvim/plugged

使うプラグインを記述

vim ~/.config/nvim/option.vim

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

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 で実行できず

:PlugInstall

NERDTree 使い方

:NERDTreeToggle

または
Ctrl + e

カラー設定

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

~/.config/nvim/colors
vim ~/.config/nvim/init.vim

colorscheme XXX

Vim

nvim があるなら不要

vim ~/.vimrc

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

設定 再読み込み

source ~/.vimrc

# root の場合
su
source ~/.vimrc

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

まとめて設定

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

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

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/

hi

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

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

# 行番号
set cursorline
hi clear CursorLine
highlight lineNR ctermbg=255 ctermfg=235
highlight cursorlineNR ctermbg=255 ctermfg=4

クリップボード連携

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

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

クリップボード連携設定

set clipboard=unnamedplus

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

nginx

sudo apt install nginx -y

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

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

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

id

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

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

80 ポートのみ

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 で ホスト名の公開鍵と秘密鍵を作成 (ローカルの場合)

mkcert wp wp.com 192.168.100.XXX

鍵ファイルを nginx 内に作成

sudo mkdir /etc/nginx/ssl

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

SSL

    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 は任意のファイル名)

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

# 解除
sudo unlink /etc/nginx/sites-enabled/default

Apache のふりをする

    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

sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
sudo vim /etc/hosts

192.168.100.xxx	php.com

PHP 7.4

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
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 で確認

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
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

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 テーブル作成

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)

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

ユーザー作成

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

root 権限

grant all privileges on *.* to root@localhost identified by 'PASSWORD' with grant option;

FLUSH PRIVILEGES;
EXIT;

SQlite3

sudo apt install php7.4-sqlite3

一般ユーザー作成

# rootで実行
adduser ユーザー名

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

sudo を付与

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

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

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

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

sudo usermod -aG sudo ユーザー名

ファイアウォール

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

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

設定再読み込み

sudo ufw reload

ポート許可

sudo ufw allow XXX

# 範囲指定
ufw  allow 1111:2222/tcp

udp の場合

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

ルール削除

sudo ufw delete ルール番号

ステータス

sudo ufw status

ログ

sudo view /var/log/ufw.log

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

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

# SSH22 をローカルのみ
sudo ufw allow from 192.168.100.0/24 to any port 22
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

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

sudo apt install -y fail2ban

フィルタの動作確認

sudo fail2ban-client status sshd

再起動

sudo fail2ban-client restart

ban した IP アドレスを UNBAN

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

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

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

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

sudo vim /etc/fail2ban/filter.d/ufw.conf
[INCLUDES]
before = common.conf

[Definition]
failregex = UFW BLOCK.* SRC=<HOST> DST
ignoreregex =
sudo vim /etc/fail2ban/jail.local
[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 ダッシュボードからはできない?

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

または

sudo vim /etc/nginx/nginx.conf

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

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

SAMBA

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

samba 用のパスワードを設定

sudo smbpasswd -a user

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

vsftpd

FTP バックアップ

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

sudo apt -y install vsftpd

sudo vim /etc/vsftpd.conf

設定

# スタンドアロンで起動
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

以下は全てメモ

# パッシブモードでの接続を設定する場合 (不要)
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=6100
pasv_max_port=6105

# 待受時間 変更不要 (初期値300)
idle_session_timeout=300
data_connection_timeout=300

不要

# seccomp filter をオフ (ログインできない場合追加:基本不要)
seccomp_sandbox=NO

# ポートを変更する場合追記 (外部接続できない可能性)
listen_port=10991

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

# 最後の方にあるので、一番下だけ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

必要

sudo vim /etc/vsftpd.chroot_list

# ユーザーを追加
storage
user
sudo systemctl restart vsftpd

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

sudo passwd user

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

sudo ufw allow 10991/tcp

文法チェック

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

ステータス

sudo service vsftpd status

接続テスト

telnet localhost 21

# 他のローカルサーバーから
telnet 192.168.100.2 21

# Ctrl + ] 、q で抜ける

エラー対応

530 ログインエラー 変更

pam_service_name=ftp
  • ufw ポート確認

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

netstat -pan|grep :21;

BackWPup

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

mDNS

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

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

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 ポート、ユーザー認証

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

裏で起動

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

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