RHEL7でしばらくキーを操作しないでおくと、以下の様なカーテンが降りてくるけど、非常に鬱陶しい。

gnome3-curtain

今回はこれのdisableの仕方。

% sudo yum install -y gnome-shell-browser-plugin



で、firefoxにgnome-shell extensionを入れる。これで、ブラウザで、https://extensions.gnome.org を
閲覧すると、インストールしまっかと聞いてくるようになる。

https://extensions.gnome.org/extension/730/curtains-up/

に curtainを disable するプラグインがあるので、これをインストール。

なお、パスワード入力はGnome標準の機能でdisableできるが、これがとんでもなく分かりにくいので
ついでに紹介。

メニューバー右端の、自分の名前をクリック、Settingsを選択
setting1.png

Privacyを選択
010acd2d.png


Screen LockをOFFに変更
d6fa38f7.png


昔ながらのようにスクリーンセーバーというアイコンがコントロールパネルにあるかと思い込んでるとハマる。

もう何百回もやってるはずなのに定期的にハマるのでメモ

kernelのspec ファイル書き換えてオレオレカーネルを作るには以下の三箇所を変更する

まず、rpm名を書き換えるために6行目ぐらいのbuildidのところ、コメントアウトされてるのを元に戻す

変更元)

# % define buildid .local



変更後)

%define buildid .mytest



ここで罠なのは % と define の後に、スペースを入れるのは許されていないのだが、なぜか
変更元はスペースが入っているのでまんまと騙されることである。
あと、名前は "." で初めておかないと、いろいろと後悔する。

kernel-3.10.0-1.el7.mytest.src.rpm

みたいなファイル名になるんだが、ここで "." がないと、前の el7 とくっついてしまう。

次に

# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch



となっているところに、適用するパッチを足す

変更後)

# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch

Patch10001: hoge1.patch



とかみたいにする。番号は適当でいいが、ユニークな番号にすること。
なお、ここでファイル名を書くときに余分なスペースは絶対に入れてはいけない。

パッチ適用をするApplyPatchという関数の中で


ApplyPatch()
{
(略)
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then



というクソコードが有るため、スペースが1つでも余分にあるとパッチ適用に失敗する。
わたしは、dired から矩形選択でファイル名持ってきて、これでハマったよ。

さて、rpm specfileはクソフォーマットなので、これで話が終わりじゃなくて、別の場所にもう一度
パッチ一覧を列挙しないといけない。

変更元)

ApplyOptionalPatch linux-kernel-test.patch



変更先)

ApplyOptionalPatch linux-kernel-test.patch

ApplyPatch hoge1.patch



のように、ApplyOptionalPatchがあるあたりに、ApplyPatchを書いていく。ここで間違ってもApplyOptionalPatchを
使ってはいけない。
ApplyOptionalPatchはパッチがなきゃあスキップする関数なので、間違った時に気づくのが遅れてしまう。


で、こんなん憶えていられるはずなのでスクリプト書いた

rpmpatch kernel.spec --localname .mytest ../SOURCES/00*.patch



のように名前をファイル名を引数に取ってパッチしてくれる。

以下に置いとく。
https://gist.github.com/kosaki/de41d67a899b0d839599

そういえば、Red Hat Enterprise Linux Developer Suite 持ってたら RHELのSubscriptionついてくるんだったよなあと
思い出してRHEL7をインスコ。これは年間たったの$99なのでお得だと思う。

普通に入ったけど、カットアンドペーストをサポートするための guest addition CD が
インストール不可

このへんに有志パッチがあるので、それを使った。
RHEL 7 VirtualBox Guest Additions Patched http://matthewcasperson.blogspot.com/2014/06/rhel-7-virtualbox-guest-additions.html

Rubyの開発するときに、いつもビルドディレクトリを分けているので flymake効かなかったんだけど、
どうせ、build/Makefile決め打ちでいいんだから、出来るはずだよなーと思ってやってみたら出来た。

だいたい http://www.emacswiki.org/emacs/FlyMake に載ってるサンプル通りなんだけど、あれは変に柔軟にしようとして、プロジェクト毎に場所を別途教えてあげないといけないので、余計めんどくささ感が上がっていた気がして敬遠していたの。



emacs lisp分かんないので、きっと改善の余地があると思うので晒します。叩いてください。

man pages 3.69 がリリースされたようです。
毎回関係者に連絡くれるMichaelえらいなー

今回のハイライトは execveのEAGAINエラーについての追記。

http://man7.org/linux/man-pages/man2/execve.2.html

で、EAGAINで検索するといいと思う。これは何をいっているかというと、典型的には以下のセキュリティーホールに
対処するための修正が kernel 3.1 で入ったということ。

・Linuxにおいてユーザーごとのプロセス数制限はRLIMIT_NPROCで表現される
・UIDはsetuidと(SUIDされた実行ファイルへの)execveによって変更されうる
・権限分離のため 1)SUIIDされた実行ファイルをexec、 2)特権を必要とする処理が終わったらすぐさまsetuidにて権限放棄 というプログラムが広く使われている
・3.0以前はexecveはRLIMIT_NPROC未チェック、setuidではチェックしてた
・ところが、世の中にはsetuidの返り値をチェックしてないあほなプログラムがたくさんある。そういうプログラムがRLIMIT_NPROC踏むように誘導すると、権限放棄が失敗したまま移行のすべての処理がrootで走り続けてしまうので、攻撃の起点につかうことが出来た
・たとえば sendmail は以前はsetuidのチェックがなくてセキュリティーホールを出している
https://sites.google.com/site/fullycapable/Home/thesendmailcapabilitiesissue (ただしこれはRLIMIT_NPROCではなく、capabilityの考慮不足)
・そもそも論に戻ると、権限が上がる方向のexecveが未チェックで、権限を捨てる方向のsetuidがチェックあり(失敗しうる)というの論理的におかしい。(Unix的にはrootはすべてOKなのは正しいが、ここでいってるのはセキュリティ的な筋論)
・なので、setuidでのチェックを削除して、execveでのチェックを追加する変更を3.1で加えた

そのとき、そのパッチ作成にかかわったKOSAKIという人が man も変えろとBugzilla起票してたのが、最近関係者レビューが終わってやっとこさ反映されたということです。
https://bugzilla.kernel.org/show_bug.cgi?id=42704

ちなみに、この挙動はNetBSDとも一致してるので、世の中のOSSでは問題ないことが確認済みだったりします。

ChangeLogの全文はこちら。
http://man7.org/linux/man-pages/changelog.html#release_3.69


PS さいきんSYSV IPCのデフォルトを無制限に変えたんだけど(従来はリミットが小さすぎて実用になってなかった)、まだmanには反映されてないみたいだ

↑このページのトップヘ