MYSQLデータベースにユーザーストレージがあるPure-FTPD

画像

以前は、FTPサーバーを複数回構成する必要があり(数分で完了 )、どういうわけかProFtpdが無条件の候補であることが判明しました。 この同志はそれほど前に問題を抱えていなかったので、彼は何か他のものを試すことに決め、後悔しませんでした



私の選択はすばらしいPure-FTPd FTPサーバーでした。

インストール後、次の一連の機能を受け取ります。







使用されている OSはFreeBSDです。 さあ、行こう! DBMS MySqlがインストールおよび構成されていることを前提としています。 ポートからPure-FTPdをインストールします(以前のアップグレード)

cd /usr/ports/ftp/pure-ftpd make install clean
      
      





次のオプションを選択しました



インストール後、デフォルトファイルから設定を作成します

 cd /usr/local/etc/ cp pureftpd-mysql.conf.sample pureftpd-mysql.conf cp pure-ftpd.conf.sample pure-ftpd.conf
      
      





メイン構成ファイルの編集

pure-ftpd.conf
#フォルダー内のすべてのユーザーをChroot`

ChrootEveryone yes



#前のオプションで「いいえ」が選択された場合、次のオプションのメンバー

#グループはchrootしません。 残りはすべてです。 したくない場合

#全員にchrootし、ChrootEveryoneとTrustedGIDのコメントを外します。

#TrustedGID 100



#顧客曲線の互換性機能を有効にする

BrokenClientsCompatibilityいいえ



#同時ユーザーの最大数

MaxClientsNumber 50



#バックグラウンドで動作(デーモン)

はい、デーモン化する



#1つのIPからの同時接続の最大数

MaxClientsPerIP 8



#すべてのクライアントコマンドを記録する場合は、これ

#ポイントは「はい」でなければなりません。 あなたも記録する必要がある場合

#サーバー応答、そしてこのアイテムを複製します。

VerboseLog no



#クライアントがある場合でも、ピリオドで始まるファイルを表示するかどうか

#明らかに、オプション「-a」を使用してこれを行う必要があるとは言わない。

DisplayDotFilesはい



#認証されたユーザーを許可しない-このFTP

#匿名のお客様のみ。

匿名のみ



#匿名を拒否-登録ユーザーのFTPを最新にします。

匿名



#syslogツール(auth、authpriv、daemon、ftp、security、user、local *)

#デフォルト-「ftp」。 「なし」-ロギングを無効にします。

SyslogFacility ftp



#Cookieを表示しますか? (フォーチュンクッキーの表示)

#FortunesFile / usr / share / fortune / zippy



#ログ内のホスト名を解決しないでください。 ログはあまり有益ではなくなり、

#必要なリソースも少なくなります。 「はい」-非常に賭けるのは理にかなっています

#ロードされたサーバー、またはアイドルDNS

はい



#最大ダウンタイム(接続切断の終了時)、分単位

#(デフォルト= 15分)

MaxIdleTime 15



#LDAP構成ファイル(README.LDAPを参照)

#LDAPConfigFile /etc/pureftpd-ldap.conf



#MySQL構成ファイル(README.MySQLを参照)

MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf



#Postgres構成ファイル(README.PGSQLを参照)

#PGSQLConfigFile /etc/pureftpd-pgsql.conf



#PureDBユーザーデータベース(README.Virtual-Usersを参照)

#PureDB /etc/pureftpd.pdb



#pure-authdソケットへのパス(README.Authentication-Modulesを参照)

#ExtAuth /var/run/ftpd.sock



#PAM認証を有効にする必要がある場合は、コメントを外します

#次の行

#PAMAuthenticationはい



#システム、Unix認証(/ etc / passwd)が必要な場合、

#次の行のコメントを外します

#UnixAuthenticationはい



#LDAPConfigFile、MySQLConfigFile、

#PAMAuthenticationおよびUnixAuthenticationは使用のみ可能

#1回、ただし一緒に使用できます。 たとえば、あなたが

#MySQLConfigFileを使用し、次にUnixAuthenticationを使用して、リクエストを送信します

#MySQLに。 そのようなユーザーがデータベースで見つからない場合、試行されます

#/ etc / passwdおよび/ etc / shadowのシステムユーザー。 SQLの場合

#パスワードが間違っているために認証が失敗する

#さらにユーザー検索を停止します。 認証方法

#は設定された順序で使用されます



# 'ls'コマンドの再帰制限。 最初の引数はファイルの最大数です

#表示されます。 2番目はサブディレクトリの最大数です

LimitRecursion 10000 8



#匿名には新しいディレクトリを作成する権利がありますか?

AnonymousCanCreateDirsいいえ



#システムがここに示されている値よりも多くロードされている場合、

#anonymosは何もダウンロードできません

最大負荷4



#パッシブ接続用のポートの範囲。 ファイアウォールがハッキングしている場合

#標準範囲

#PassivePortRange 30,000 50,000



#PASV / EPSV / SPSV応答の強制IPアドレス。 -NATの場合。

#シンボリックホスト名は、動的IPを使用するゲートウェイでも受け入れられます

#ForcePassiveIP 192.168.0.1



#匿名のアップロード/ダウンロード率。

#AnonymousRatio 1 10



#すべてのユーザーのアップロード/ダウンロードの比率。

#このディレクティブは前のものと重複しません。

#UserRatio 1 10



#「ftp」が所有するファイルのダウンロードを禁止します。

#ファイルはアップロードされましたが、ローカル(ローカル)管理者によって承認されていません。

AntiWarezはい



#リッスンしているIPアドレス/ポート(デフォルト=すべてのIPおよびポート21)。

#192.168.254.254,21にバインド



#匿名の最大速度(KB /秒)

#AnonymousBandwidth 8



#すべてのユーザー(匿名ユーザーを含む)の最大速度(KB / s)

#AnonymousBandwidthまたはUserBandwidthを使用し、両方を使用します。

#意味がありません。

#UserBandwidth 8



#作成されたファイルのマスク。 <ファイルのumask>:<ディレクトリのumask>。

#177:077-妄想している場合:)

#umaskは最大値(777)から差し引かれたときの数値であり、

#適切なマスクを取得します。 つまり 以下の場合、マスクはそれぞれ次のようになります。

#ファイルには644、ディレクトリには755

Umask 133:022



#ユーザーが起動される最小のUID。

#(ネイティブバージョンでは100でした。1000を設定しました)

MinUID 1000



#許可ユーザーのFXP転送を許可します。

AllowUserFXPいいえ



#匿名および非匿名のFXP転送を許可

AllowAnonymousFXPいいえ



#ユーザーは、ピリオド( '。')で始まるファイルを削除および変更できません

#所有者であっても。 TrustedGIDが有効になっている場合、このグループには

#これらのファイルへのアクセス。

ProhibitDotFilesWrite no



#ピリオドで始まるファイルの読み取りを禁止する

ProhibitDotFilesRead no



#ファイルを上書きしないでください。 アップロードされたファイルの名前が既にある場合

#存在する場合、自動的にfile.1、file.2、file.3、...に名前が変更されます

自動名前変更



#匿名ユーザーが新しいファイルをアップロードできないようにします(no =アップロードは許可されます)

AnonymousCantUpload no



#このIPアドレスへの接続のみが匿名ではない場合があります。 あなた

#このディレクティブを使用して複数のIPを使用できます

#匿名FTPの場合、プライベートで安全なIPを残す

#リモート管理。 また、不安定を許可することができます

#認証用のローカルIP(タイプ10.xxx)およびパブリックのままにする

#(匿名用)別のIP上のFTPサーバー。

#TrustedIP 10.1.1.1



#PIDをログの各行に追加する場合、

#次の行のコメントを解除します。

#LogPIDはい



#「apache」タイプの形式のログで追加のログファイルを作成します。

#fw.c9x.org-jedi [1975年12月13日:19:36:39]「GET /icap.tar.bz2」200 21808

#このログファイルは、次のプログラムで処理できます。

#Apacheログの分析。

#AltLog clf:/var/log/pureftpd.log



#最適化された形式で追加のログファイルを作成する

#統計レポート(このようなHZ。私は見る必要があります)

#AltLogの統計:/var/log/pureftpd.log



#W3C標準で転送されたファイルを使用して別のログを作成します

#(多くの市販のアナライザーと互換性があります)

#AltLog w3c:/var/log/pureftpd.log



#CHMODコマンドを無効にします。 ユーザーは権限を変更できません

#ファイルへ。

#NoChmodはい



#ユーザーにファイルのアップロードを許可しますが、ファイルの削除は許可しません。

#KeepAllFilesはい



#ユーザーのホームディレクトリを自動的に作成し、

#存在しない場合

#CreateHomeDir yes



#仮想クォータを有効にします。 最初の数は、ファイルの最大数です。

#2番目の数値は、メガバイト単位の最大サイズです。

#だから1000:10は各ユーザーを1000ファイルと10メガに制限します。

#クォータ1000:10



#スタンドアロンモードサポートを使用してpure-ftpdがコンパイルされている場合は、変更できます

#pidファイルの場所。 デフォルトの位置-/var/run/pure-ftpd.pid

#PIDFile /var/run/pure-ftpd.pid



#pure-ftpdがpure-uploadscriptサポートでコンパイルされている場合、

#次に、この項目を使用すると、新しくダウンロードした情報を書き込むことができます

#/var/run/pure-ftpd.upload.pipe内のファイルなので、pure-uploadscriptは

#それらを読み、ダウンロードしたファイルを処理します。

#CallUploadScript yes



#このオプションは、アップロードが匿名で許可されているサーバーで役立ちます。

#/ var / ftpが別の/ varセクションにある場合、これにより

#空き容量を節約し、ログファイルを保護します。 割合

#ここで指定された数を超えると、自動アップロードが禁止されます。

MaxDiskUsage 99



#ユーザーを許可する場合は、このオプションに「yes」を設定します

#ファイルの名前を変更します。

#NoRename yes



#「顧客証明」を有効にする:「chmod 0 public_html」などの何らかのエラー

#一緒に作業するとき、chtol ...要するに、これはバグではなく機能です... :)そして

#愚かなクライアントはあなたのサポートに負担をかけませんでした。

#段落。 クライアントがUnixについて少し知識がある場合、この機能

#役に立たない。 ホスティングがある場合-オンにします。

#(翻訳はほとんど逐語的です-しかし、私は何について理解していなかったか...)

CustomerProofはい



#並列プロセスの数。 サーバーが

#オプション '--with-peruserlimits'(ここでは、

#ほとんどのバイナリディストリビューターではそのままです)。

#形式:<ユーザーごとの最大セッション>:<匿名の最大セッション>

#たとえば、3:20は、認証されたユーザーが3つ持つことができることを意味します

#アクティブセッション。 すべての匿名アカウント-最大20セッション。

#PerUserLimits 3:20



#ファイルがサーバーにアップロードされ、以前のバージョン(同じ名前)がある場合、

#その後、古いファイルは削除または切り捨てられません。 ダウンロードが行われます

#アトミックロードの完了時に一時ファイルに

#ファイルの新しいバージョンに切り替えます。 たとえば、大きなPHPをロードする場合

#スクリプト、Apacheは完全にロードされるまで古いバージョンで動作します

#すぐに新しいものに切り替わります。現在のものは完全に転送されます

#このオプションは仮想クォータと互換性がありません。

#NoTruncate yes



#このオプションには次の3つの値を指定できます。

#0-SSL / TLS暗号化を無効にします(デフォルト)。

#1-暗号化された接続と通常の接続の両方を受け入れます。

#2-SSL / TLSを使用しない接続を拒否する、

#匿名接続を含む。

#これについて盲目的にコメントしないでください。 以下を確認してください:

#1)SSL / TLSサポートでコンパイルされたサーバー(--with-tls)、

#2)有効な証明書を入力し、

#3)互換性のある顧客のみがログインします。

#TLS 1



#SSL / TLS接続で受け入れられる暗号のリスト

#プレフィックス-S:SSLを完全に無効にしますが、TLSは無効にしません。

#TLSCipherSuite HIGH:中:+ TLSv1 :! SSLv2:+ SSLv3



#スタンドアロンモードで現在のIPv4アドレスをリッスンします(つまり、IPv6は無効になっています)

#デフォルトでは、IPv4とIPv6が含まれています。

IPV4のみはい



#スタンドアロンモードで現在のIPv6アドレスをリッスンします(つまり、IPv4は無効です)

#デフォルトでは、IPv4とIPv6が含まれています。

#IPV6のみはい



#ファイル名のUTF-8サポート(RFC 2640)

#サーバーファイルシステムのエンコーディングを定義し、オプションで、

#UTF-8を使用しないクライアントのデフォルトエンコーディング。

#pure-ftpdが '--with-rfc2640'でコンパイルされている場合、現在動作しています

FileSystemCharset utf-8

ClientCharset cp1251



MySqlデータベースを使用したPure-FTPdの構成と同様に

pure-ftpd.conf
#pureftpdのMySQL構成



#オプション:MySQLサーバーの名前またはIP。 これを聞かないで

#ローカルUNIXソケットが使用される場合の項目。

#MYSQLServer 127.0.0.1



#オプション:MySQLがハングするポート。 これを聞かないで

#ローカルUNIXソケットが使用される場合の項目。

#MYSQLPort 3306



#オプション:MySQLが同じホスト上にある場合、mysql.sockソケット名が設定されます。

MYSQLSocket /tmp/mysql.sock



#必須:データベースで使用するユーザー。

MYSQLUser pure-ftpd



#必須:MySQLにアクセスするユーザーのパスワード。

MYSQLPassword pure-ftpd



#必須:作業しているデータベース。

MYSQLDatabase pureftpd



#必須:パスワードをデータベースに保存する方法

#設定可能な値:「cleartext」、「crypt」、「md5」、「password」

#( "パスワード" = MySQLパスワード()関数)

#「any」を使用して「crypt」、「md5」、「password」を試すことができます

MYSQLCryptクリアテキスト



#後続のディレクティブでは、行の一部が最大で置き換えられます

#クエリ実行:



#\ Lは、ログインするユーザー名に置き換えられます。

#\ユーザーがクロールするサーバーのIPアドレスに置き換えられます

#\ Pは、ユーザーが接続しているポート番号に置き換えられます。

#\ Rは、ユーザーのIPアドレスに置き換えられます。

#\ Dは、長い10進数の形式のユーザーのIPアドレスに置き換えられます。

#(例:192.168.254.1 == 3232300545)。



#次を使用して、比較的複雑なデータベースクエリを計画できます。

#この変数セット。 1つのデータベースが複数のサーバーで使用されている場合、

#その「\ I」により、ユーザーがサーバーを壊しているかどうかを判断できます。



#データベースからパスワードを取得するクエリ:

MYSQLGetPW SELECT `password` FROM` users` WHERE` user` = "\ L" AND` active` = '1'



#システムユーザー名またはUIDを取得するクエリ

MYSQLGetUID SELECT `uid` FROM` users` WHERE` user` = "\ L"



#オプション:デフォルトのUID-取得を要求する代わりにMYSQLGetUID

#MYSQLDefaultUID 1000



#グループまたはgidの名前を取得するためのデータベースへのリクエスト

MYSQLGetGID SELECT `gid` FROM` users` WHERE` user` = "\ L"



#オプション:デフォルトのGID-クエリMYSQLGetGIDの代わり

#MYSQLDefaultGID 1000



#ハムスターのリクエスト

MYSQLGetDir SELECT `home` FROM` users` WHERE` user` = "\ L"



#オプション:ユーザーからの最大ファイル数のリクエスト

#(私は疑問に思う-これの深い意味は何ですか?

#サーバーchtolを起動しませんでしたか? :))

#「仮想クォータサポート」でコンパイルする必要があります。

MySQLGetQTAFS SELECT `QuotaFiles` FROM` users` WHERE` user` = "\ L"



#オプション:クォータ要求(ディスク使用量)

#メガバイト単位の数値。

#Pure-FTPdは「仮想クォータサポート」でコンパイルする必要があります。

MySQLGetQTASZ SELECT `QuotaSize` FROM` users` WHERE` user` = "\ L"



#オプション:関係。 ダウンロード/アップロード率のリクエスト。

#ドル; この関数でコンパイルしないでください。

MySQLGetRatioUL SELECT `ULRatio` FROM` users` WHERE` user` = "\ L"

MySQLGetRatioDL SELECT `DLRatio` FROM` users` WHERE` user` = "\ L"



#オプション:ユーザーのチャンネル幅。 サーバーは

#このオプションでコンパイル。 KB /秒の値。

MySQLGetBandwidthUL SELECT `ULBandwidth` FROM` users` WHERE` user` = "\ L"

MySQLGetBandwidthDL SELECT `DLBandwidth` FROM users WHERE` user` =" \ L "



#ハムスターからユーザーを解放します(〜)。 次の場合は絶対にしないでください:

#1)自分が何をしているかを正確に知っている。

#2)実ユーザーと仮想ユーザーは一致します。

#MySQLForceTildeExpansion 1



#テーブルをトランザクションに更新した場合(Gemini、

#BerkeleyDB、Innobase ...)、SQLトランザクションを有効にできます

#MyISAMデータベースを使用している場合はコメントを残し、

#またはMySQLの古いバージョン(<3.23.x)。

#MySQLTransactions On



次に、データベース自体( pureftpd )とユーザー( users )を含むテーブルを作成します

 CREATE TABLE `users` ( `User` varchar(50) NOT NULL DEFAULT '', `Password` varchar(250) DEFAULT '', `Uid` int(11) DEFAULT '10000', `Gid` int(11) DEFAULT '10000', `Dir` varchar(250) DEFAULT '', `QuotaFiles` int(11) DEFAULT NULL, `QuotaSize` int(11) DEFAULT '0', `ULRatio` int(11) DEFAULT '0', `DLRation` int(11) DEFAULT NULL, `ULBandwidth` int(11) DEFAULT '0', `DLBandwidth` int(11) DEFAULT '0', `Comment` tinytext, `active` int(11) DEFAULT '0', PRIMARY KEY (`User`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      
      





/etc/rc.confに追加します

 pureftpd_enable="YES"
      
      





FTPサーバーを起動します

 /usr/local/etc/rc.d/pure-ftpd start Starting pureftpd. Running: /usr/local/sbin/pure-ftpd -g/var/run/pure-ftpd.pid -A -c50 -B -C10 -D -fftp -I15 -lmysql:/usr/local/etc/pureftpd-mysql.conf -L10000:8 -m4 -s -U133:022 -u80 -k99 -Z -8utf-8 -9cp1251
      
      





それがすべてでしょう。 ユーザーテーブルにユーザーを入力し(ユーザー名、パスワード、ホームディレクトリを指定)、接続を試行します。 しかし、私はユーザーのIPアドレスによってアクセスを制限する問題に悩まされていました。 古典的なケースでは、ipフィールドがユーザーテーブルに追加され、pureftpd-mysql.confのMYSQLGetPWのsqlクエリは次の形式を取ります。



 SELECT Password FROM users WHERE User='\L' AND ip='\R'
      
      





しかし、彼は私に適していない。 まず、ユーザーごとに、接続元のIPアドレスを指定する必要があります。次に、単一のIPのみを指定できます。 実際には、特定のユーザーのみにIP'shnikをバインドする必要があり、1人のユーザーにn番目のIPアドレスを設定する機能が必要です。



MySqlの構文にはプログラム制御フロー関数が含まれており、その中にはIF関数が必要です



IPテーブルを作成する

 CREATE TABLE `ip` ( `user` varchar(200) DEFAULT NULL, `ip` varchar(16) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      
      





MYSQLGetPWのsqlクエリを次の形式にします。

  SELECT IF((SELECT COUNT(`user`) FROM ip WHERE user='\L')=0, (SELECT Password FROM users WHERE User='\L'), (SELECT users.Password FROM users,ip WHERE users.User='\L' AND ip.ip='\R' AND ip.user='\L'))
      
      





最終的に、IPテーブルのエントリが設定されていないすべてのユーザーはIPアドレスをチェックせずに認証され、IPテーブルに登録されているユーザーは接続しようとしているIPアドレスからチェックされ、設定できます1回のログインで無制限のIPアドレス



All Articles