systemdで複数の不具合が確認される 112
文法エラーなのか 部門より
多くのLinuxディストリビューションで採用されているシステム管理ソフトウェア「systemd」で、複数の不具合が確認されています。1つは、ユーザー名を指定する個所で数字で始まるユーザー名を指定すると、そのユーザーの代わりに「root」が指定されたことになってしまうというもの(MA.TTIAS.BE)。
多くのUNIX系OSでは、ユーザー名にはアルファベット小文字と数字、アンダースコアのみが利用でき、さらに先頭には数字は指定できないとされています。そのため、報告を受けたsystemd開発者のLennart Poettering氏は、「数字で始まるユーザー名が不正なのであってsystemdのバグではない」と主張している。しかし、そのようなユーザー名がuseraddでは問題なく作成できたり、adduserでも設定により作成できると指摘され、氏はこう返答しました。「(1)systemdは色々なシステムで動くようにするため、制限が厳しいこともある。(2) ユニットファイルにUser=で指定するユーザー名は一般ユーザーではなくシステムユーザーであるから、厳しく制限して当然。(3)systemdでは、文法エラーはログしてスルーというポリシーである。」
つまり、ユーザー名が間違っているだけならfatal errorとして停止するが、十進数で始まる名前は文法的エラーなので、ログだけ取って実行は続け、それゆえにrootとして実行されるということです。この点、開発者が「バグはない」と言い張る一方で、ユーザー名を認識できないバグと、そのままrootで動くバグの二つだろうという意見もあります。
もう1つの不具合は、バッファオーバーランの脆弱性です(CVE-2017-9445、マイナビニュース、threatpost)。名前解決のコードにバグがあり、バージョン223以降、つまりここ2年ほどの間のsystemdはTCPペイロードの細工により任意のコード実行まで可能かもしれない脆弱性があったとのこと。systemd-resolvedがデフォルトで起動されるシステムはあまり多くないようですが、ご注意ください。
systemdはそもそもの設計からして欠陥品 (スコア:4, すばらしい洞察)
ユーザー名を指定する個所で数字で始まるユーザー名を指定すると、そのユーザーの代わりに「root」が指定されたことになってしまう
な? 障害者レベルの設計だろ?
おまけにsystemdの開発者がクソなのは、PulseAudioやAvahiの時点で既に分かっていたので、今回の「数字で始まるユーザー名が不正なのであってsystemdのバグではない」という返答が帰ってくるまでが想定の範囲内という酷さ。
こいつらは、PID 1で常時動作するようなサービスマネージャーを、そこらの3分間クイックハックレベルの思考で設計してる。
かつての1ツイート(140字以内)でsystemdをクラッシュさせる方法 [gihyo.jp]やrm -rf バグ [preining.info]の時も感じたが。systemdがクソなのは、これやその他バグ自体ではなく、なぜこんなシンプルで重大なバグが何年ものあいだ放置されていたのか、いったいどんな品質保証プロセスを通ってきたのかという点。Ayerの意見には諸手を挙げて同意したい。
systemdは本業のinitと、やってもudev & dbus業務だけに専念してて。
余計なことまでしゃしゃってこないで。わりとマジで。
Re:systemdはそもそもの設計からして欠陥品 (スコア:1, 興味深い)
Q: なぜこんなバグが放置されていたのか?
A: つぶす前に増やしたから。十分に目があっても、それ以上に手指があるから。
「コードは書くんじゃない、消すものだ」とはよく言ったものだ。
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
> な? 障害者レベルの設計だろ?
Unix 系の OS ではユーザー切り替えやろうとすると
「デフォルトユーザーとして root にならないようにする」
という処理を加えないと、そうなっちゃうんだよ。
Windows とか Trusted Unix と呼ばれる類だと、デフォルトユーザーを意識しなければ、unknown とか NOUSER とか、何の権限もない状態になるからありえない話だが Unix系では何も考えないと root になるという仕様なのだからな。
Re: (スコア:0)
rootがユーザーの本質なんだから、そこの思想がおかしいとは思わんけどな。もちろん、現代的な倫理観に照らせば変だけど、そういうのはOSより上のレイヤが処理すべき話だろう。
Re: (スコア:0)
>rootがユーザーの本質
な、なにを言い出したのこの人…。
>OSより上のレイヤが処理すべき話
???
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
きっと何か大事な事を言ってる振りがしたかっただけ。俺は分かってるんだぞって。
# つまりは厨二病。滑稽だね。
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
> ユーザーの認証/切り替えに失敗したのに、rootのまま実行されるのは Linux の問題とは言える
いやいや、完全に systemd の問題でしょ。アプリケーションが、一時的に別のユーザーになろうとして
失敗したとき、そのまま処理するかどうかを決めるのはアプリケーションの責任以外の何物でも無い。
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
まったく同意。
ソフトウェアの進化について、バージョン2はとにかく機能を入れ込んで肥大化して使い物にならない、バージョン3で不要なものを分離・切り落としてやっと使いものになる…
という話が昔あったような気がするが、その話でいうと systemd は今のところまだバージョン2の状態のように見える。
# mishimaは本田透先生を熱烈に応援しています
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
Re: (スコア:0)
素朴な疑問なんだが、なんでこんなに問題の多い代物が多くのディストリビューションで採用されているんだ?
Re: (スコア:0)
抱き合わせ商法みたいな感じ
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
IO待ちや周辺機器の応答待ちなどでCPUがほぼ遊んでたからinitは遅かったんだよ。CPUのコアの性能が向上しようが殆ど影響ない
Re: (スコア:0)
開発者に合ったことはないけどレインマンみたいな感じなのかな
# 本人は善意でやってると思われ
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
逆だ!逆!
レインマンの弟みたいなやつに任せるからこうなった!
レインマンに頼めばこんなことにはなってない!
Re: (スコア:0)
(古典的)c言語の思想が根幹に染み付いたプログラマ(のコミュニティ)なら当然の考え方でしょ
引数の正当性は渡す側が責任を持つもので渡された側でチェックして対処するなんて非効率
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
仕様書読んだら嫌でも覚えるんじゃないですかね。 fopen() のアクセスモード引数に既定のもの以外の文字列を渡した場合の動作は未定義です、 free() に alloc 系の関数が返したのではないポインタを渡した場合の動作は未定義です、 strcpy() にオーバーラップする文字列を渡した場合の動作は未定義です、 etc etc...
Re: (スコア:0)
これで満足ですか?
Re: (スコア:0)
こういう表面的な言葉だけで議論を拒否して思考停止するやつばかりだから
世の中どんどんアホばかりになってくるんだよなぁ…
Re:systemdはそもそもの設計からして欠陥品 (スコア:2, 参考になる)
今はもうバグは少ないと思います。
以前PulseAudioをめちゃくちゃ批判していた人も謝罪 [blogspot.jp]しています。
何が嫌われたかというと、苦労してOSSからALSAに移行したばかりのタイミングで
RedHatの七光を使ってバグだらけのまま低品質な製品を押しつけただけであり、
デザイン自体は悪くなかったはずなんです。実際バグを減らした今では受け入れられています。
昔のバグを知りたいのであれば、JeffreyさんのブログでもPAのトラッカーでもいくらでも見ることができますよ。
Re:systemdはそもそもの設計からして欠陥品 (スコア:1)
> RedHatの七光を使ってバグだらけのまま低品質な製品を押しつけただけであり、
> デザイン自体は悪くなかったはずなんです。
ここだけ読むと systemd のことのようだ。
開発者問題 (スコア:3, すばらしい洞察)
とりあえず systemd は開発者が最大のセキュリティホールだと思う。サーバにはクライアント PC とは違ったレベルが求められるということを理解していない。
Re: (スコア:0)
これこそORACLEがフォークして開発だ!
#うーん
Re:開発者問題 (スコア:1)
OpenBSDがオイデオイデをしているよ!
仕様です (スコア:1, おもしろおかしい)
1,仕様です
2,仕様に決ってんだろ
3,仕様だっていってんだろ
Re:仕様です (スコア:1)
大昔にユーザ名はアルファベット小文字で始まるものと植え付けられてたので「数字で始まるユーザー名」と言うのは考えつかなかった・・・
>多くのUNIX系OSでは、ユーザー名にはアルファベット小文字と数字、アンダースコアのみが利用でき、さらに先頭には数字は指定できないとされています。
ユーザ名に "."(dot) を使えるところもあるから、そういうシステムと連携する時に何かと問題が出てたっけ。
Re: (スコア:0)
何故かドコモが思い浮かんだ
Re: (スコア:0)
昔はRFC違反のメールアドレスを認めてたんだっけ。
そういうところもあるから、不正なユーザで実行されたときにエラーで止める仕組みはないとダメだよねぇ。
Re: (スコア:0)
>大昔にユーザ名はアルファベット小文字で始まるものと植え付けられてたので「数字で始まるユーザー名」と言うのは考えつかなかった・・・
ユーザー名なんてクリティカルなものなんだから、判らなきゃ排除で良いだろうに。
Re: (スコア:0)
利用者はユーザー名なんて知る必要ないし打つ必要もない。
システムが勝手に"annyms12345"みたいな名前を割り振って、
"0†0 Anonymous Coward 0†0"
みたいな文字列と紐づけすりゃいいだけのような。メールとかtwitterとかだと先有権争いになるが……。
ログ出力でなく停止がデフォルトであるべき (スコア:1)
> systemdでは、文法エラーはログしてスルーというポリシーである。
ユーザーが編集しない限り変更が行われることがほぼないユニットファイルのエラーは停止によって通知すべきだ。
それを「文法エラー」と値のエラーでわざわざ区別して停止しない場合を作っているようだが、その区別のはっきりとした定義も意味も分からない。
Re:ログ出力でなく停止がデフォルトであるべき (スコア:1)
ユニットファイルにエラーがあるなら、そのユニットは起動しない、ということでしょう。
マルチユーザモードで動作するために必須のユニットであれば、重大なエラーなのだから、シングルユーザモードに落ちればよい。
systemd-shadow-utils (スコア:0)
つぎはsystemd-shadow-utilsですよ!
そして最終的にOSの全てがsystemdになって、
全てのLinux系ディストリビューションがそれに従ったので、
統一されてしまいましたとさ。
そもそも (スコア:0)
進むとかその辺はいいとして何故デフォルトがrootユーザなのだろうか・・・
Re: (スコア:0)
initだからじゃないか?
Re: (スコア:0)
uidがゼロだからでしょう
入力が不正なのが悪い (スコア:0)
はい?
となると世の中の脆弱性のほとんどがバグじゃなくなるよね。
Re: (スコア:0)
まあroot権限がないとunitfileは書けないわけだから
root権限で不正な入力をして不正な結果になるのは自業自得じゃろ。
remote exploitと一緒にするのは酷。
Re: (スコア:0)
他に脆弱性のあるアプリケーションがあって、その脆弱性を突けば unit ファイルを
書き換えることができるとしたらどうだろう。
開発者は誠実でなければならない (スコア:0)
MSやApple、Googleにも期待できない今、まだOSSには少し期待していたのだけど。
Re:開発者は誠実でなければならない (スコア:1)
ソースをオープンにする理由の一つは妙な細工がないことを担保するためで、
つまりOSSは最初から開発者が誠実でない場合があることを前提としている。
Re:開発者は誠実でなければならない (スコア:1)
>ソースをオープンにする理由の一つは妙な細工がないことを担保するためで、
そんなの妄想だよ。みんなソースなんか見てないよ。
バグ踏んだ不運な人が自分で修正しようとしたり、
新機能がほしい人が自分でパッチ書いたりすることもあるけど、
きわめてレアなケースだよ。
ましてや、開発元の配布している正式版ソースではなく、
distroのソースアーカイブに含まれているソースを検証してる人なんかまずいないよ。
たとえばRHELのopensslはopenssl.comから配布されていない非公式ソースから
ビルドされてるんだけど、そんなことほとんど知られていないし、検証もされてないよ。
Re: (スコア:0)
># We have to remove certain patented algorithms from the openssl source
># tarball with the hobble-openssl script which is included below.
># The original openssl upstream tarball cannot be shipped in the .src.rpm.
Re: (スコア:0)
もうちょっと他人にわかるように説明できないかな。
Re: (スコア:0)
現実がどうだろうが、兎に角「開発者は誠実でなければならない」なんで綺麗事をOSSは謳ってない。
親コメはOSSに期待するところを間違ってる。
Re: (スコア:0)
期待するのは自由でしょ。
(自分の)期待通りじゃないからって文句つけるのが筋違いなだけ。
Re: (スコア:0)
MSやApple、Googleにも期待できない今、まだOSSには少し期待していたのだけど。
OSSへの幻想は10年以上前に捨てた。
MSやGoogleがイノベーションを模索している間にLinux界隈は何してたよ?
Re:開発者は誠実でなければならない (スコア:1)
自分が使いたいものを作ってた。
Re: (スコア:0)
生まれた時からいつもそう。使わせてやってる奴からとやかく言われる筋合いはない。
# 文句あるなら自分で作れ、と正論で返されそうですね。
Re: (スコア:0)
企業に関して言えば違う顧客が使いたいものを作ってきたのだ。
例えばレッドハットの開発者が作ったSystemdとか。例えばレッドハットの開発者が作ったSystemdとか。例えばレッドハットの開発者が作ったSystemdとか。
まあ消費者が実感できるようなわかりやすいイノベーションはオープンソースソフトウェアからはでないと思うよ。ソフトだけ作って終わりではないから。
まあ自由に改造できるスパコン向けOSとしてのLinuxはなかなかにイノベーティブなものだと言えるのではないかな?
Re: (スコア:0)
MSやGoogleが模索しているイノベーションはサービスレベルのことであって、OSレベルでは彼らも別にイノベーションをもたらしてない
もちろんAppleもね