Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2017-01-01

2017 年のパズル年賀状

今年の年賀状

f:id:zrbabbler:20161230233829j:image

以前に述べたとおり、年賀状にはその年の数に関連した数学パズルを載せるのが通例である。*1しかし去年はパズルを作っている時間が 2 時間しかなかった上に、もう新しい虫食い算のタイプのネタが尽きてしまっていたので、以前に使ったタイプとなるが、「電卓文字の虫食い算」を作ることにした。(もちろん問題は新作である。)

肝心のパズル問題の部分の文字がチョット読みづらいが、以下のように書かれている。

f:id:zrbabbler:20161230233827p:image

右(※この記事では上)の図は「電卓数字」で書いた掛け算の筆算式であるが、縦棒が全て欠けてしまっている。縦棒を適切に補って正しい計算式を完成させよ。

なお、「電卓数字」の完全な字形は以下の通りである。

f:id:zrbabbler:20161230233828p:image

★ 最上桁にある「1」は全く見えないことに注意。

一番上にあるのはロジバン(人工言語)での新年の挨拶。

*1:CTAN にアップロードする LaTeX パッケージを開発するのに時間を取られている人が多いためか、年を追うごとに年賀状数学パズルを見ることが少なくなっているようで感じる。

2016-12-30

暮れのご挨拶、的な何か

*「年末ですね」
ZR「ですね」
*「年末といえば」
ZR「いえば?」
*「……いや、年末恒例の、冬休み課題とか、各種くだらないネタとか、今年は何かないの?」
ZR「某アドベントカレンダー某フィナーレ某プログラムソースとかは? アレを実行して素敵なメッセージを読むの」
*「それは実行済。そもそも、アレはTeXネタじゃないし」
ZR「じゃあ、よいお年を……」
*「えっ何でなんでナンデ?」
ZR「どうやら、今年は某ZR氏にやる気がないらしい。まあ、たまには非アレで優雅な年越しを過ごすのも……」
*「それでこのブログの熱心な読者が納得するとでも?」
ZR「ヒィーーーッこのブログの熱心な読者コワイ……!」
*「コワクナイヨー」
ZR「えーと、そういう人は、過去に出題された問題でやり残しているものを探してみればいかがでしょうか。例えば、この年末の暇つぶしであれば、コレとかがお勧めです」

*「古いネタの使い回し、イクナイ!」
ZR「というわけで、皆さん、来年も当(くだらない)ブログをよろしくお願いします!」

2016-12-25

今年も Merry TeXmas! ― \end{texadvent2016}


 
TeX & LaTeX Advent Calendar
 

2016/12/01 〜 2016/12/25
〜ホンキでTeXを語ろう〜
*  *  *

祝! アドベントカレンダー完走!

f:id:zrbabbler:20161225192058p:image
(TeX文書でないナニカ)

というわけで、5 回目の開催となる TeX & LaTeX Advent Calendar 2016 も、素敵な TeX ネタを途絶えさせることなく無事にクリスマスの日を迎えられました。今年の参加者は全部で 17 名、うち 7 名が初参加でした。参加者の皆様に心からの感謝を捧げたいと思います。

このアドベントカレンダーの「常連」の方々は、普段から TeXLaTeX 関連の記事を書いている人が多いわけですが、そういう人も、このカレンダーの記事はいつも以上のホンキが感じられました。ありがとうございます。

そして、このカレンダーのために、初めて TeXLaTeX の記事を書いた方々もいます。TeXLaTeX の記事を書いてくださって、ありがとうございます。

世の中に、皆さんのホンキを込めた素敵な TeXLaTeX の記事がもっともっと増えることを願っております。

TeX & LaTeX Advent Calendar 2016 を楽しんでくれた皆さんに、

ありがとう!

そして最後に。

f:id:zrbabbler:20161225191532p:image

2016-12-06

【重要】TeXシステムの脆弱性の件

TeX システムの「外部コマンド実行設定」に関するセキュリティホールが報告されている。

既に W32TeXTeX Live(本家)の側での対策は行われている。ユーザが「TeX システムをアップデートする」などの対策をとる必要がある。

内容

  • TeX 処理系にはもともと「外部のソフトウェア(コマンド)」を実行する機能があるが、安全のため、既定では実行できる外部のコマンドを特定のもの(kpsewhich 等)に制限している。この状態を「制限付シェルエスケープ(restricted shell escape)」という。
  • しかしこの脆弱性のためその制限が実質的に無効になる。
  • つまり攻撃者が任意の外部コマンドを(ユーザの権限で)実行できるようになる。

影響範囲

以下の事項の全てを満たす場合に影響を受ける。

  • 2010 年頃以降にインストールされた TeX 配布。
    (※恐らくそのほとんど全てが該当する。)
  • 「制限付シェルエスケープ」の状態で使用している、またはその可能性がある。
    (※それが既定なので、ほとんどの人が該当する。)
  • 「制限付シェルエスケープ」での実行が許された外部コマンドの中に MetaPost のコマンド(mpost、jmpost、pmpost、upmpost)が含まれている。以後この状態を【無制限 MetaPost 連携可能】と呼ぶことにする。

以下の事項は関係しない。

  • エンジン(TeXpTeX、LuaTeX、…)の種類。
  • フォーマット(plain TeXLaTeX、…)の種類。*1
  • 自分が MetaPost を使う(自分で起動する)ことがあるか。
  • TeX 配布の新しさ。
    • たとえ(この記事から見て)未来のもの(例えば“2017 年の最新版”)でも、ユーザの設定によっては【無制限 MetaPost 連携可能】になる可能性がある。*2

検査方法

【無制限 MetaPost 連携可能】であるかを調べる方法。

  • コマンドシェルで以下のコマンドを実行する。
    kpsewhich -var-value=shell_escape_commands
    
  • 次のようなコマンド名のリストが表示されるはずである。
    (※これが「実行が許可された外部コマンド」のリストである。)
    (※何も表示されないならば【無制限 MetaPost 連携可能】ではない。*3
    bibtex,bibtex8,extractbb,kpsewhich,makeindex,mpost,repstopdf
    
  • リストの中に mpost、jmpost、pmpost、upmpost のいずれか が存在すれば【無制限 MetaPost 連携可能】である。
    • rmpost、rpmpost のように r で始まる名前のものは関係しない。*4

対処方法

  • 可能であれば TeX 配布を最新版にアップデートする。
    (※最新版では「実行が許可された外部コマンド」から MetaPost のコマンドを除外する修正がされている。しかしユーザ側でカスタムの設定がなされている場合は修正が反映されない可能性がある。)
  • アップデートした場合、再度上記の検査を行う。【無制限 MetaPost 連携可能】でない状態になっていればOK。
  • まだ【無制限 MetaPost 連携可能】である場合、「MetaPost のコマンドを、『実行が許可された外部コマンド』のリストから外す」処置を行う。
    • TeX Live本家など、tlmgrコマンドが利用できる場合は、以下のコマンドを実行する。
      tlmgr conf texmf shell_escape_commands 「リスト」
      
      ここで「リスト」の部分は、検査の際に kpsewhich コマンドにより表示された「実行が許可された外部コマンド」のリストのうち、mpost、jmpost、pmpost、upmpost を(あれば)除外したものを指定する。
      (※例えば検査の箇所で示した例の場合は「リスト」は bibtex,bibtex8,extractbb,kpsewhich,makeindex,repstopdf である。)
    • tlmgrが利用できない場合は、以下の手順を行う。
      • 以下のコマンドを実行して、有効なtexmf.cnfファイルを探す。
        kpsewhich texmf.cnf
        
        ここで表示されるパス名が有効なtexmf.cnfである。
      • 有効なtexmf.cnfファイルの中に「shell_escape_commands=」で始まる行がある場合は、「=」の後にあるコマンド名のリスト*5(「実行が許可された外部コマンド」と一致するはずである)から mpost、jmpost、pmpost、upmpost を(あれば)削除する
      • shell_escape_commands=」で始まる行がない場合は、適当な位置(例えば末尾)に以下の行を書き込む。
        shell_escape_commands=「リスト」
        
        ここで「リスト」の部分は、「実行が許可された外部コマンド」のリストのうち、mpost、jmpost、pmpost、upmpost を(あれば)除外したものを指定する。

補足

  • 今回の件は“攻撃者が構成したMetaPostのコマンド行”が原因となっている。自分でMetaPostのコマンドを実行する分には何の問題もない。

*1:厳密にいうと、“tex”というコマンド(Knuth オリジナルの plain TeX)だけはシェル実行が完全に禁止されているのでこの問題は起きない。ただこれが実用されていることはないだろう。

*2:要するに TeX や MetaPost 自身の問題ではなく“設定”の問題であるため。

*3:「制限付シェルエスケープ」が実装される以前の TeX システムと考えられる。

*4:これらは「TeX と安全に連携できる特別な MetaPost」のコマンド名である。

*5:ここで、行末の「\」は行継続を表す。すなわち、その「\」が無くてかつ次の行と繋がっているのと同じと見なされる。

2016-12-01

なんとかアドベントがはじまった ― ¥begin{texadvent2016}


 
TeX & LaTeX Advent Calendar
 

2016/12/01 〜 2016/12/25
〜ホンキでTeXを語ろう〜

TeX & LaTeX アドベントカレンダー 2016

*  *  *

TeX 界のおける年末の恒例イベントとなってしまった(?)アドベントカレンダーが今年も始まりました。

重点テーマ

今年の重点テーマはコレです。

ホンキでTeXを語ろう

えーと、昨年が「キホン」だったので、今年は「ホンキ」です。ただそれだけです。深い意味はありません。(ええっ)

※例によって、重点テーマは「必須」ではありませんあらゆる TeX ネタを歓迎しております。

で、初日のネタは

こちらになります。

最後の方がグダグダでアレですが、その辺はご勘弁を……。

まだ参加できます!

TeX & LaTeX Advent Calendar 2016(#texadvent2016)は

まだまだ参加者募集中です。

LaTeX なネタ、TeX 言語なネタ、MetaPost なネタ、mendex なネタ、Biber なネタ、expl3 なネタ、Kpathsea なネタ、ナントカなネタ、その他なんでも、お持ちの方はぜひぜひ、

ご参加おねがいします!

今年は例年になく早いペースで登録が進んでいて、もう空席が残りわずかとなっています。登録はお早めに!