前の10件 | -
ネットワークの構成 [ネットワーク]
我が家は「auひかり電話」を利用しています。
このサービスを利用するには、ホームゲートウェイ(HGW)という機器をレンタルする必要があります。
HGWにはWiFiも搭載されているのですが、有料なんですよね。確か月額500円とか。
もったいないので、今まではHGWの配下にbuffaloのWiFiルータを置いて運用していたのです。
ですが、auひかり ホーム10ギガのサービス開始に伴い、WAN側とLAN側に一つずつではありますが
ポート10GBASE-TがあるのでHGWをレンタルし直しました。
3000円程かかったのに、結局未契約のままですが……。
しばらくはそのままで問題がなかったのですが、こんなニュースを見ました。
「「Googleフォト」がついに有料化!」
今まではあまり気にしないでいたのですが、Gmailが満杯だとか連絡も来るし、他にも「OneDrive」とか「Dropbox」とかもあり、正直管理が面倒に思っていました。
アマゾンプライムにも入っているので、無制限に使用できるクラウドもあるのですが、辞めるときに保存し直すのも面倒だなぁ。とも。
そこで楽天ポイントが貯まっていたこともあり、LAN内にNASを追加し、WiFi機器増加に対応、高速化を行うことにしました。
高速化には、まだまだ高価な10GLANの構築はできないので、LinkAgreegation対応の機器で対応してみようと思います。
NASには外部からにも、スマホやタブレットからもアクセス可能にしたい。
ということで、LANの構成図を描いてみました。
このサービスを利用するには、ホームゲートウェイ(HGW)という機器をレンタルする必要があります。
HGWにはWiFiも搭載されているのですが、有料なんですよね。確か月額500円とか。
もったいないので、今まではHGWの配下にbuffaloのWiFiルータを置いて運用していたのです。
ですが、auひかり ホーム10ギガのサービス開始に伴い、WAN側とLAN側に一つずつではありますが
ポート10GBASE-TがあるのでHGWをレンタルし直しました。
3000円程かかったのに、結局未契約のままですが……。
しばらくはそのままで問題がなかったのですが、こんなニュースを見ました。
「「Googleフォト」がついに有料化!」
今まではあまり気にしないでいたのですが、Gmailが満杯だとか連絡も来るし、他にも「OneDrive」とか「Dropbox」とかもあり、正直管理が面倒に思っていました。
アマゾンプライムにも入っているので、無制限に使用できるクラウドもあるのですが、辞めるときに保存し直すのも面倒だなぁ。とも。
そこで楽天ポイントが貯まっていたこともあり、LAN内にNASを追加し、WiFi機器増加に対応、高速化を行うことにしました。
高速化には、まだまだ高価な10GLANの構築はできないので、LinkAgreegation対応の機器で対応してみようと思います。
NASには外部からにも、スマホやタブレットからもアクセス可能にしたい。
ということで、LANの構成図を描いてみました。
びぼーろくの一時再開 [雑記]
ブログを書いていたことなんてすっかり忘れておりました……。
なんか5年くらい経っている……。
Sonetから移行するようにメールが来ていたのも見落として……。
これを機にブログは止めてしまおうと思っていたのですが!
CentOS以外にも「びぼーろく」を残したい事柄がいくつかありまして、すこーし追加しておこうと思います。
我が家はすっかり楽天圏内に取り込まれておりまして、楽天ポイントがそこそこ貯まっておりました。
生活必需品を購入した後、パソコン周りの機器を色々購入したのですが、一度に色々設定すると混乱してしまい、少しずつ変更をしていくことにしました。
ここら辺の設定類を残していこうと思います。
購入したのは以下。
NAS関係
本体:synology DS420+
メモリ:DS420+用メモリ4GB
HDD:Seagate ST8000DM004 8TBx3
WiFiルータ
TP-Link ArcherAX50
WiFiカード
Intel WiFi カード AX200
スイッチングハブ
TP-Link TL-SG-108E
シングルボードコンピュータ
RaspberryPi4 4GB
ケース
電源
microSD 32GB
SSD
CT1000P1SSD8JP Crucial M.2 2280 NVMe PCIe Gen3x4 SSD P1シリーズ1.0TB x2
M.2 NVMe SSDケース
センチュリー CAM2NVU32CRGB x2
HDDケース
ロジテック外付けHDDケース LGB-EKU3 x2
なんか5年くらい経っている……。
Sonetから移行するようにメールが来ていたのも見落として……。
これを機にブログは止めてしまおうと思っていたのですが!
CentOS以外にも「びぼーろく」を残したい事柄がいくつかありまして、すこーし追加しておこうと思います。
我が家はすっかり楽天圏内に取り込まれておりまして、楽天ポイントがそこそこ貯まっておりました。
生活必需品を購入した後、パソコン周りの機器を色々購入したのですが、一度に色々設定すると混乱してしまい、少しずつ変更をしていくことにしました。
ここら辺の設定類を残していこうと思います。
購入したのは以下。
NAS関係
本体:synology DS420+
メモリ:DS420+用メモリ4GB
HDD:Seagate ST8000DM004 8TBx3
WiFiルータ
TP-Link ArcherAX50
WiFiカード
Intel WiFi カード AX200
スイッチングハブ
TP-Link TL-SG-108E
シングルボードコンピュータ
RaspberryPi4 4GB
ケース
電源
microSD 32GB
SSD
CT1000P1SSD8JP Crucial M.2 2280 NVMe PCIe Gen3x4 SSD P1シリーズ1.0TB x2
M.2 NVMe SSDケース
センチュリー CAM2NVU32CRGB x2
HDDケース
ロジテック外付けHDDケース LGB-EKU3 x2
「MariaDB」のコマンドラインでデータベースを作る。 [MariaDB]
■「MariaDB」をコマンドで操作。
|
初め間違えてしまいました。そりゃそうですよね。丸見えですもんねぇ。
「create database if not exists phpbasic2 character set utf8 collate utf8_unicode_ci;」を分解すると、
「create database」データベースの作成。
「if not exists」作成するデータベース名が既存の物と重複しないかチェックし存在しない場合のみ作成。
「phpbasic2」データベース名。「phpbasic」を以前「phpMyAdmin」で作成したので「2」に。
「character set utf8」文字コードを「UTF-8」に。データベース毎に設定可能。
「collate utf8_unicode_ci」照合順序。データベース毎に設定可能。
「create table if not exists enquete(」 「enquete」テーブルを作成。「;」を付けないことにより「->」が出現しモード? が変り複数行で入力するようになります。
初めはこれに戸惑いましたねぇ。「;」を最後に付けることで打ち込みが終了になります。
「-> code int primary key auto_increment,」 「code」フィールドの作成。
構文:CREATE TABLE テーブル名(列名[code] 型[int] PRIMARY KEY ,列名2 型);
主キー制約を付ける事により、一意の番号が保障されなおかつNULLの値が入らなくなります。
「-> nickname varchar (20) not null,」
構文:CREATE TABLE テーブル名(列名[nickname] 型[varchar] NOT NULL ,列名2 型);
NOT NULL制約を付ける事により、NULLの値が入るのを防ぐことが出来ます。
コマンドラインで作成してみましたが「phpMyAdmin」と比べると構文を知っている必要がありますが、一画面に沢山の項目がある「phpMyAdmin」より迷いが無いと思います。
個人的には両方を使えば、知らない設定も理解が早くなる気がしました。
「PHP」でアンケート一覧表示させてみる。 ←前 後→
「PHP」でアンケート一覧表示させてみる。 [PHP]
■アンケート一覧表示確認。
|
「while(1)」(これより以前↑のプログラムの説明は先日分に) ループをするのですが(1)を付けることで無限ループになります。
「$rec = $stmt->fetch(PDO::FETCH_ASSOC);」で「$stmt」からデータを取り出します。「fetch」が順番に1レコードずつ取り出す命令。
「$stmt」に収まっているデータを「FETCH」により一つずつデータを取り出し、「$rec」に代入します。
1レコードは「code」「nickname」「email」「goiken」となります。
(詳細:http://www.phpbook.jp/tutorial/pdo/index7.html)
「if($rec==false)」はIF文で「もし~なら~する」ということですが、「==」は「同様なら」と言う意味で、「false」つまり「無」ならループから抜け出すという意味です。それまではループし、再び「$stmt」からデータを取り出し「$rec」を上書きします。
ループから脱却する前に取り出したデータをフィールド名毎に「print」で表示させています。そしてループの初めに戻ります。
「$dbh = null;」によりデータベース切断します。
http://192.168.0.66/php/ichiran.php にアクセスすると下記のように表示されます。
1bibo-rokubibo-roku@yahoo.co.jpなななもはー
2magellanmagellan@yahoo.co.jpねむねむはー
3mekamochimekamochi@yahoo.co.jpこめたぬはー
■データ検索のページを作成してみる。(search.html)
|
■データ検索のページを作成してみる。(search.php)
|
2[送信]にて下記表示されました。
2magellanmagellan@yahoo.co.jpねむねむはー
しかし
3 or 1[送信]にすると……
1bibo-rokubibo-roku@yahoo.co.jpなななもはー
2magellanmagellan@yahoo.co.jpねむねむはー
3mekamochimekamochi@yahoo.co.jpこめたぬはー
全部表示されてしまいました。これを「SQLインジェクション」と呼ぶ悪い行為だそうです。
これを禁止しましょう。
今回の場合「3 or 1」が「3 かもしくは全部のデータを出しなさい」という意味になります。「or 1」が「もしくは全部」になります。
■「SQLインジェクション」を阻止する。
|
「$sql = 'SELECT * FROM enquete WHERE code=?';」とします。
「$data[]=$code;」新たに変数を作りそこにデータを格納します。
「$stmt->execute($data);」SQL文で命令を出すときに、データを格納した変数を指定します。
http://192.168.0.66/php/search.php
3 or 1[送信]とすると
3mekamochimekamochi@yahoo.co.jpこめたぬはー
となります。これをプリペアードステートメントという書き方だそうです。
「phpMyAdmin」で「MariaDB」を操作する。 [MariaDB]
■「phpMyAdmin」でデータベースを作成。
|
まずはブラウザからphpMyAdminにアクセスします。「データベース」をクリックすると作成ページに移動します。
作成する「データベース名」と「照合順序」を入力し、「作成」します。
作成する「テーブル名」と「カラム数」を入力し、「実行」します。
「code」フィールドは通し番号が入ります。同じ番号は使われません。同一人物が解答を繰り返しても追加されます。
そのシステム内に一つしか無い番号と言うことで「ユニークコード」とも言われるとのこと。
「code」「nickname」「email」「goiken」これがカラム数が「4」の理由です。
フィールド名はPHPプログラムに合わせて命名しました。
「データ型」各々のフィールドに入力するデータのタイプを初めに設定します。
「INT」は整数を表します。(文字ではないので「長さ/値」には入力しない)
「VARCHAR」は文字列を表します。最大数値を設定しました。
「インデックス」は索引という意味で設定することにより検索が早くなるとのこと。個々のフィールドを検索欄として使用するか決めるのがインデックスの設定です。
「PRIMARY」1枚のテーブルの中で1つのフィールドにしか設定できないインデックスです。このとき選ばれるのは「そのテーブルを代表するフィールドである」という意味から、日本語では「主キー(プライマリーキー)」と呼ばれます。
主キーとなることができるフィールドはその中にダブりが発生せずに、常にユニークな値となる物に限ります。(つまりインデックスをPRIMARYに設定することができるということ)
氏名などは同姓同名がありえるので、主キーになることができないのはよくわかるでしょう。
「A_I」(auto increment)チェックを入れておくとレコードが追加されるたびに自動で通し番号を付けてくれます。
■「phpMyAdmin」から「SQL文」を入力してみる。
|
INSERT INTO enquete ←アンケートテーブルにレコードを追加します。
(nickname,email,goiken) ←[1],[2],[3]
VALUES
("bibo-roku","email","なななもはー") ←["1"],["2"],["3"] ↑の数値と対応します。「nickname=bibo-roku」という具合。
フィールド「code」はautoincrementなので自動で入力されるため手動では入力不要です。
「編集」をクリックすることでデータの編集もできます。
■「PHP」で「SQL文」を入力させる。(アンケート内容を自動で保存させる。)
|
プログラムで「SQL文」を使用するときは「接続」「命令」「切断」の過程を踏む必要があります。
$dsn = 'mysql:dbname=phpbasic;host=localhost';
dsn →パラメータ。データソースネーム。データベースに接続するために 必要な情報が含まれます。 指定されたデータベースへの接続を表す PDO インスタンスを生成します。
mysql: →接頭辞
dbname →データベース名を指定します。
host →データベースサーバーが存在するホスト名を指定します。
$user = 'root';
$password = 'XXXXX';
$dbh = new PDO($dsn,$user,$password);
dbh →パラメータ。データベースハンドル。MariaDBへの接続。
$dbh->query('SET NAMES utf8');
→$dbh->query('命令実行するSQL文');
データベース管理システムに対する処理要求(問い合わせ)を文字列として表したもの。
$sql = 'INSERT INTO enquete (nickname,email,goiken) VALUES("'.$nickname.'","'.$email.'","'.$goiken.'")';
$sql →ここにSQL文を記述する。
INSERT INTO →テーブルにデータを追加する。
$stmt = $dbh->prepare($sql); →SQL文で命令を出す準備。
$stmt->execute(); →その命令を出す。
$dbh = null; →データベースから切断する。
編集後、ブラウザからデータを入力してみる。スマホからも成功しました。
■「SQL文」でデータを取り出す。
|
「SELECT goiken FROM enquete WHERE code=1」を入力します。そして「実行」をクリック。
SELECT goiken →「goiken」フィールドのデータをください。
FROM enquete →「enquete」テーブルから。
WHERE code=1 →「code=1」のデータを。
上記の通り入力したのですが、書籍の通りの出力にはどうしてもなりませんでした。警告が出るのです。
「Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.」 ネットで調べてもincrementにはチェックを入れているしちょっと解らない状態です。書籍でのPHPのバージョンなども異なりますのでその辺が原因かも知れません。
ですが下記命令は書籍通り表示できました。
「SELECT * FROM enquete WHERE 1」
SELECT * →全てのフィールドのデータをください。
FROM enquete →「enquete」デーブルから。
WHERE 1 →無条件で全部。 「1」が無条件で全部。
これで一応データの呼び出しはできましたね。
「PHP」でアンケートページ作成。 [PHP]
「PHP」で動くHTMLを作る。
27日、28日の記事と連動しています。 これまでに「PHP」や「MariaDB」や「phpmyadmin」や「apache」をインストールしたのですからこれらを利用してHTMLを作成してみます。といっても、ほぼ書籍の内容なのですが。ありがとうございました。
下記のファイル「index.html」「check.php」「thanks.php」をとりあえず「/var/www/html/php」に置いてみます。
パーミッションは「755」にしてみました。
アンケートの index ページ。(index.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンケートの入力</title>
</head>
<body>
<form method="post" action="check.php"> ←『form』は入力・送信フォームを作成する際に使用。『method』は送信の際の転送方法。『post』は一般的なフォームで使用される。(長文など)『action』は送信先プログラムのURIを指定。つまり入力したデータをcheck.phpに送信する。
ニックネームを入力してください。<br>
<input name="nickname" type="text" style="width:100px"><br> ←『input name』インプットタグのname属性。入力されたデータが送信される際に、名付けたデータ名(ここではnickname)とその値を一組にしてaction属性で指定したURIにmethod属性で指定した方法(post)で送信される。
メールアドレスを入力してください。<br>
<input name="email" type="text" style="width:200px"><br>
ご意見を一言でお聞かせください。<br>
<input name="goiken" type="text" style="width:300px"><br>
<br>
<input type="submit" value="送信">
</form>
</body>
</html>
アンケートのチェックページ。(check.php)
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>アンケートのチェック</title>
6 </head>
7 <body>
8
9 <?php ←『<?php』 と 『?>』の間にコードを記述する。
10 $nickname=$_POST['nickname']; ←『$nickname』このPHPプログラムで使用する変数。『$』を付ける。中身は右辺の『$_POST['nickname']』。←これは HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列。今回はHTMLファイル(index.html)中の『<input name="nickname"~』の値が代入される。
11 $email=$_POST['email']; ←『;』PHPの行の最後に付ける。
12 $goiken=$_POST['goiken']; ←つまりここまででHTMLファイルから値を三つ受け取り、それぞれ変数に代入している。
下記のように変数はたびたび利用されるようなので最初に設定記述するのが良いかも知れない。
13 ←空行は見やすくするため。
14 $nickname=htmlspecialchars($nickname); ←『htmlspecialchars』関数。HTML の表現形式に変換しその文字列を返す。ここでは利用者が入力したテキストの中にタグなどが混入された場合それを無害化する。つまりクロスサイトスクリプティングをサニタイジングするということ。
15 $email=htmlspecialchars($email);
16 $goiken=htmlspecialchars($goiken);
17
18 if($nickname=='') ←IF文。『==』イコールが二連結で『同じなら』という意味。『''(シングルクォート二つ)』で『空欄』という意味。つまり変数$nicknameに値が入力されていなければ。ということ。
19 { ←『{ }』の間の処理が↑の条件に合えば行われ↓が表示されることになる。
20 print 'ニックネームが入力されていません。<br>'; ←『'』シングルクォートに挟まれると文字列に。
21 }
22 else ←↑の条件に『合わなければ』↓の処理が行われ表示されることになる。
23 {
24 print 'ようこそ';
25 print $nickname;
26 print '様';
27 print '<br>';
28 }
29
30 if($email=='')
31 {
32 print 'メールアドレスが入力されていません。<br>';
33 }
34 else
35 {
36 print 'メールアドレス';
37 print $email;
38 print '<br>';
39 }
40
41 if($goiken=='')
42 {
43 print 'ご意見が入力されていません。<br>';
44 }
45 else
46 {
47 print 'ご意見『';
48 print $goiken;
49 print '』<br>';
50 }
51
52 if($nickname=='' || $email=='' || $goiken=='') ←『||』は『もしくは』という意味。変数$nicknameが空、もしくは変数$emailが空、もしくは変数$goikenが空 ならば、↓の処理が実行される。
53 {
54 print '<form>';
55 print '<input type="button" onclick="history.back()" value="戻る">'; ←JavaScript言語、入力し直しの仕組みに。HTMLだと入力した値(今回はテキスト)がページを「戻る」などの移動を行うことで消去してしまうが、JavaScriptならそれを保持して戻ることができるので、再入力の手間が省ける。つまり入力が一つでも行われていない場合は戻るリンクが出現し、再入力を促すということ。
56 print '</form>';
57 }
58 else ←入力が行われていた場合の処理。
59 {
60 print '<form method="post" action="thanks.php">'; ←送信先はthanks.php
61 print '<input name="nickname" type="hidden" value="'.$nickname.'">'; ←『hidden』はブラウザ上に表示されない非表示データを送り先の『$_POST=[''];』に渡すことができる。
『$_POST=[''];』これは本来『form』(index.html)タグ内の入力データ(inputタグ)を受け取るものだが、check.phpファイルには入力画面がない。しかしindex.htmlから送られてきた『nickname(名前と値)』を変数『$nickname』に代入してあるので、これを『value』に代入してやることで『nickname』になり『hidden』として送信先に渡すことができる。
62 print '<input name="email" type="hidden" value="'.$email.'">'; ←『. .』変数の値を連結する。
63 print '<input name="goiken" type="hidden" value="'.$goiken.'">';
64 print '<input type="button" onclick="history.back()" value="戻る">';
65 print '<input type="submit" value="OK">'; ←『submin』送信ボタンを作成。
66 print '</form>';
67 }
68 ?> ←「PHP」プログラム終了。
69 </body>
70 </html>
アンケートのサンクスページ。(thanks.php)
<!doctype html><html>
<head>
<meta charset="utf-8">
<title>アンケートのサンクス</title>
</head>
<body>
<?php
$nickname=$_POST['nickname'];
$email=$_POST['email'];
$goiken=$_POST['goiken'];
$nickname=htmlspecialchars($nickname);
$email=htmlspecialchars($email);
$goiken=htmlspecialchars($goiken);
print $nickname;
print '様<br>';
print 'ご意見ありがとうございました。<br>';
print 'いただいたご意見';
print $goiken;
print '<br>';
print $email;
print 'にメールを送りましたのでご確認ください。';
$mail_sub='アンケート受け付けました。'; ←メールタイトル。
$mail_body=$nickname."様への\nアンケートご協力ありがとうございました。"; ←メール本文。ダブルクォーテーションは「\n」を改行として機能させるため。
$mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8");
$mail_head='From:xxx@xxx.co.jp'; ← ヘッダー情報。自分のメールアドレス。
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail($email,$mail_sub,$mail_body,$mail_head) ←メールを送信する命令。
※メールは実機ではないので出ない状態。
?></body>
</html>
---追記用---「vsftpd」の設定 [vsftpd]
■「/etc/vsftpd/」のデフォルトの状態確認。
|
■「/etc/vsftpd/ftpusers」のデフォルトの状態確認。
|
■「/etc/vsftpd/user_list」のデフォルトの状態確認。
|
■「/etc/vsftpd/vsftpd.conf」のデフォルトの状態確認。
|
■ローカルユーザーの上位ディレクトリ参照の制限。
|
まぁ、ターミナルで移動できる場所を考えれば、それと同様の移動ができるのは自然なことなのでしょう。
ただローカルユーザーを他人に使わせるために作成した場合、上位ディレクトリを参照されるのはセキュリティ上好ましくないような気がします。
なのでこれを制限する方法を記述しておきます。
上記の設定ですと、「chroot_list」に記載されたユーザーがホームディレクトリの上位ディレクトリに移動できるという設定のはずです。
しかし実際には、未記載「bibo-roku」ユーザーは「local_enable=YES」であるにも拘わらずログインさえできませんでした。
試しに「chroot_list」「bibo-roku」を書き込むとログインはできるのですが、当然上位にも移動できてしまいました。
調べてみると、上記の条件の場合「ホームディレクトリ(bibo-roku)」のパーミッションが「書き込み可能」になっているとログイン「できない」ということらしいです。
試してみたところ、確かにログインできて上位に移動できなくなりました。
しかしこれでは書き込み(アップロード)できないし……。
で!
「allow_writeable_chroot=YES」これを追記することで「ローカルユーザーをホームディレクトリ以上のディレクトリに移動させない」が実現できました。
■「/etc/vsftpd/chroot_list」の作成。
|
そのリストはデフォルトではないので、作ります。パーミッションは「600」で良いようです。
■「SElinux」を有効にして動作させる。
|
anonymousユーザーではanonymousユーザーのデフォルト設定で(アップロードはできないとか)接続ができました。
しかし、一般ユーザー(今回はbibo-roku)は接続が不可能でした。homeディレクトリへのアクセスが禁止されている。とのこと。
「getsebool -a | grep ftp」はSELinuxの組み込みルールの有効/無効状態(boolean)を確認するコマンドツールで、「ftp」だけを取り出しました。
ふーむ。つまりこれだけの項目が「SElinux」により制御されているのでしょうかね。
今回は「ftp_home_dir」を「on」に変更します。
「setsebool [-P] <boolean><value>」にて設定します。[-P]を付けることによりシステム設定に自動反映され、次回起動時にも反映されます。 <value>は「0=off」「1=on」です。
「SElinux」や「vsftpd」の再起動無くhomeディレクトリへのアクセスが可能になりました。
「vsftpd」のソースからRPMファイルを作成する。 [vsftpd]
■「vsftpd」のダウンロード、インストール。
|
実は公式HPには「rpm」「src.rpm」のファイルがありませんでした。
「yum」コマンドではバージョンが低いので困っていたのですが、下記アドレスにファイルが存在しました。
http://vsftpd.devnet.ru/files/3.0.2/packages/rhel6/vsftpd-3.0.2-1.el6.src.rpm
http://www.rpmseek.com/rpm/vsftpd-3.0.2-6.fc20.i686.html?hl=com&cx=0:-:0:12063675:0:0:0:
ファイルをダウンロードしたら「rpmbuild」コマンドを使用するために以前作成した「mockbuild」ユーザーの作業ディレクトリに移動させます。その際、「su」ユーザーでないと移動できません。
一応、所有者を「mockbuild」にして「rpm2cpio」コマンドで「SPEC」ファイルの有無を確認してみます。
「SPEC」ファイルはじめ、先日確認したファイル群がありますね。
いよいよ「rpmbuild --rebuild」コマンドでソースファイルから「RPM」ファイル作成に入ります。
警告。ぶっ。以前警告がでるので「mockbuild」ユーザーを作ったのですが、今回はまた別のグループとユーザーがコマンド使用には必要だったようです。「SPEC」ファイルにでも記載されているのでしょうか。
もう面倒なので、「root」で進めてしまいましょう。
で、不足分のパッケージをインストールします。
再度作成し、完成しました。場所は「root」になっているので留意しておきましょう。
出来上がった「vsftpd-3.0.2-1.el6.i386.rpm」をインストールします。
■「vsftpd」の動作確認。
|
そして起動を確認。動いてくれているようですね。
■「FTPクライアント」で接続。
|
「/etc/vsftpd」ディレクトリ内にあるコンフィグファイルを「ftp」ユーザーのルートディレクトリ以下の「pub」内にコピーします。
FFFTPクライアントにて「anonymous」で接続。成功。ファイル目視完了。ダウンロード失敗。
原因はパーミッションで「600」を「755」にしてダウンロード成功。
続いて「bibo-roku」(ローカルユーザー)で接続してみると、「530 This FTP server is anonymous only.」とのこと。
へぇ。デフォルトでは「anonymous」と「ftp」ユーザーは接続可能だけど、「ローカルユーザー」は駄目なんですね。
ということで、「/etc/vsftpd/vsftpd.conf」を「vi」コマンドで開き「local_enable=YES」が「ローカルユーザー」の接続(ログイン)許可です。
関連して「write_enable=YES」(書き込み系コマンド許可)や「local_umask=022」(パーミッションを「755」に。)を設定して、「vsftpd」を再起動します。
それにしても、理解できている設定をして、自由に動かせると気持ちいいですね!
■「anonymous」ユーザーでアップロード。
|
---追記---
下記問題について、次の項目にて解決しています。
---追記---
「FFFTP」(クライアント)「anonymous」ユーザーで接続。ファイルアップロード。
「550 Permission denied.」エラー発生。
これを解決するのには、「vsftpd.conf」の「#anon_upload_enable=YES」のコメントアウトを外す必要があり同時に「#write_enable=YES」こちらも外すとのこと。
これらの操作を「Webmin」がしてくれると思い、操作をするも、「vsftpd.conf」には見た目変化なし。
しかし再度接続してみると、エラーが「553 Could not create file.」変化しています。
アップロード先のディレクトリ「/ver/ftp/pub」のパーミッションを「775」から「777」に変更。
「vsftpd」再起動後接続。アップロード成功。しかし「vsftpd.conf」に変化なし。
とりあえず、変化なしは後に置くことにして、
「550 Permission denied.」には「Webmin」Anonymous can upload:「Yes」
「553 Could not create file.」にはパーミッションの変更。
で対処できました。
前者は「vi」コマンドなら「#anon_upload_enable=YES」を外すことで対処できました。
結論。
初めて「Webmin」で「anonymous」ユーザーのアップロードを許可しようと操作しても、アップロード先の「/var/ftp/pub」のパーミッションを「777」にしないとアップロードはできない。
つまり、「777」にしておけば「Webmin」で初接続して「Yes」にすればアップロードはできたと思われます。アップロードできなかったのはパーミッションのせいだったと。
また、「Webmin」で「anonymous」ユーザーのアップロードを許可する操作は、「vsftpd.conf」において「#」が外れた記述にならない。しかし設定は外された状態になる。
つまり「Webmin」上の設定と「vsftpd.conf」上の設定に連動性が見られない。ただ、「Webmin」上では「Yes」と「No」で選択するが、「vsftpd.conf」上では「#」を付けたり外したりで設定するが、「No」も使えるはずで、その辺が絡んでくるのかも知れない。
通常、「anonymous」にアップロードは許可しないので問題ありませんが、ちょっと混乱してしまいました。この部分に関してはコマンドラインで設定するのが良いかも知れません。
↓解決。
■「Webmin」での設定変更と「vsftpd.conf」との関連
|
と表記されており
「#~~~=YES」は「No」を表し(というか「設定なし」=「No」という感じかな)、
「~~~=YES」は「Yes」を表しています。
次に「Webmin」で設定する場合、HTMLのラジオボタン形式で「Yes」「No」を明示的に選択するようになっています。当方は
「Yes」は「~~~=YES」
「No」は「#~~~=YES」
として、「vsftpd.conf」に反映されると考えておりました。
しかし実際には「Webmin」で設定し、アップロードはできるようになったのに「vsftpd.conf」の「#anon_upload_enable=YES」はコメントアウトされたままだったので、混乱してしまいました。
「anon_upload_enable=YES」となると考えていたのです。
色々設定をいじってみたのですが、結果解ったのは、
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
これらが追記されておりました。「vsftpd.conf」の一番最後に。見落としていました……。
ごらんのように、「Webmin」で設定した場合、「#」ではなく普通に「YES」「NO」で追記する形で変更されると言うことです。
手動、「Webmin」の両方で設定を変えている場合は、気をつける必要があるかも知れません。
「webmin」に「vsftpd」の制御をさせる。 [Webimin]
■サードパーティ製の「vsftpdモジュール」をダウンロード。
これを「Webmin」にインストールするのですが、方法は沢山ありましたが、今回は「Windows」にファイルをダウンロードしてから、ブラウザを通してインストールしてみます。
■サードパーティ製の「vsftpdモジュール」をインストール。
|
「Webmin」→「Webmin 設定」→「Webmin モジュール」→「アップロードしたファイルから」→「ファイルを選択」→「ファイルからモジュールをインストール」
インストール完了。
次に
「サーバ」→「Vsftpd」→「Module Configuration.」→「The path and filename to vsftpd.conf」→書き換え「/etc/vsftpd/vsftpd.conf」
と、パスの変更をするだけで、驚くほど簡単にインストールできましたね。
「vsftpd」は先日インストールしましたが、何も設定らしいことをしていないのでこれでいじってみましょう!
と意気込んでみましたが、それほど詳細な項目はありませんねぇ。
■---追記---「Webmin」での設定変更と「vsftpd.conf」との関連
|
と表記されており
「#~~~=YES」は「No」を表し(というか「設定なし」=「No」という感じかな)、
「~~~=YES」は「Yes」を表しています。
次に「Webmin」で設定する場合、HTMLのラジオボタン形式で「Yes」「No」を明示的に選択するようになっています。当方は
「Yes」は「~~~=YES」
「No」は「#~~~=YES」
として、「vsftpd.conf」に反映されると考えておりました。
しかし実際には「Webmin」で設定し、アップロードはできるようになったのに「vsftpd.conf」の「#anon_upload_enable=YES」はコメントアウトされたままだったので、混乱してしまいました。
「anon_upload_enable=YES」となると考えていたのです。
色々設定をいじってみたのですが、結果解ったのは、
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
これらが追記されておりました。「vsftpd.conf」の一番最後に。見落としていました……。
ごらんのように、「Webmin」で設定した場合、「#」ではなく普通に「YES」「NO」で追記する形で変更されると言うことです。
手動、「Webmin」の両方で設定を変えている場合は、気をつける必要があるかも知れません。
「vsftpd」をインストールする。 [vsftpd]
■「vsftpd」のインストール準備。
|
それが「FTP」を利用してアップ/ダウンロードする場合にはそれらの違いを自動に行ってくれるとのことなので(無論設定は初めにするのでしょうが)、「FTPサーバ」は立てて置いた方が良いかも知れないということで、挑戦です。
まずは既に古いバージョンがインストールされていないか確認しました。無いようです。
公式サイトで最新バージョンをダウンロードします。(The latest vsftpd release is v3.0.2)
ダウンロードファイルを置くディレクトリにいつも迷ってしまいます。今回は「/root/rebuild/SOURCES」に。(その後サイトを見たら「cd /usr/local/src」が多かったです。)
ファイルを展開し、作成されたディレクトリの内部を「ll」コマンドで確認します。
「SPECファイル」が存在すれば、「rpmbuild」コマンドを使用して「RPM」ファイルを作成することができると思ったのですが、無いようなので「コンパイル」をしないといけないようです。
作成されたディレクトリの内部にある「INSTALL」ファイルを「less」コマンドで開いてインストール時の指示を読んでみます。
「builddefs.h」というファイルを編集するようですね。
「vi」コマンドで開いてみると、意外と少ない行数でした。調べてみましょう。
「#ifndef」と「#endif」はセットで使うようでコンパイルの前に実行されるコマンドのことだそうです。初めと終わりという感じなのでこれらに挟まれた「VSF_BUILD_TCPWRAPPERS」「VSF_BUILD_PAM」「VSF_BUILD_SSL」をいじれば良いのかと思います。
「#define」と「#undef」が「有効」と「無効」に当たると思います。(コメントアウトを外すか否かと思いました。)つまり現状では「VSF_BUILD_PAM」だけが有効と言うことですね。これを自分の環境に合ったものに編集します。
「PAM=認証」「SSL=暗号化」「TCPWRAPPER=フィルタリング」と言ったところでしょうか。つまり、セキュリティについての設定ですね。
とりあえず全て「define」としてみます。
「make」を実行するわけですが、ミスを犯しました。当方は作業をしながらメモ代わりにブログの記事を書いているのですが、「define」としたつもりが記事には書いたものの、実際の方は無変更のまま「make」をしてしまいました。
「make」のやり直しには「make clean」それでだめなら「make mrproper 」とのことで前者でやり直せました。メモ。
「man」ディレクトリを作成します。マニュアル関係のようです。
■「vsftpd」のインストール、ファイルコピー。
|
「PAM」用にファイルを指定場所にコピーしていきます。そのためのディレクトリ「/etc/vsftpd」作成です。にしても、全て手動なんですねぇ。所有者もパーミッションも変更します。
■「vsftpd.conf」の編集。
|
オプション編集項目の意味は書き込むと長くなるので省略します。検索すればいくらでも情報が手に入ります。
注意点は、作成したディレクトリ名を間違えないことですかね。
■各種ファイルの作成。
|
まぁ、記載されたユーザーを制御すると言うことでしょう。「YES」の場合は対象ユーザーがいなくてもファイルは必要とのこと。ゆえに空ファイル。
「/etc/ftpusers」はFTPのアクセス制限をかけることができます。この中にユーザ名が記述されている場合、そのユーザはアクセスを拒否されます。
一行に一ユーザづつ記入していきます。とのこと。
「/etc/vsftpd/user_list」はvsftpd.confの設定により、user_listの意味が異なるとのことで注意が必要そうです。
「user_listファイルに追加したユーザーのアクセスを禁止する場合」(ブラックリストかな)
userlist_enable=YES で
userlist_deny=YES のとき。
「user_listファイルに追加したユーザーのアクセスを許可する場合」(ホワイトリストかな)
userlist_enable=YES で
userlist_deny=NO のとき。
「/etc/hosts.allow」(denyもある)は「vsftpd」だけのファイルというわけではないようです。
このファイルに記載されているものは許可されるということで、
書式は「デーモン名:ホスト名またはIPアドレス 」という形で示されます。
今回は、全てのデーモンは「ローカルホスト」からは接続可能。「FTPサーバ」は「192.168.0.」からは接続可能。ということでしょうかね。
「xinetd」はスーパーサーバと呼ばれとあるポートに対するアクセスがあった場合に、各ポートに対応するデーモンを起動する。とのこと。
つまり普段は常時起動してなくても誰かからポートにアクセスがあれば自動に起動してくれるということでしょうか。
今回はこれを停止しておきます。
■「rcスクリプト」の作成。
|
当然ですが、当方には絶対無理なので、下記サイト様にあるものをそのまま使用させていただきました。というか今回はほとんどこちらの情報を使用させていただいております。
誠にありがとうございました。
http://ja.528p.com/linux/centos6/ZH002-vsftpd.html
■「vsftpd」の動作確認。
|
逸ってしまった結果でしたが、「iptables」を編集してポートを開けてやるのを失念しておりました。
ポートを空けて、再起動してやり再度「vsftpd」を起動してやります。
そして起動を確認。動いてくれているようですね。
■「FTPクライアント」で接続。
|
現在ユーザーなどの設定もしておりませんので、「ftp」か「anonymous」を使うことにします。
まずは、「CentOS」の「anonymous」用に作ったディレクトリ「/home/ftp/pub/」に「test.txt」ファイルを「vi」コマンドで作成します。
次に、「Windows」で「コマンドプロンプト」で「FTPクライアントモード」を起動し、ファイルを確認してダウンロードします。
できましたー!
あとは、専用のユーザーを作ってアップロードなども試しましょう。
前の10件 | -