
Ubuntu日本語フォーラム

ログインしていません。
お世話になっております。
今までDIgest認証とかBasic認証の設定は何度か行ってきたのですが、.htaccessと.htpasswdファイルを使ってクライアントが自分でBasic認証を設定する際には、.htpasswdファイルの暗号化文字列はどのように生成したらよいのでしょうか?
基本的にはcryptを使っているそうなのでperlやphpなどのcryptで暗号化してみると、Apacheのコマンドで行う際の暗号化とおよそ違う文字列になってしまいました。Basic認証で生成する暗号文字列はものすごく原始的な感じがします。
現在のところ、
http://www.chama.ne.jp/access/index.htm
こちらのサイトを使わせてもらって暗号化しておりますが、自身のサーバーにクライアント側から暗号化できるようにするにはどのような関数を使えばよいでしょうか?
オフライン
「クライアントで」というのが若干解せないのですが(「ユーザーが」の間違い?)、そのものずばり htpasswd コマンドでいかがでしょうか。
オフライン
hito による投稿:
「クライアントで」というのが若干解せないのですが(「ユーザーが」の間違い?)、そのものずばり htpasswd コマンドでいかがでしょうか。
hitoさん、いつもお世話になっております。クライアントというのは、サーバー側の反対側からのユーザーという意味だったのですが、そのような場合はどういう言い方をすればよいでしょうか。。。TelnetもSSLも使えない状況で、FTPサーバーのみにファイルをアップロードできる…というような状況でのBasic認証の設定ということなのです。htpasswdは端末などでは何度か使いましたが、対話形式なのでこのコマンドをシェルスクリプト上ではどのように使ったらよいのでしょうか?何せ端末が使えないという状況なので、ファイルに何らかのスクリプトを書いてアップして実行させるというようなことを考えております。
<?
$pass = `htpasswd passwd omnioo kanchouchoukan`;
print $pass;
print "OK";
?>
と書いてみたましたが、およそ見当違いな感じでした。。
巷で見かけるhtpasswdファイルを自動生成というようなサイトさんでは.cgiファイルでやっているようでしたが、Perlでやっているのか、Pythonでやっているのか、ちょっとわからなかったです。
今僕が考えられる範囲はこれぐらいなのですが、他に何か方法はあるでしょうか?
オフライン
クライアントというのは、サーバー側の反対側からのユーザーという意味だったのですが、そのような場合はどういう言い方をすればよいでしょうか。。。TelnetもSSLも使えない状況で、FTPサーバーのみにファイルをアップロードできる…というような状況でのBasic認証の設定ということなのです。htpasswdは端末などでは何度か使いましたが、対話形式なのでこのコマンドをシェルスクリプト上ではどのように使ったらよいのでしょうか?何せ端末が使えないという状況なので、ファイルに何らかのスクリプトを書いてアップして実行させるというようなことを考えております。
「端末」が何を指しているのはちょっとわからないのですが・・・要は、
1.クライアントと呼んでいる環境のOS・・・つまり、何が実行できる環境なのか。また、それを行うのは、クライアント=そのサイトを利用するユーザ(不特定多数か特定多数。いわゆる一般ユーザ)なのか、サーバ管理者(特定の小数(小規模なら1人))なのか。
2.クライアントから、サーバにはどうやって渡すのか、Webの画面上での入力なのか、FTPなのか。
あたりによって、方法が全然変わってきますから、その辺の情報がほしかったのではないかと思います。
1は、MS-Windows系で管理者(自分自身)、2は、FTPによるファイルのアップロード ということになる・・・ということでしょうか?
# 私なら、「ローカルな(手元の)環境で」というような表現すると思います。クライアントというと、(私の場合は)一般利用者の環境(不定。おそらくブラウザから利用してくる)を連想しました。
Webによるシステム化と言う話しではないのでれば、直ぐに思いつく手としては、MS-Windows版(か、手元のOSにあったもの)のApacheを導入してhtpasswdを実行する・・・とかでは駄目でしょうか?
オフライン
BASIC 認証というのは、平文に近い形で ID とパスワードをパケットで流してしまいますので、SSL が使えないのであれば、事実上セキュリティとは呼べないものですので、例え使えたとしてもあまり意味が無いと思います。
極めて簡単に盗聴されてしまいます。
そもそも、自身のサーバーというのが、何を意味しているのかよく分かりません。
自宅サーバとは違うのでしょうか???
自宅サーバなのであれば、直接ファイル等を設置すれば良いわけですし・・・。
レンタルサーバであれば、いまどき、セキュアなファイルのアップロード方法を提供していないところは、普通無いでしょう。
それに、サーバのセキュリティというのは、サーバマシン自体に適切な設定を施さないといけないわけで・・・。
ユーザ?から何らかのファイル?を送信しただけで、通信が暗号化されたり、サーバのセキュリティが高まるというようなお話は、あまり聞いたことがありません。
あと、最も重要な問題なのですが .htaccess ファイルにしろ .htpasswd ファイルにしろ、Web から簡単にアクセスできる場所にあってはいけないわけですが、そのヘンについては大丈夫なのでしょうか?
オフライン
あー、ごめんなさい(汗
>.htaccess ファイルにしろ .htpasswd ファイルにしろ、Web から簡単にアクセスできる場所にあってはいけない
>
上記は、少なくとも .htaccess は認証をかけたいディレクトリに設置するので、ちょっと勘違いしました。
オフライン
SSL は openssl で自己認証局を設置して、簡単に自己署名の証明書を作成できますが、アクセスするたびにセキュリティの警告が出てしまい、毎回それをやっていると、MITM(中間者攻撃)を仕掛けられかねません。
不正な証明書でも、クライアントにインストールしてしまえば、一応は解決するのですが、これとても、すでに改竄がなされていたり、MITM 攻撃がされたあとだったりする可能性も皆無ではありません。
一応正式な SSL 証明書は、下記にて class1 が何と! 無料で取得できますので、使わない手はないでしょう。
startssl.com https://www.startssl.com/
期限は 1 年間なので、毎年更新する必要がありますが・・・。
class1 というのは、Verisign が決めた中では最低ランク(つまり一番信用できない)なんですけどね。
大規模なサービスをするなら問題でしょうが、個人使用や企業でも特定の部門だけとかなら、あまり問題は無いでしょう。多分。
IE、Firefox、Chromium、Midori で検証しましたが、セキュリティの警告は出なくなります。
携帯は出ますね、少なくとも so906i では。キャリアや機種によって異なるかもです。
証明書の取得の仕方は下記サイトに詳しいので、参考にしてみてください。
http://www.insaneworks.co.uk/kota/ssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E7%84%A1%E6%96%99%E3%81%A7%E5%8F%96%E5%BE%97
http://futuremix.org/2009/02/startssl
私自身が使っているものなので、うまく設置できるまでサポートはいたしますよ。
オフライン
>petitbootangさん
しばらく間をあけてしまって申し訳ありませんでした。
最初の話題から説明しますと、今現在、仕事(会社)で一人のユーザーとしてレンタルサーバーを使用しているのですが、そのレンタルサーバーでは勿論セキュリティーもしっかりしている普通のサーバーなのですが、Basic認証を設定する際には.htaccessファイルを自分で作成して(FTPアップロードして)設定することが可能です。しかし、いわゆるその限りなく平文に近いパスワードの暗号化というのは、Root権限がないので、
# htdigest -c digest_passwd AuthPage <ユーザー名> (あ、これはDigest認証ですね…。。。)
みたいなコマンドが使えません。ですので、http://orange-factory.com/tool/crypt.cgi こういうサイトでパスワードを作って設定してください、ということになっております。
一方私自身も日曜サーバー管理者で、コツコツ勉強中なのですが、上記のサイト(http://orange-factory.com/tool/crypt.cgi)みたいなものを自身で作れたら便利だなと思ったわけです。勿論自分のサーバーではスーパーユーザー権限で操作できるためにいろいろと操作ができるわけですが、Root権限を持たない場合でもWeb上からBasic認証の暗号化(crypt)ができると便利だなと思っていたところです。しかし、その際にどのアルゴリズムを使っているのか全くわからなかったのでここで質問してみた次第です。
話が複雑で申し訳ありません。
そしてセキュリティーの話、大変参考になりました!ありがとうございます。いづれはSSLを入れてみたいと思っていたので大変参考になりました。
いつもいろいろありがとうございます!
オフライン
Basic認証を設定する際には.htaccessファイルを自分で作成して(FTPアップロードして)設定することが可能です。しかし、いわゆるその限りなく平文に近いパスワードの暗号化というのは、Root権限がないので、
# htdigest -c digest_passwd AuthPage <ユーザー名> (あ、これはDigest認証ですね…。。。)
みたいなコマンドが使えません。ですので、http://orange-factory.com/tool/crypt.cgi こういうサイトでパスワードを作って設定してください、ということになっております。
レンタルサーバで、認証をかけたいディレクトリに、.htaccess を自分でアップロードするというのはごく普通のことですよね。
その、ご使用の、orange-factory というサイトの crypt がどの程度の堅牢性(つまり、強度)があるのか、ちょっと私には良く分かっていないのですが、htpasswd コマンドを使って作成したパスワードファイルよりも、多少複雑化しているということなんでしょうか。
もしかして、勘違いされているかも知れませんが、ある程度さらに複雑化されているとしても、SSL を使用していない限りは、その多少複雑になった文字列が流れるだけですので、どのような仕組みで暗号化されたかを見破られれば、クラックされてしまう可能性はそれなりに高いと言えるでしょう。
最近は、契約すれば無料で SSL を使用できるサービスを提供している業者も多いので、そのようなところを選ぶのもポイントの一つではないでしょうか。
オフライン
いろいろありがとうございます。
なかなか僕自身の説明が上手ではなくて話がうまく伝わっていなかったのですみません。
質問の内容をいろいろを探し回ったあげくやっと発見しました。
PHPのコードで書けば、
$id = 'username';
$password = '123456';
$sal = substr($id,0,2);
$password_crypted = crypt($password,$sal);
というコードでBasic認証の暗号化ができるそうです。ただのcryptでした。(ちょっと驚きです。)
確かにセキュリティー的にはかなり弱いとされていますよね。。。。
オフライン
質問の内容をいろいろを探し回ったあげくやっと発見しました。
PHPのコードで書けば、
$id = 'username';
$password = '123456';
$sal = substr($id,0,2);
$password_crypted = crypt($password,$sal);
というコードでBasic認証の暗号化ができるそうです。ただのcryptでした。(ちょっと驚きです。)
確かにセキュリティー的にはかなり弱いとされていますよね。。。。
暗号化という言葉に魅力を感じているのかも知れませんが・・・。
どのような複雑化したパスワードを生成しようとも、BASIC 認証においては、その複雑化した文字列をほぼそのまま流してしまうので、暗号化のアルゴリズムを見破られてしまえば、クラックされる危険性は排除出来ません。
まぁ、数十桁の暗号化文字列を解読するのは、相当の時間がかかりますので、事実上は安全かも知れませんが。
SSL での暗号化通信というのは、上記とは根本的に異なるものです。
下記のようなサイトに比較的平易に解説されていますので、よろしければご参照ください。
https://www.sslcerts.jp/pki/
オフライン
>petitbootangさん
いろいろと貴重な情報ありがとうございます。
Basic認証の暗号化は、今ではすでにかなり危険なパスワード認証方法であることは十分承知しているのですが、どういうわけかどうしてもBasic認証じゃないとダメだという人がいまして、自前で暗号化するスクリプトを作るというようなことになってしまったのです。暗号化のアルゴリズムがcryptだったと知ってちょっと僕自身も驚きでした。
SSLとかSSHじゃないとほぼダメだと僕も思います。
またお世話になると思います。いつも貴重な情報ありがとうございます!!
オフライン
その、Basic 認証じゃなきゃダメだと言っている人は、意味が分かって言ってるのですか?
オフライン
返事が遅くなってすみません。
たぶんわかっていないと思います。
MD5とかsha1みたいなものとか、公開鍵とか共通鍵とか秘密鍵とかそういうものも全然わかっていないと思います。
オフライン