FTPサーバーでデータ共有

以下はUbuntuの英語フォーラムTutorial of the Weekの翻訳です。原文「Create a FTP server with user access」はユーザーfrodonによって執筆されています。英語フォーラムにおける投稿はCreative Commons Attribution 3.0です。この文章自体はCreative Commons Attribution Share Alike 3.0とします。最後のOther Stuffはリンク切れもあるので省きました。必要であれば原文を参照してください。

どうも、ですます調は英文の雰囲気と合わないので翻訳は基本的にである調にします。

このチュートリアルではWindowsのFTPservUのようにFTPプロトコルを使って友達とファイルを共有する方法を説明する。もちろんこの方法が唯一の方法ではないけれど、分かりやすく書こうと思う。

ここで作るFTPサーバーは、知らない人間が勝手に入ってこないように、ちゃんとあなたがユーザー名とパスワードをあげた人にしかアクセスできないようになっている。

A – GUIバージョン(初心者専用)

Linuxを使い始めたばっかりでGUIのないFTPサーバーなんて使いたいとか、FTPサーバーを使う頻度が少ないのでセキュリティはともかくちゃちゃっと設定したいなんて人にはproftpdのGTKのGUIがある。でもこれは自分できちんと設定するのに比べるとセキュリティが甘いので気をつけて。

1. proftpdとgproftpdをsynapticでインストールする。

sudo apt-get install proftpd gproftpd

2. GUIを使ってさっさとサーバーを設定する。

この方法については特に説明しないけど、特に難しいことはないはずだ。

B – 安全な方法

1. proftpdをsynapticでインストールする。

sudo apt-get install proftpd

2. 次の行を/etc/shellsに書き込む(sudo gedit /etc/shellsなど)。

/bin/false

/home/FTP-sharedディレクトリを作成する。

cd /home
sudo mkdir FTP-shared

userftpというユーザーをftpアクセスのみの権限で差くせしよう。どうせ大したシェルは必要ないのでセキュリティの高い/bin/falseシェルを選ぶ。ホームディレクトリは/home/FTP-sharedにしよう。

GUIを使うのを勧めるけど分かりやすくするためコマンドも書いておく。繰り返しになるけどシステム、システム管理、ユーザとグループにあるGUIを使った方がいい。コマンドラインでユーザー・パスワードを作ると530エラーにぶち当たる人が多い。

sudo useradd userftp -p your_password -d /home/FTP-shared -s /bin/false
sudo passwd userftp

FTP-sharedディレクトリにdownloaduploadディレクトリを作ろう。

cd /home/FTP-shared/
sudo mkdir download
sudo mkdir upload

こいつらに適切なパーミッションを設定する。

cd /home
sudo chmod 755 FTP-shared
cd FTP-shared
sudo chmod 755 download
sudo chmod 777 upload

3. ではproftpdの設定ファイルに移ろう。

sudo gedit /etc/proftpd.conf

edgy eft (Ubuntu 6.10)ならこっちだ。

sudo gedit /etc/proftpd/proftpd.conf

proftpd.confを以下のような感じに自分のケースに合うように編集してくれ。

# To really apply changes reload proftpd after modifications.
AllowOverwrite on
AuthAliasOnly on

# Choose here the user alias you want !!!!
UserAlias sauron userftp

ServerName			"ChezFrodon"
ServerType 			standalone
DeferWelcome			on

MultilineRFC2228 on
DefaultServer			on
ShowSymlinks			off

TimeoutNoTransfer 600
TimeoutStalled 100
TimeoutIdle 2200

DisplayFirstChdir               .message
ListOptions                	"-l"

RequireValidShell 		off

TimeoutLogin 20

RootLogin 			off

# It's better for debug to create log files 😉
ExtendedLog 			/var/log/ftp.log
TransferLog 			/var/log/xferlog
SystemLog			/var/log/syslog.log

#DenyFilter			\*.*/

# I don't choose to use /etc/ftpusers file (set inside the users you want to ban, not useful for me)
UseFtpUsers off

# Allow to restart a download
AllowStoreRestart		on

# Port 21 is the standard FTP port, so you may prefer to use another port for security reasons (choose here the port you want)
Port				1980

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 8

# Set the user and group that the server normally runs at.
User                  nobody
Group                 nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask				022	022

PersistentPasswd		off

MaxClients 8
MaxClientsPerHost 8
MaxClientsPerUser 8
MaxHostsPerUser 8

# Display a message after a successful login
AccessGrantMsg "welcome !!!"
# This message is displayed for each access good or not
ServerIdent                  on       "you're at home"

# Set /home/FTP-shared directory as home directory
DefaultRoot /home/FTP-shared

# Lock all the users in home directory, ***** really important *****
DefaultRoot ~

MaxLoginAttempts    5

#VALID LOGINS
<Limit LOGIN>
AllowUser userftp
DenyALL
</Limit>

<Directory /home/FTP-shared>
Umask 022 022
AllowOverwrite off
	<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>
	DenyAll
	</Limit>
</Directory>

<Directory /home/FTP-shared/download/*>
Umask 022 022
AllowOverwrite off
	<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>
	DenyAll
	</Limit>
</Directory>

<Directory /home/FTP-shared/upload/>
Umask 022 022
AllowOverwrite on
	<Limit READ RMD DELE>
      	DenyAll
    	</Limit>

    	<Limit STOR CWD MKD>
      	AllowAll
    	</Limit>
</Directory>

これでproftpdの設定は終わり。この例ではポートが1980、アクセスパラメータはユーザー名sauronでパスワードはさっきuserftpに与えたものだ。

4. サーバーを起動・停止・再起動する。

sudo /etc/init.d/proftpd start
sudo /etc/init.d/proftpd stop
sudo /etc/init.d/proftpd restart

proftpd.confの構文チェックは次のコマンドだ。

sudo proftpd -td5

現在接続中のユーザーはftptopコマンドで分かる。ftpwhoも使える。

C – 高度な技

TLS/SSL暗号化の導入

FTPはインターネットがまだ安全な場所だったときに生まれた古いプロトコルだ。はっきり言ってそのままの状態ではセキュリティがなってない。

例えばログインのときのパスワードとユーザー名は平文でネット上を流れていく。お世辞にも安全とは呼べない。それが、まさに我々の世代のために、TLS/SSHという暗号化が開発された理由だ。

TLS/SSHはユーザー名とパスワード、そして送られるデータ全てを暗号化する。言うまでもなくFTPクライアントSFTPプロトコルに対応している必要はあるが。

ではTLS/SSH暗号化を設定する方法に移ろう。

次のコマンドを端末に張り付けてくれ。

sudo apt-get install build-essential
sudo apt-get install libssl-dev
cd /etc
sudo mkdir ftpcert
cd ftpcert/
sudo openssl genrsa -des3 -out server.key 1024
sudo openssl req -new -key server.key -out server.csr
sudo openssl genrsa -des3 -out ca.key 1024
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt
sudo wget http://frodubuntu.free.fr/ubuntu/sign.sh
sudo chmod +x sign.sh
sudo ./sign.sh server.csr

そして以下の部分をproftpd.confファイルに付け加える。

<IfModule mod_tls.c>
    TLSEngine on
    TLSLog /var/ftpd/tls.log
    TLSProtocol TLSv1

    # Are clients required to use FTP over TLS when talking to this server?
    TLSRequired off

    # Server's certificate
    TLSRSACertificateFile /etc/ftpcert/server.crt
    TLSRSACertificateKeyFile /etc/ftpcert/server.key

    # CA the server trusts
    TLSCACertificateFile /etc/ftpcert/ca.crt

    # Authenticate clients that want to use FTP over TLS?
    TLSVerifyClient off
</IfModule>

edgyないしproftpd 1.3を使っているなら次の一分をproftpd.confにつける必要がある。こいつはmod_tls.cのようなモジュールを読み込んでくれる。

Include /etc/proftpd/modules.conf

注意:TLSRequired ONでTLSの利用を強制できる。OFFにすると利用の是非はクライアント次第だ。

オプション:サーバーを開始・停止・再起動するたびにserver.keyファイルのパスワードを聞かれるはずだ。これはRSAプライベートキーがserver.keyファイルに格納されているためだ。これを解決するにはRSAプライベートキーの暗号化を取り除けばいいがそうするとキーがサーバー上で読めてしまう。これはセキュリティ上よくないが、もしやるならserver.keyはrootにだけ読み込み可能になっていることは確認してくれ。セキュリティの問題に納得したらRSAキーの暗号を取り除こう。

cd /etc/ftpcert
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

問題が見つかった場合やもっと知りたい場合には次のページを見てくれ。

TLSで暗号化されたFTPサーバーを利用するにはTLSをサポートしている最新版のFilezillaのようなクライアントが必要だ。FilezillaではTLSを使用するオプションはFTPESと呼ばれている。

色々と教えてくれたnix4mにはここで敬意を表しよう。

一部のユーザーーのアクセスに制限を加える

様々な理由で、複数のユーザーを作って、ユーザー毎に違う権限を与えたいなんてこともあるだろう。

例えば二人のユーザー、user1とuser2、がいてuser2にはdownloadディレクトリへのアクセスを拒否したいとしよう。

まず二人のユーザーをuserftpのように作成する。エイリアスを使っているならエイリアスも与える。そして一般的なLimit LOGINセクションで両者に権限を与える。

#VALID LOGINS
<Limit LOGIN>
AllowUser user1
AllowUser user2
DenyALL
</Limit>

それが終わったらDirectoryセクションで誰がどのディレクトリにアクセスできるかを指定する。

<Directory /home/FTP-shared/download/*>
Umask 022 022
AllowOverwrite off

        <Limit ALL>
		Order Allow,Deny
		AllowUser user1
		Deny ALL
	</Limit>

	<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>
	DenyAll
	</Limit>
</Directory>

<Directory> /home/FTP-shared/upload/>
Umask 022 022
AllowOverwrite on

       <Limit ALL>
		Order Allow,Deny
		AllowUser user1
                AllowUser user2
		Deny ALL
	</Limit>

	<Limit READ RMD DELE>
      	DenyAll
    	</Limit>

    	<Limit STOR CWD MKD>
      	AllowAll
    	</Limit>
</Directory>

注意:downloadディレクトリの存在はuser2にも見える。中に入ることができないだけだ。

その他

・おすすめ運営法

http://www.castaglia.org/proftpd/doc…HOWTO-BCP.html

・ProftpTools 1.0.1

ProftpToolsはswoopのフィードバックから私が作成したスクリプトだ。このスクリプトを使えばproftpdを起動・停止したり、ディレクトリの自動・手動でのマウント・アンマウント、IPの表示などいろんなことがGUIで簡単にできる。

ProftpdToolsをインストールするにはProftpTools-v1.0.2.tar.gzをダウンロードする。以下のコマンドでもできる。ダウンロードしたら解凍して/usr/binに移動だ。

wget http://frodubuntu.free.fr/ubuntu/ProftpTools-v1.0.2.tar.gz
tar -xzvf ProftpTools-v1.0.2.tar.gz
cd ProftpTools-v1.0.2/
sudo mv ProftpTools /usr/bin/

そしたらホームディレクトリにある.bashrcにProftpToolsのパスを指定してやる。パスの最後にある/を取り除くのを忘れないように。ProftpToolsがホームディレクトリにあるなら次の通りだ。

ProftpTools_dir=/home/username/ProftpTools-v1.0.2
export ProftpTools_dir

あとはProftpToolsと端末で叩いてやるだけだ。こいつの利用にはzenityも必要だ。

・おすすめトリック

このトリックはProftpToolsに取り込まれている。

/homeを使いたくないなら他のドライブのスペースを使うことだってできるし、何なら違うパーティッションだっていい。proftpd.confファイルをいじらなくても、好きなディレクトリをdownloaduploadディレクトリにマウントすることができる。次のコマンドを使おう。

sudo mount -o bind the_directory_you_want_to_share /home/FTP-shared/download
or
sudo mount -o bind the_directory_you_want_to_use_for_upload /home/FTP-shared/upload

このコマンドはディレクトリを上書きしてしまうわけではない。単にマウントするだけだ。他のユーザーがログインするとマウントされたディレクトリがみえる。例えばdownloadディレクトリをアンマウントしたいならこうだ。

sudo umount /home/FTP-shared/download

再起動するごとに毎回マウントしなおしたくないのならfstabを編集して次の行を加えよう(sudo gedit /etc/fstab)。これはreetのアイデアだ。

the_directory_to_mount /home/FTP-shared/download vfat bind 0 0

FTP-sharedに他のディレクトリを加えたいならproftpd.confに加えてくれ。gFTPなんかで自分のFTPサーバーをチェックするのもよい。

ファビコンの簡単な取得法

ファビコンというのはウェブサイトに設定されているアイコンのこと(例:Google Favicon)。ちょっと調べたら、ファビコンの格納場所はhtmlを読まないと分からないけどgoogleを使えば簡単に手に入るようだ。

Retrieve the Favicon for any URL thanks to Google (CodingClues)

方法は簡単だ。例えばwww.google.comであれば以下のURLをブラウザに打ち込めばよい。

http://www.google.com/s2/favicons?domain=www.google.com

これでファビコンだけが表示されるので右クリックで保存すればよい。

おかしなDSDTを直そう

以下はUbuntuの英語フォーラムTutorial of the Weekの翻訳です。原文「HOWTO Fix A Buggy DSDT File」はユーザー67GTAによって執筆されています。英語フォーラムにおける投稿はCreative Commons Attribution 3.0です。この文章自体はCreative Commons Attribution Share Alike 3.0とします。

このガイドではDebian系のOSで、DSDTファイルの直してよくあるACPI関連の問題を解決する方法を説明します。Mint 6及びUbuntu 8.10から自分のラップトップの温度測定がうまくいかず、キーを押しながら出ないとマシンがちゃんと起動しなくなりました。私の場合は、DSDTファイルが原因でした。ACPI/DSDTについてより詳しい情報はこちらにあります。このガイドはそのポストに触発された作られました。しかし、Debian系のOSでは多少違う操作が必要になります。ここではMint・Ubuntuでどうやったらいいかを説明します。

注意:OSが壊れる可能性があります。もしDSDTを直した後で何もエラーが出なくてもOSが起動できなくなる可能性があります。ハードウェアが壊れることはありません。

チュートリアルを始める前にまずBIOSをアップデートしましょう。DSDT関連バグを手動で直すのは最後の手段です。

まずIntelのDSDTコンパイラーを導入します。端末を開いて次のコマンドを実行します。

sudo apt-get install iasl

現在のDSDTファイルをホームフォルダに保存します。

sudo cat /proc/acpi/dsdt > dsdt.dat

iaslを使ってDSDTファイルをディスアセンブルしましょう。

iasl -d dsdt.dat

dsdt.dslというファイルができるはずです。これが今から編集するファイルです。編集を終えたらこのファイルから新しいDSDTを作成します。ではiaslでdsdt.dslを再コンパイルしてエラー・警告・最適化などがでないか見てみます。<yourusername>はあなたのユーザー名に変えてください。

iasl -tc /home/<yourusername>/dsdt.dsl

リコンパイルの様子が出力されます。エラーを見つけたら好きなエディタでdsdt.dslを直します。エディタの設定で行番号を表示しましょう。エラー出力の行番号からエラーを探し出せます。以下はよくあるエラーの例です。dsdt.dsl 349とは349行目にエラーがあるという意味です。その行まで進みエディタで直して保存します。

dsdt.dsl   349:     Method (\_WAK, 1, NotSerialized)
Warning  1079 -                 ^ Reserved method must return a value (_WAK)

編集を行う度に保存してリコンパイルしましょう。

iasl -tc /home/<yourusername>/dsdt.dsl

これで修正したファイルをコンパイルできます。出力をみて状況が改善しているのを確認しましょう。以下のリンクにはよくあるエラーと直し方が載っています。

運がよければあなたのマシン・モデル用の修正済ファイルがこちらで見つかるかもしれません。見つかれば最後の二つのコマンドは必要なくなります。

dsdt.dslファイルを修正できたらdsdt.amlファイルがホームフォルダに作られているはずです。これがこのチュートリアルで作成しようとしているファイルです。

注意:ここまではまだシステムへ何の変更も加えていません。作成されたファイルを削除すれば元通りになります。これからカスタムDSDTを起動に使うようなり、元に戻すことはできなくなります(復元方法は後述されています)。

それではdsdt.amlファイルの名前を変更して/etc/initramfs-toolsフォルダーに移しましょう。

sudo cp dsdt.aml /etc/initramfs-tools/DSDT.aml

起動時にDSDTを上書きするようにinitrdイメージが更新します。

sudo update-initramfs -u -k kernel-version

kernel versionは自分が利用しているカーネルのバージョンに変更する必要があります。カーネルのバージョンは以下のコマンドで確かめてください。

uname -r

では再起動してみます。うまくいっているかdmesgの出力をチェックしましょう。端末で以下のコマンドを実行します。

dmesg > /home/yourusername/Desktop/dmesg

デスクトップのテキストファイルにdmesgの出力が書き出されます。以下のような内容なはずです。

[    0.020495] ACPI: Checking initramfs for custom DSDT
[    0.353464] ACPI: Found DSDT in DSDT.aml.
[    0.353470] ACPI: Override [DSDT-   MCP67], this is unsafe: tainting kernel
[    0.353478] ACPI: Table DSDT replaced by host OS
[    0.353482] ACPI: DSDT 00000000, 7CB3 (r1 NVIDIA    MCP67  6040000 INTL 20061109)
[    0.353487] ACPI: DSDT override uses original SSDTs unless "acpi_no_auto_ssdt"

dmesgの出力と/proc/acpiが実行前後で変わっているか確認しましょう。特に/proc/acpi/fanや/proc/acpi/thermal_zoneの中身があるかどうか(もし以前はなかったのであれば)見てみましょう。この過程で発見したことに起動時にOSを指定することがあります。これについては先に挙げたリンク先を参照してください。次の行をブートオプションに加えるだけでOSがハードウェアを違うように見るようになります。

acpi_osi="Linux"

この方法はVistaがプレインストールされたHPのラップトップで特に有効なようです。その方法はこちらに書いてあります。DSDTのコードは大変読み辛く私自身を全てを理解しているわけではありません。私のHPのデスクトップはエラーはありませんが、警告は四つ残っています。全て問題なくどうしているのでそのままにしてあります。ラップトップの方は完璧になっています。ちなみにHP dv6815nrなので同じモデルを持っていれば私のDSDTファイルを使えます。DSDTファイルはコンピュータ毎に異なります。全く同じハードウェア出ない限り他のマシンのDSDTを使ってはいけません。

カスタムDSDTを削除するには以下のコマンドを実行してください。

sudo rm /etc/initramfs-tools/DSDT.aml

その後initイメージ更新します。

sudo update-initramfs -u -k kernel-version

再起動すれば元の状態に戻ります。

この方法は開発中のカーネルには使えません。DSDTを変更できるようにするパッチは安定版カーネルにしか含まれないためです。

更新:カーネル開発者はDSDTの変更を可能にするパッチをKarmic 9.10以降使わないと決めたようです。この方法が機能するのはJaunty 9.04までとなります。DSDTエラーにつていはバグ報告をするようにしましょう。

日本の衰退と労働環境

フランス人学者Guy Sormanによる日本衰退についてのエントリー:

Japan’s Road to Harmonious Decline from Project Syndicate

From 1988 to 1993, the legal work week fell 10%, from 44 hours to 40. This, as much as anything, helped to bring Japan’s long-running post-WWII economic “miracle” to its knees.

日本の成長が止まったのは労働時間の短縮だと主張しているが、実労働時間は本当に減ったのだろうか。少なくとも自分の知り合いを見ると死ぬほど働いてる人が大多数のように思う。

Moreover, public opinion never supported Koizumi’s policy, which was alleged then, as it is now, to be a source of inequality.

そうだろうか。小泉政権の経済政策は人気があったような気がする。それに対し民主党政権については次のように述べている。

The recent electoral triumph of Yukio Hatoyama’s untested DPJ thus confirmed the popular wish not to follow America’s free-market model. Hatoyama makes no economic sense in declaring that growth is important but that happiness comes first. Nevertheless, this sentiment does reflect the mood of many Japanese.

鳩山政権の政策の多くが経済学的には意味不明なのはまさにその通り。

しかし、今回民主党が劇的な勝利を遂げたのでのは政策や思想の問題なんだろうか。むしろ近年選挙結果の振れ幅が異常に大きくなったことのほうが印象的だ。

one must ask whether today’s Japanese are willing to work more in order to catch up with the United States and to lead Asia development

いやだから、これ以上働くのは無理だと思う。どこをどう見てもアメリカ人のほうが働いていない。

どうも記事全体がメディアでの日本の報道を丸飲みにして執筆されているように思われるのだがどうだろう。まあ日本政治についても、マクロ・成長論についても詳しくないので何とも言えないのではあるが。

マイケル・ムーア新作続報

この前マイケル・ムーアのコメントについて書いたが彼の新作に関するしょうもないニュースがあった:

How Goldman Backed Moore’s ‘Capitalism’ Movie :: The Future of Capitalism via The Business Insider

The funniest moments of all in the movie, though, may just be in the opening and closing credits. We see that the movie is presented by “Paramount Vantage” in association with the Weinstein Company. Bob and Harvey Weinstein are listed as executive producers. If Mr. Moore appreciates any of the irony here he sure doesn’t share it with viewers, but for those members of the audience who are in on the secret it’s all kind of amusing. Paramount Vantage, after all, is controlled by Viacom, on whose board sit none other than Sumner Redstone and former Bear Stearns executive Ace Greenberg, who aren’t exactly socialists. The Weinstein Company announced it was funded with a $490 million private placement in which Goldman Sachs advised. The press release announcing the deal quoted a Goldman spokesman saying, “We are very pleased to be a part of this exciting new venture and look forward to an ongoing relationship with The Weinstein Company.”

何でも映画の後に流れるクレジットを見るとParamount Vantageが出てくるそうだ。Paramount VantageはParamount Picturesの一部だが、そのParamount Picturesは巨大メディアコングロマリットViacomの子会社だ。またParamount Vantageと関係が深いとされているWeinstein Companyは独立系の映画製作会社として経済的成功を収めているがいろいろと悪い噂がある。経営者で映画監督のWeinstein兄弟は映画のエグゼクティブ・プロデューサーとして名を連ねている。さらにはWeinstein CompnayはGoldman Sachsから多額の融資を受けているそうだ。

この記事の著者もマイケル・ムーアがでは一体何を推し進めているのかには疑問があるようだ。

He’s even right that capitalism is imperfect. But Mr. Moore doesn’t make a convincing case that any other system would be an improvement. He offers some tantalizing glimpses of worker-owned and managed cooperatives such as the Alvarado Street Bakery and Isthmus Engineering and Manufacturing, and he suggests that things would be better if there were a 90% top income tax rate, stronger labor unions (like in Germany), and a second bill of rights added to the Constitution guaranteeing a job at a living wage, health care, housing, and education.