blog.鶯梭庵

二〇一五年 神無月 十八日 日曜日

su と sudo のセキュリティ [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

Unix/Linux 系 OS では、なんでもできる権限を持った「スーパーユーザー」は通常 root と呼ばれる。root は本当になんでもできるので、システムを動かなくすることもできる。そのため、普段 root でログインするのは好ましくない。普段は通常ユーザーでログインして、必要に応じて root の権限を得る。そのためのコマンドに su と sudo がある。一般に、sudo は su のセキュリティを向上したものと言われる。ところが、sudoを使わない理由というページを見つけたので、su と sudo の違いについて改めて考えてみた。

su と sudo の大きな違いの 1 つは、su で root になるときには root のパスワードを入力する必要があるのに対し、sudo で root 権限を得るにはログインしているユーザーのパスワードを入力するということだ。第三者が root 権限が必要なコマンドを実行しようとした場合、su であればあるユーザーのユーザー名とパスワードに加えて root のパスワードを知らなければならないが、sudo ではユーザー名とパスワードを知っているだけでよい。その点だけ見ると、su の方がセキュリティ上よいように思える。

個人で運用しているサーバーなどで、管理者が 1 人であれば、確かに su のほうがよい。しかし、管理者が何人かいるような運用では、sudo に利点がある。

su を使うなら、それぞれの管理者に root のパスワードを教えなければならないが、それはよろしくない。また、sudo では、ユーザーごとに実行したコマンドのログが残るから、root 権限が必要なコマンドを誰がいつ実行したのかが記録される。さらに、sudo ではユーザーごとにどのコマンドをどの権限で実行できるか細かく指定できる。それに対し、su では、wheel グループに属するユーザーと属さないユーザーとで設定を変えるくらいしかできない。

さて、Mac OS X や Ubuntu では、root でのログインはできなくなっていて、sudo を使うことになっている(Mac OS X も Unix 系の OS であり、root ユーザーが存在する)。しかし、これらの OS は個人が使う場合のほうが多いはずで、セキュリティ上は sudo より su を使うほうがよいはずだ。なぜ sudo が使われるのだろうか。

これは推測だが、セキュリティより利便性を取ったのだろう。ログインパスワードはしょっちゅう入力するので忘れにくいが、root 権限が必要なコマンドは頻繁に実行するわけではないので、root のパスワードを忘れる人が続出することが懸念される。su では root のパスワードがわからないと root になれない。その点、sudo なら、覚えるべきパスワードは 1 つでよい。そのため、Mac や Ubuntu のような「一般向け」OS では sudo を使うようになっているのではないか。

[この記事だけを読む。] [最新の記事を読む。]

二〇一五年 長月 十二日 土曜日

Node.js + Express.js 覚書その3・サブドメイン [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

私のウェブサイトは現在3つのサブドメインに分かれている(折り紙とブログとその他)。それを Node.js で実現するにはどうするか。

いくつか方法があるようだが、すでに Apache でサブドメインを設定している場合、Apache のリバースプロキシを使うと簡単だ。

Apache でサブドメインを設定するには、バーチャルドメインを使用する。普通は VirtualHost の中に ServerNameDocumentRoot を指定するが、DocumentRoot の代わりに ProxyPassProxyPassReverse を指定して、転送先をポート番号で分ける。例えば以下。


<VirtualHost *:80>

ServerName ousaan.com

ServerAlias www.ousaan.com

ProxyPass / http://localhost:3000/

ProxyPassReverse / http://localhost:3000/

</VirtualHost>


<VirtualHost *:80>

ServerName blog.ousaan.com

ProxyPass / http://localhost:3001/

ProxyPassReverse / http://localhost:3001/

</VirtualHost>


<VirtualHost *:80>

ServerName origami.ousaan.com

ProxyPass / http://localhost:3002/

ProxyPassReverse / http://localhost:3002/

</VirtualHost>


そのうえで、Node.js 側でサーバーを3つ作って、それぞれが対応するポートをリスンすればよい。例えば以下。


express = require 'express'

servers =

www: express()

blog: express()

origami: express()


servers.www

...

.listen 3000, 'localhost'


servers.blog

...

.listen 3001, 'localhost'


servers.origami

...

.listen 3002, 'localhost'

[この記事だけを読む。] [最新の記事を読む。]

二〇一五年 文月 廿五日 土曜日

Node.js + Express.js 覚書その2・エラーページのカスタマイズ [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

Express.js でも、404 とか 500 とかのエラーページをカスタマイズできる。その方法は、FAQ ページに記載があるのだが、このページにはまだ日本語版がないので、解説しておく。

CoffeeScript を使ったコード例は以下の通り。


express = require 'express'

express()

.get '/', (req, res)->

res.sendFile __dirname + '/index.html'

.use (req, res)->

res.status(404).sendFile __dirname + '/404.html'

.use (err, req, res, next)->

res.status(500).sendFile __dirname + '/500.html'

.listen 3000


まずは前提として Application#use の仕様を確認しておく。このメソッドは引数としてパスと 1 つ以上のコールバック関数をとるが、パスを省略できる。パスを省略した場合、任意のリクエストでコールバック関数が実行される。ただし、コールバック関数の引数が 4 つであれば、その関数はエラーが起きたときに実行される。

Express.js は、サーバーが受け取ったリクエストに該当するミドルウェアを上から順番に探し、最初に見つかったミドルウェアを実行する。リクエストに該当するリソースがない場合、どのミドルウェアも実行されないが、その場合でもエラーは発生しない。単に組み込みの 404 ページが表示される。そこで、パスなしの Application#use をミドルウェアの最後に置いておけば、404 ページをカスタマイズできる。

500 エラーについては、パスなしの Application#use でコールバック関数の引数を 4 つにしたものを、やはりミドルウェアの最後に置く。エラーが起きたときは、リクエクトがなんであれ、そのコールバック関数が実行される。

[この記事だけを読む。] [最新の記事を読む。]

二〇一五年 水無月 十四日 日曜日

年金機構の情報流出事件に思う [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

日本年金機構から多量の個人情報が流出した。そもそもの発端は、5月8日に福岡の職員が「厚生年金基金制度の見直しについて(試案)に関する意見」というタイトルのメールを開き、リンク先のファイルを開けてしまったことだ。このタイトルならメールを開くのも仕方がないかとも思ったが、発信元は Yahoo! メールで、リンク先も Yahoo! のオンラインストレージだったという。そんな怪しいメールを開いてしまう職員がいるという時点で大問題だ。

その後、18日前後に約100通の標的型メールが送られたという。このときのメールはおそらく、8日に入手した情報をもとに巧妙に作られたものだろうから、全く怪しくないメールだっただろう。年金機構では「疑わしいメールを開くな」と全職員に通知していたそうだが、高度な標的型メールは全然怪しくないから、このような通知には何の意味もない。実際、このときのメールで27台のパソコンがウイルスに感染したという。

高度な標的型メールと通常のメールとを見分けることは、普通の人には不可能だ。とすると、添付ファイルを開くことがあるということを前提にして、それでも情報が漏れないシステムを作る必要がある。実際のところ、年金機構にもそのようなシステムがあったようだ。年金の情報は、インターネットにつながっていない基幹システムにあり、暗号化されていたという。であれば、インターネットにつながっているパソコンにウイルスが感染したとしても、情報を盗むことは困難だったはずだ。なぜ情報が漏れたのか。

信じがたいことに、一部の職員が年金情報を CD や DVD に書き出し、暗号を解除して Excel ファイルにした上で共有サーバーに置いていたという。これは全く言語道断で、年金機構に弁解の余地はない。

一方で、そのような運用が、システムが使いづらいせいだったとしたら、システムを作った側の責任も問うべきではないか。理屈の上でどんなに素晴らしいシステムでも、使ってもらえないのでは意味がない。年金機構のシステムの詳細については私は情報を持っていないが、現場での業務を十分に考慮して作られたシステムだったのだろうか。

年金機構にはもう一つ大問題がある。最初の感染が5月8日で、大規模感染が18日前後にあったというのに、インターネットを遮断したのは29日、漏えいを発表したのは6月1日だ。そのあいだ、22日と23日に不審な通信が検知され、28日には警察が情報流出を確認していた。一体、年金機構は3週間ものあいだ何をしていたのか。

現代の戦争は、戦車や戦闘機を使うばかりではない。金融戦争もあればサイバー戦争もある。今回の事件では、サイバー攻撃に対する日本の「防衛力」が限りなく低いことが露呈してしまった。日本を対象とした標的型攻撃は今までも増えていたが、今後ますます増えるだろう。そして日本は、70年前と同じように、敗退に敗退を重ねるだろう。

[この記事だけを読む。] [最新の記事を読む。]

二〇一五年 皐月 廿四日 日曜日

Node.js + Express.js 覚書その1・CoffeeScript を使う [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

このブログを含め、私のウェブサイトを大幅に手直ししようと思っていて、モタモタやっているうちに何年も経ってしまった。そのあいだにウェブの技術もいろいろ進んだので、せっかくだから新しいことをやろうと思い、いろいろ検討した結果、Node.js がよさそうだった。どのみちフロントエンドでは JavaScript を使うので、サーバーサイドでも JavaScript を使えば、使う言語が1つですむ。Node.js を裸で使うのは面倒そうだが、Express.js を使えば実用的になる。

何より気に入ったのは、CoffeeScript で書いたコードを JavaScript に変換せずにそのまま使えること。例えば、次のようなファイルを作って、server.coffee という名前にする。


express = require 'express'

express()

.get '/', (req, res)-> res.send 'Hello, World!'

.listen 3000


で、node コマンドの代わりに coffee を使って


coffee server.coffee


とする。ブラウザで 3000 番ポートにアクセスすれば、Hello, World! と表示される。


モジュールにも CoffeeScript が使える。helloWorld.coffee というファイルに


exports.world = -> 'Hello, World!'


と書いておいて、server.coffee ファイルを次のように書くと、


express = require 'express'

hello = require './helloWorld'

express()

.get '/', (req, res)-> res.send hello.world()

.listen 3000


やはりブラウザに Hello, World! と表示される。


Node アプリをデーモン化するには forever.js を使うことが多い。その場合は -c オプションを使って


forever start -c coffee server.coffee


とする。

[この記事だけを読む。] [最新の記事を読む。]

[もっと古い 5 件の記事を読む] [もっと新しい 5 件の記事を読む]

RSS feed

カテゴリ

[/language] (98)
[/links] (254)
[/mac] (114)
[/music] (36)
[/origami] (406)
[/this_blog/ajax] (7)
[/this_blog/blosxom] (4)
[/this_blog/history] (12)
[/this_blog/perl] (9)

最新記事

パスワードについてのあなたの常識はもはや非常識かもしれない・その1 [/links]
ニューラルネットワークとディープラーニングで翻訳はどうなる・その5 [/language]
ニューラルネットワークとディープラーニングで翻訳はどうなる・その4 [/language]
HTTPS 対応 [/links]
ひらがな・カタカナ学習ウェブアプリ [/links]
日本語の「た」と英語の過去形 [/language]
ORI-REVO で回転楕円体を折る・その2 [/origami]
ORI-REVO で回転楕円体を折る・その1 [/origami]
折り紙建築 [/origami]
折鶴に松図小柄 [/origami]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その6 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その5 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その4 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その3 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その2 [/links]

羽鳥 公士郎