Symfoware

Symfowareについての考察blog

Ubuntu Server 16.04でLXDを使用しコンテナを起動する

LXCは知っていたのですが、LXCをより便利に利用するLXDというコンテナ管理ソフトがあるようです。
https://linuxcontainers.org/ja/

仮想環境(KVM)にインストールしたUbuntu Server 16.04で動かしてみます。
Ubuntu Server 16.04を仮想環境(KVM)にインストール
Ubuntu Server 16.04 固定IPへの変更とSSH接続の有効化


こちらのドキュメントを参考にしました。
LXD とコマンドラインツールのインストール
Ubuntu 16.04 LTSでLXD 2.0をセットアップして使ってみる
Ubuntu 15.04とLXDではじめるコンテナ型仮想化



LXDのインストール



Ubuntu Serverにはデフォルトでインストールされています。
Ubuntuの場合は、以下のコマンドでインストールできる模様。


$ sudo apt-get install lxd





「lxd --version」でバージョンを確認すると、2.0.9でした。


$ lxd --version
2.0.9




「lxc list」でコンテナのリストを表示してみると、まだなにも登録されていないことがわかります。



$ lxc list
クライアント証明書を生成します。1分ぐらいかかります...
初めて LXD を使う場合、sudo lxd init と実行する必要があります
初めてコンテナを起動するには、"lxc launch ubuntu:16.04" と実行してみてください。

+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+





lxdを使用するには、initを実行し初期化が必要です。
初めて使ってみるので、すべてデフォルト値を指定しました。


$ sudo lxd init
Name of the storage backend to use (dir or zfs) [default=dir]: dir
Would you like LXD to be available over the network (yes/no) [default=no]? yes
Address to bind LXD to (not including port) [default=all]: all
Port to bind LXD to [default=8443]: 8443
Trust password for new clients:
Again:
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes
Warning: Stopping lxd.service, but it can still be activated by:
lxd.socket
LXD has been successfully configured.



インストール中、こんなウィザードが表示されます。
ブリッジネットワークを構成。

IPアドレスは10.1.216.1(自動設定)
DHCPで10.1.216.2からIPアドレスをコンテナに付与しています。

746_01.png

746_02.png

746_03.png

746_04.png

746_05.png

746_06.png

746_07.png

746_08.png

746_09.png

746_10.png

746_11.png







コンテナの起動



公式に用意されているコンテナはこちらで確認できるようです。
Image server for LXC and LXD


コマンドで、「debian」を含むコンテナを検索してみます。


$ lxc image list images: debian
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
|             ALIAS             | FINGERPRINT | PUBLIC |             DESCRIPTION             | ARCH | SIZE |         UPLOAD DATE         |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie (3 more)         | 35b3eca69f19 | yes    | Debian jessie amd64 (20170422_22:42)    | x86_64 | 94.15MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/arm64 (1 more)    | a1196b967153 | yes    | Debian jessie arm64 (20170422_22:42)    | aarch64 | 87.71MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/armel (1 more)    | 80e7cd64d97e | yes    | Debian jessie armel (20170422_22:42)    | armv7l | 88.60MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/armhf (1 more)    | fe34f427afdd | yes    | Debian jessie armhf (20170422_22:42)    | armv7l | 89.12MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/i386 (1 more)     | c9fcff283eab | yes    | Debian jessie i386 (20170422_22:42)     | i686    | 96.65MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/powerpc (1 more) | 9c007f097a1d | yes    | Debian jessie powerpc (20170422_22:42) | ppc     | 89.03MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/ppc64el (1 more) | 5c93e2b12f00 | yes    | Debian jessie ppc64el (20170422_22:42) | ppc64le | 90.08MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/jessie/s390x (1 more)    | 8f24affc36c6 | yes    | Debian jessie s390x (20170422_22:42)    | s390x | 91.84MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid (3 more)             | 5cb6cea39fa9 | yes    | Debian sid amd64 (20170422_22:42)     | x86_64 | 97.38MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/arm64 (1 more)     | 40d2daf78f71 | yes    | Debian sid arm64 (20170422_22:42)     | aarch64 | 90.71MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/armel (1 more)     | 8f3bf64d331d | yes    | Debian sid armel (20170422_22:42)     | armv7l | 91.28MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/armhf (1 more)     | e192b3cd6afe | yes    | Debian sid armhf (20170422_22:42)     | armv7l | 92.15MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/i386 (1 more)        | 64a9baa48928 | yes    | Debian sid i386 (20170422_02:26)        | i686    | 98.56MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/powerpc (1 more)     | 8980ff4f9df3 | yes    | Debian sid powerpc (20170422_22:42)     | ppc     | 91.28MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/ppc64el (1 more)     | 5cbe9a11e935 | yes    | Debian sid ppc64el (20170422_22:42)     | ppc64le | 92.63MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/sid/s390x (1 more)     | 1dfb1dd5e40d | yes    | Debian sid s390x (20170422_22:42)     | s390x | 93.33MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch (3 more)         | 50816ed7025f | yes    | Debian stretch amd64 (20170422_22:42) | x86_64 | 95.97MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/arm64 (1 more) | c5a85b03c3d6 | yes    | Debian stretch arm64 (20170422_22:42) | aarch64 | 89.52MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/armel (1 more) | 955ac7f1b343 | yes    | Debian stretch armel (20170422_22:42) | armv7l | 90.01MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/armhf (1 more) | 2a45be6a2634 | yes    | Debian stretch armhf (20170422_22:42) | armv7l | 90.85MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/i386 (1 more)    | 366f28d5ce58 | yes    | Debian stretch i386 (20170422_22:42)    | i686    | 97.17MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/powerpc (1 more) | cc77737cc1d8 | yes    | Debian stretch powerpc (20161104_22:42) | ppc     | 101.72MB | Nov 4, 2016 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/ppc64el (1 more) | 64e897916a1b | yes    | Debian stretch ppc64el (20170422_22:42) | ppc64le | 91.33MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/stretch/s390x (1 more) | b319d5bee779 | yes    | Debian stretch s390x (20170422_22:42) | s390x | 92.11MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy (3 more)         | bee2e41feb7e | yes    | Debian wheezy amd64 (20170422_22:42)    | x86_64 | 86.21MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy/armel (1 more)    | 3b72b19839cc | yes    | Debian wheezy armel (20170422_22:42)    | armv7l | 82.12MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy/armhf (1 more)    | c1a33162cd35 | yes    | Debian wheezy armhf (20170422_22:42)    | armv7l | 80.43MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy/i386 (1 more)     | 3aa49ba395ec | yes    | Debian wheezy i386 (20170422_22:42)     | i686    | 87.36MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy/powerpc (1 more) | 4ba717e1f7cf | yes    | Debian wheezy powerpc (20170422_22:42) | ppc     | 83.15MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+
| debian/wheezy/s390x (1 more)    | 2f06421a926d | yes    | Debian wheezy s390x (20170422_22:42)    | s390x | 85.98MB | Apr 22, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+-----------------------------------------+---------+----------+-------------------------------+





debian/jessieを起動してみることにします。

書式は


$ lxc launch images:[使用するイメージ名] [名前]




debian/jessieをmy-debian8というコンテナ名で起動してみます。
初回起動は、イメージのダウンロードが行われるため、多少時間がかかります。


$ lxc launch images:debian/jessie my-debian8
my-debian8 を作成中
my-debian8 を起動中





起動後、しばらく待って一覧を表示


$ lxc list
+------------+---------+---------------------+------+------------+-----------+
|    NAME    | STATE |        IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+------------+---------+---------------------+------+------------+-----------+
| my-debian8 | RUNNING | 10.1.216.221 (eth0) |     | PERSISTENT | 0         |
+------------+---------+---------------------+------+------------+-----------+




IPアドレスが付与されています。
pingを売ってみると、応答がありました。


$ ping 10.1.216.221
PING 10.1.216.221 (10.1.216.221) 56(84) bytes of data.
64 bytes from 10.1.216.221: icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from 10.1.216.221: icmp_seq=2 ttl=64 time=0.077 ms
64 bytes from 10.1.216.221: icmp_seq=3 ttl=64 time=0.075 ms








コンテナの操作




$ lxc exec [コンテナ名] [コマンド]



でコンテナに対しコマンドを実行できます。

コンテナ内でコマンドを実行したい場合は、コマンドにbashを指定。


$ lxc exec my-debian8 bash




rootでコンテナ内のbashを起動します。
exitで接続を終了し、ホストに戻れます。


user@ubuntu:~$ lxc exec my-debian8 bash
root@my-debian8:~# exit
exit
user@ubuntu:~$






コンテナの停止


$ lxc stop [コンテナ名]




コンテナの削除


$ lxc delete [コンテナ名]




停止しているコンテナの起動


$ lxc start [コンテナ名]




--helpでオプションの詳細が確認できます。


$ lxc --help







【参考URL】

LXD とコマンドラインツールのインストール
Ubuntu 16.04 LTSでLXD 2.0をセットアップして使ってみる
Ubuntu 15.04とLXDではじめるコンテナ型仮想化
Image server for LXC and LXD

関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/04/23(日) 18:56:52|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu Server 16.04 固定IPへの変更とSSH接続の有効化

Ubuntu Serverをインストールしてみました。
Ubuntu Server 16.04を仮想環境(KVM)にインストール

IPアドレスをDHCPで取得しているのですが、固定IPに変更したいと思います。
合わせて、他の端末からSSH接続出来るようにしておきます。


固定IP



設定ファイルの編集


$ sudo vi /etc/network/interfaces




「iface ens3 inet dhcp」という箇所をコメント。
IPアドレスの設定を記載します。


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# 元あった設定をコメント
# The primary network interface
#auto ens3
#iface ens3 inet dhcp
# This is an autoconfigured IPv6 interface
#iface ens3 inet6 auto

# 追記した部分
auto ens3
iface ens3 inet static
        address 192.168.1.101
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 192.168.1.1






設定を反映するのは、リブートが手っ取り早いと思います。


$ sudo reboot







SSH Serverのインストール




以下のコマンドでsshサーバーがインストールされます。


$ sudo apt-get install ssh




これで、別の端末から


$ ssh [ユーザーID]@[サーバーIP]

※例
$ ssh symfo@192.168.1.101




で接続できるようになると思います。



関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/04/23(日) 17:40:40|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu Server 16.04を仮想環境(KVM)にインストール

Ubuntu Serverを仮想環境(KVM)にインストールした時のメモです。


インストーラーの取得



https://www.ubuntu.com/download/server
ここから「Ubuntu Server 16.04.2 LTS」のDownloadを実行。

745_01.png

ubuntu-16.04.2-server-amd64.isoを取得しました。





インストール



スクリーンショットを貼り付けておきます。

起動直後、言語の設定画面が表示されるので「日本語」を選択。

745_02.png


メニューの1番上「Ubuntu Serverをインストール」を選択。

745_03.png


インストーラーの途中が翻訳されていない警告が表示されますが「はい」で続行しました。

745_04.png


場所は「日本」を選択。

745_05.png


キーボードは「Japanese」を選択。

745_06.png

745_07.png


ホスト名を適当に入力。今回は「ubuntu」としました。

745_08.png


ユーザー名を入力。

745_09.png


ログイン時に使用するアカウント名を入力。

745_10.png


確認を含め、先ほど作成したユーザーに設定するパスワードを2回入力。

745_11.png

745_12.png


ディスクを暗号化するかの確認です。
今回は「いいえ」を選択しました。

745_13.png


タイムゾーンの設定です。
「Asia/Tokyo」が選択されているので、そのまま「はい」を選択しました。

745_14.png



パーティションの設定です。デフォルトで選択状態にあった
「ディスク全体を使いLVMをセットアップする」
をそのまま選択しました。

745_15.png

745_16.png


パーティショニングの確認です。
初期状態では「いいえ」が選択状態にになっているので、「はい」の選択に変更します。

745_17.png


ディスク容量の選択は、デフォルトで最大値が表示されたので
そのまま続行しました。

745_18.png


ディスクへの書き込み確認です。
ここも初期状態では「いいえ」が選択状態にになっているので、「はい」の選択に変更します。

745_19.png


プロキシサーバーの確認画面です。
プロキシサーバーは使用していないので、空白のまま続行します。

745_20.png


自動アップデートの確認です。
デフォルトの「自動的にアップデートしない」を選択しました。

745_21.png


インストールするソフトの選択です。
初期状態で選択されているチェックをすべてはずしてインストールしました。

745_22.png


ブートローダーのインストールは「はい」を選択。

745_23.png


インストール完了です。

745_24.png



リブートすると、コンソールのログイン画面が表示されます。
インストール時に指定したアカウント名とパスワードでログインできます。

745_25.png

関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/04/23(日) 17:14:54|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

PHP ftp接続でディレクトリの存在チェック

phpでftp接続。
http://php.net/manual/ja/ref.ftp.php


接続後にsampleディレクトリを作成。
そこにindex.htmlをアップロードする処理を実装したいとします。


  1. <?php
  2. // ※エラー処理は行っていません
  3. // 接続と認証
  4. $ftp = ftp_connect('192.168.1.104', 21);
  5. ftp_login($ftp, 'testuser', 'password');
  6. // sampleディレクトリを作成
  7. ftp_mkdir($ftp, 'sample');
  8. // 作成したsampleディレクトリに移動
  9. ftp_chdir($ftp, 'sample');
  10. // ファイルをアップロード
  11. ftp_put($ftp, 'index.html', 'index.html', FTP_BINARY);
  12. // 接続を閉じる
  13. ftp_close($ftp);




これ、sampleディレクトリが存在しない場合は警告無しで終了するのですが、
sampleディレクトリを作った後実行すると警告が発生します。


# php sample.php
PHP Warning: ftp_mkdir(): Can't create directory: File exists in /var/dev/php/sample.php on line 8




ftp_mkdirの先頭に「@」をつけてエラー抑止でも良いのですが、
なんとか警告無しで処理を進められないものか。

ドキュメントを見てみると、「ftp_raw」という関数があります。
http://php.net/manual/ja/function.ftp-raw.php


これを使用して、FTPコマンドを直接実行してみたら警告は発生しないのでは。
FTPのコマンド一覧

ftp_rawを実行すると、ftpコマンドの実行結果の文字列が配列で帰ってきます。


  1. array (
  2. 0 => '250 OK. Current directory is /sample',
  3. )




「CWD sample」を実行して、sampleディレクトリへの移動を試してみる。
実行結果の1行めに「250 OK」が見つかれば、sampleディレクトリは存在し、移動まで完了。

「250 OK」がなければ、まだディレクトリは存在しないので、
sampleディレクトリを作成し移動。


  1. <?php
  2. // ※エラー処理は行っていません
  3. // 接続と認証
  4. $ftp = ftp_connect('192.168.1.104', 21);
  5. ftp_login($ftp, 'testuser', 'password');
  6. // rawコマンドで移動を試す
  7. $raw_result = ftp_raw($ftp, 'CWD sample');
  8. // 移動できなかったら
  9. if (strpos($raw_result[0], '250 OK') === false) {
  10.     // sampleディレクトリを作成
  11.     ftp_mkdir($ftp, 'sample');
  12.     // 作成したsampleディレクトリに移動
  13.     ftp_chdir($ftp, 'sample');
  14. }
  15. // ファイルをアップロード
  16. ftp_put($ftp, 'index.html', 'index.html', FTP_BINARY);
  17. // 接続を閉じる
  18. ftp_close($ftp);




100点の回答ではない気がしますが、これで警告なしに処理を続行することができました。


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/04/17(月) 22:23:34|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Pure-FTPdの認証情報をMySQL(MariaDB)で管理する

セキュアが売りのFTP Server
Pure-UTPd
https://www.pureftpd.org/project/pure-ftpd

FTPに接続するユーザー情報をデータベースで管理できる模様。
今回はMariaDBに作成したテーブルでユーザー情報を管理してみます。

サーバーはDebian 8 + MariaDBは10.0.30です。


こちらのドキュメントを参考にしました。
Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On Ubuntu 14.04LTS




MariaDB



MariaDBのインストールはapt-getで行いました。


# apt-get install mariadb-server



※参考
Debian 8にMariaDB 10.1をインストールし、外部接続を許可する




MySQLサポート付きのPureFTPd



MySQLで認証を行うため、pure-ftpd-mysqlパッケージをインストールします。


# apt-get install pure-ftpd-mysql




ユーザー認証情報はMariaDBで管理しますが、接続後に実際にファイルを操作するユーザーが必要です。
「ftpdgroup」グループを作成し「ftpduser」を作成しました。

このftpduserではログインできないようにしておきます。


# groupadd -g 2001 ftpdgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpdgroup ftpduser







ユーザー管理用のテーブル作成



MariaDBにユーザー管理用のデータベース、テーブルを作成します。
ローカルのMariaDBに接続


# mysql -u root -p




pureftpdデータベースを作成。
pureftpdユーザーも合わせて作成し、接続許可を与えます。


MariaDB [(none)]> CREATE DATABASE pureftpd;
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
MariaDB [(none)]> FLUSH PRIVILEGES;





作成したpureftpdに切り替え、ユーザー情報を保存するテーブル「ftpd」を作成します。
ユーザー名「testuser」、パスワード「password」でユーザーを作成。
最後にquitで接続を終了します。


MariaDB [(none)]> USE pureftpd;

MariaDB [pureftpd]> CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=InnoDB;

MariaDB [pureftpd]> INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`)
VALUES ('testuser', '1', MD5('password'), '2001', '2001', '/var/www', '200', '200', '', '*', '10', '0');

※アップロードやダウンロード速度を無制限にするには(後で気がついた)
MariaDB [pureftpd]> INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`)
VALUES ('testuser', '1', MD5('password'), '2001', '2001', '/var/www', '0', '0', '', '*', '0', '0');


MariaDB [pureftpd]> quit





testuserには、ftp接続時「/var/www」を公開するよう指定しましたので、
このディレクトリにアクセス権を付与しておきます。


# chown -R ftpduser /var/www









PureFTPdの設定



MariaDBとの接続情報は「/etc/pure-ftpd/db/mysql.conf」に記載します。
既存のファイルをリネームしてバックアップ。
新規にファイルを作成して、設定内容を記載します。


# mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vi /etc/pure-ftpd/db/mysql.conf




/etc/pure-ftpd/db/mysql.confの内容は以下の通り


MYSQLSocket     /var/run/mysqld/mysqld.sock
#MYSQLServer     localhost
#MYSQLPort     3306
MYSQLUser     pureftpd
MYSQLPassword ftpdpass
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt     md5
MYSQLGetPW     SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")





すべてのユーザーがchrootを使うように指定
これによりPureFTPdは自分のホームディレクトリ内のすべての仮想ユーザをchrootし、ホームディレクトリ以外のディレクトリやファイルを参照することはできません。


# echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone




以下、必要であれば設定。

ログインしたユーザーのホームディレクトリが存在しない場合、自動的に作成する。


# echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir




DNSによるホスト名検索を抑止し、接続を高速化。


# echo "yes" > /etc/pure-ftpd/conf/DontResolve





今回は、ChrootEveryoneとDontResolveだけyesにしました。

ここまで設定できたらサービスを再起動。


# service pure-ftpd-mysql restart




これでテーブルに作成したとおり、ユーザー「testuser」、パスワード「password」で
ftp接続できました。




ULBandwidthとDLBandwidth



テストとして20MBの画像ファイルをアップロードしてみたのですが、90秒かかりました。


ftp> put photo3.jpg
local: photo3.jpg remote: photo3.jpg
200 PORT command successful
150 Connecting to port 49109
552-16 Kbytes used (0%) - authorized: 10240 Kb
552 Quota exceeded: [photo3.jpg] won't be saved
20123547 bytes sent in 92.43 secs (212.6082 kB/s)



遅い上にファイルが保存されない。



ULBandwidth:アップロード速度の制限
DLBandwidth:ダウンロード速度の制限
QuotaSize:アップロードしたファイルサイズの制限

という意味のようです。
制限を解除するには「0」で更新すればOK


UPDATE ftpd SET ULBandwidth = 0, DLBandwidth = 0,QuotaSize = 0 WHERE User = 'testuser';




更新後、ftpで再接続。
再度アップロードしてみると、一瞬で処理が終了しました。


ftp> put photo3.jpg
local: photo3.jpg remote: photo3.jpg
200 PORT command successful
150 Connecting to port 58102
226-File successfully transferred
226 0.029 seconds (measured here), 660.93 Mbytes per second
20123547 bytes sent in 0.02 secs (835.6765 MB/s)





【参考URL】

Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On Ubuntu 14.04LTS
Connect Pure-FTPd with MySQL and manage users
関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/04/17(月) 21:51:37|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
前のページ 次のページ