Linux雑多メモ(2018/06/08)

● 昇格時の環境変数
setuid()やcapabilitiesで昇格すると、PATHやLD_LIBRARY_PATHなどの環境変数を失う。セキュリティホールになるからっぽい。でもどこでこれを実装しているのかは見つけられなかった。

● D-Busのuid周り
D-Busは、「AUTH EXTERNAL ********」でuidの番号をasciiにしたものをHEX表現して送る。straceで「31303030」「32303030」などを見かけたら要注意。このため、Linux kernelによるcapabilitiesやDBUS_SESSION_BUS_ADDRESSのpathへのpermissionだけををごまかしてもうまく動かない。/etc/dbus-1/session.conf に「<user>UID</user>」「<policy user="UID" />」とか書く必要がある、らしい。D-Bus Specificationを結構読んだつもりだけど、D-Bus全然わからん・・・

● busyboxの昇格
busyboxは通常本体のバイナリのsuidビットを立てておく。が、これだけで任意のコマンドすべてでroot権限に昇格してくれるわけではない。CONFIG_FEATURE_SUIDでコンパイルした上で/etc/busybox.confにファイルを配置し中身を記述しておく必要がある。

● psのSオプション
看取った子どものCPU使用量も合計して表示してくれるpsのSオプションの働きについては、procps-ngのソースコードを「include_dead_children」でgrepして確かめよ。ポイントは、proc(5)の/proc/[PID]/statの「(16) cutime %ld」「(17) cstime %ld」あたり。なお、子どもに仕事をさせてすぐにexitさせるばかりのシステムだと、psやtopで誰がCPUを使っているのか見えにくいため、psのSオプションは必ず理解しておくべき。

● squashfsの圧縮の種類
squashfsのxzサポートは2.6.39から(https://kernelnewbies.org/Linux_2_6_39)
squashfsのlz4サポートは3.19から(https://kernelnewbies.org/Linux_3.19)
squashfsのzstdサポートは4.14から(https://kernelnewbies.org/Linux_4.14)
どれにするかについて、一般的な圧縮のベンチマークに目が行きがちだけど、squashfsの用途(小さめファイルの部分解凍要求が多い)を考えて決めるべき。zstdが入ったときのcommitメッセージが参考になる。
なお、2016年ごろ世間ではzstd最強説がうたわれたが、ことarm/aarch64に関して言うと、ratioはともかく、decomp速度は大したことない、というかむしろ負けてる?という話がある。こことかこことか。zlibのarm最適化がAndroidプラットフォームで進んでいたおかげかな。
なお、例のごとく、CPU速度と空き具合、ストレージの速度、RAMの余裕具合、フットプリントの許容量、などのバランスにより最適が変わるので、最終的には各々の環境でベンチして決める。ARM Cortex-A9 + eMMCくらいだと、lz4hcあたりがよいみたい。

このブログ記事について

このページは、らるるが2018年6月 8日 00:55に書いたブログ記事です。

ひとつ前のブログ記事は「Linux雑多メモ(2018/05/20)」です。

次のブログ記事は「Linux雑多メモ(2018/07/22)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0