ネタを考える
ひよこ豆のカレーたべながら「何がひよこなのかなー」って思う、とかそういうの。
ChatGPTさんにたのむ
「ひよこの形の豆」「20粒くらいが皿に盛られているように」だけで十分な感じのクオリティに……。なにも解説することがない……。
Altにプロンプトがありますが、ひよこそれぞれがちょっと違うポーズや表情をとるよう指定していたりして芸が細かいです。
ひよこ豆のカレーたべながら「何がひよこなのかなー」って思う、とかそういうの。
「ひよこの形の豆」「20粒くらいが皿に盛られているように」だけで十分な感じのクオリティに……。なにも解説することがない……。
Altにプロンプトがありますが、ひよこそれぞれがちょっと違うポーズや表情をとるよう指定していたりして芸が細かいです。
/etc/sshd/sshd_config
末尾に PermitRootLogin no
のように書いても無視される。なんでですかね?
RHEL 9のインストーラで、rootのパスワードを使ったsshログインを許可すると、 /etc/ssh/sshd_config.d/01-permitrootlogin.conf
が作られて PermitRootLogin yes
が記述される。
作成される /etc/ssh/sshd_config.d/01-permitrootlogin.conf
はこんなかんじ。
# cd /etc/ssh/sshd_config.d/ # ls 01-permitrootlogin.conf 50-redhat.conf # cat 01-permitrootlogin.conf # This file has been generated by the Anaconda Installer. # Allow root to log in using ssh. Remove this file to opt-out. PermitRootLogin yes
このファイルは /etc/ssh/sshd_config
から Includeにより読み込まれている。
# cat /etc/ssh/sshd_config (略) # To modify the system-wide sshd configuration, create a *.conf file under # /etc/ssh/sshd_config.d/ which will be automatically included below Include /etc/ssh/sshd_config.d/*.conf (略)
sshd_configは同じディレクティブを複数回指定すると最初だけ有効になり、2回目以降の指定は無視される。そのためたとえば /etc/sshd/sshd_config
末尾に PermitRootLogin no
のように書いても無視されるようになる。
なおsshdの設定内容がどう評価されたを確認するには sshd -T
コマンドをつかう。
# sshd -T|grep -i root permitrootlogin yes chrootdirectory none
Includeより手前なら同じ理屈で sshd_config
に書いた方が有効だが、2回同じ設定がでてると人間が混乱する。変更するときはファイル 01-permitrootlogin.conf
を消すのがおすすめ。
/etc/〜〜.d/*.conf
のような分離されたファイルを配置するだけで設定を行えるような変更が徐々に広がっている。一方で設定作業を行うときには特定の1ファイルしか目に入っていないことがあるのでハマりどころになりがち。素直にembedするとめちゃ重いのでtogetterにしました
RHEL9情報: RHEL9からは仮想マシンの画面転送に使われるSPICEの実装がなくなります。8までのKVMで構築していた仮想マシンを移行するときは要注意です。 SPICEに依存しているGNOME boxesもRHEL 9には含まれません。 #RHEL
— Kazuo Moriwaka (@moriwaka) 2022年4月1日
RHEL9情報: 以前からdeprecatedになっていた network-scripts パッケージがRHEL9では提供されません。
— Kazuo Moriwaka (@moriwaka) 2022年4月4日
NetworkManagerが対応しているので /etc/sysconfig/network-scripts/ 以下の設定ファイルは引き続き使えます。 #RHEL
普通に使っている分には問題は起きませんが、NetworkManagerを避けて systemctl disable NetworkManager.service とか NM_CONTROLLED=no とか やってた人はあぶないので要注意です。
— Kazuo Moriwaka (@moriwaka) 2022年4月4日
RHEL情報: RHELにはSpring Frameworkライブラリを含んでいません。つまりSpringにどんなに酷い脆弱性があってもRHELそのものには影響はありません。「RHELにSpring Frameworkは含まれていますか」との確認が多数ありますが含まれていません。 影響をうけるRH製品は以下で:https://t.co/6ZnRDTd2C9
— Kazuo Moriwaka (@moriwaka) 2022年4月5日
RHEL9情報: ついに motif が提供されなくなります #RHEL
— Kazuo Moriwaka (@moriwaka) 2022年4月7日
RHEL 9情報: RHEL7で導入されたユーザランドでポリシーを実装できるteamdはdeprecatedになります。
— Kazuo Moriwaka (@moriwaka) 2022年4月8日
RHEL 7で導入された時に懸念
されていたkernelのbondingの問題は解消され、OpenStack等ではovsが使われ、実際にteamdで独自のポリシーを使っている事例がみつからないという状況でした。
最近営業日には1日1ネタくらいRHELネタをつぶやくようにしている。どれくらい嬉しい人がいるのかは謎……。
— Kazuo Moriwaka (@moriwaka) 2022年4月8日
RHEL情報: RHEL 8から同梱してるImage Builderで仮想マシンイメージやカスタムインストールイメージやを作れるよ。https://t.co/pI61uuBvhv pic.twitter.com/ASzrOCAADv
— Kazuo Moriwaka (@moriwaka) 2022年4月11日
RHEL9情報: XFSにbigtime拡張がついて2038年以降のタイムスタンプも扱えるようになるよ。RHEL8にはない機能だからRHEL8ではmountできないよ。
— Kazuo Moriwaka (@moriwaka) 2022年4月14日
RHEL9でRHEL 8でもmountできるXFSファイルシステムを作りたいときは mkfs.xfs -m bigtime=0,inobtcount=0 /dev/sdc1 みたいにする必要があるよ。 #RHEL
前提知識を補足すると、今のタイムスタンプに使われている
— Kazuo Moriwaka (@moriwaka) 2022年4月14日
32bit time_tと32bitナノ秒 を
64bit ナノ秒 に置き替えることで今ナノ秒用の領域でつかわれてない2bit少々を使うように変更する変更なんで、I/Oの量はかわらないです。
「コンテナならUbuntuの上でもRHEL動くよね?」みたいなFAQを踏まえて書かれたRed Hatの公式bloghttps://t.co/BLUP6kvx7c
— Kazuo Moriwaka (@moriwaka) 2022年4月15日
(google翻訳)https://t.co/7LV9jpAPwg
RHEL9情報: TPM 1.2のサポートはなくなります。サポートされるのはTPM 2.0だけです。TPM 1.2と2.0には互換性がありません。
— Kazuo Moriwaka (@moriwaka) 2022年4月15日
もしアプリケーションがTPM 1.2を必要とする場合にはRHEL 9に移行せずそのアプリケーションの基盤は RHEL 8のままにすることを推奨します。 #RHEL
software design5月号献本いただきました。今月のsystemd連載はudevdです。
— Kazuo Moriwaka (@moriwaka) 2022年4月16日
RHEL8/9情報: あらかじめ登録したデバイス以外のUSBデバイスを拒否したり、利用をする時に監査ログに記録したりするUSBGuardが標準でついてるよ。 #RHEL
— Kazuo Moriwaka (@moriwaka) 2022年4月20日
あっ……
— Kazuo Moriwaka (@moriwaka) 2022年4月20日
適当なこと言ったら殺されるヤツだ…… pic.twitter.com/DEzEtsAV6t
RHEL9情報: 日本語などの言語サポート用パッケージを、言語ごとに以下のパッケージでインストールできます。
— Kazuo Moriwaka (@moriwaka) 2022年4月21日
* langpacks-core-font-*: 最小限のフォントだけ
* langpacks-core-*: ↑に加えてlocaleとインプットメソッド
* langpacks-*: ↑に加えて翻訳、スペルチェッカ、追加フォント#RHEL
RHEL 8/9情報: RHEL 8.5まではAnsible Engineが提供されていました。8.6と9からはAnsible Coreが提供されます。
— Kazuo Moriwaka (@moriwaka) 2022年4月22日
サポートされる範囲内での影響は大きくありませんが、モジュールが激減するので今までサポート外でRHEL同梱ansibleパッケージを利用していた方はご注意 #RHELhttps://t.co/xd5b0Qnyxk
RHEL9ではSHA-1がデフォルトでは禁止なので、RHEL 6にsshしたりSHA-1で署名されているrpmパッケージを入れたりすると失敗する。
— Kazuo Moriwaka (@moriwaka) 2022年4月27日
(ポリシーをLEGACYにするかDEFAULT:SHA1サブポリシーを使うとワークアラウンドにはなるが非推奨) #RHEL
Red Hat Summit 2022 の概要とオススメセッションのご紹介 https://t.co/yb2kxmLU8M
— Kazuo Moriwaka (@moriwaka) 2022年4月28日
RHEL9情報: 2013年(!)にBerkeley DB 6がAGPLになったのでRHEL 9でも5.xなんだけど、RHEL 9からはlibdbはdeprecated扱い。RHEL同梱パッケージのlibdb依存をなくす作業が行われてる。ユーザにもgdbmなどの他DBへの移行を推奨。
— Kazuo Moriwaka (@moriwaka) 2022年3月29日
RHEL9、あんま変わらんので紹介が難しい…… pic.twitter.com/5MwMY7YLIv
— Kazuo Moriwaka (@moriwaka) 2022年3月29日
https://t.co/DdnLIq3VUm 地味なリリースになる予定のRHEL 9ですがこれはかなりの強化ポイント(CPUあまってる人には関係ない
— Kazuo Moriwaka (@moriwaka) 2022年3月29日
RHEL 9情報: RHEL 8では(内容はDNFベースになったけど)YUM v4って呼んで社内ではコマンド例とかもyumに統一してたのだけど、RHEL 9ではyumもdnfもどっちでもありになるらしい (特にいいことも悪いこともおきない)
— Kazuo Moriwaka (@moriwaka) 2022年3月24日
RHEL 9情報: たぶん普通に使う人に一番影響が大きいのは暗号化まわり。crypto-policiesのLEGACYでも
— Kazuo Moriwaka (@moriwaka) 2022年3月24日
TLS 1.1, DTLS 1.1, DSA, 3DESあたり使えないのでカスタムポリシー作るか個別設定が必要。https://t.co/bAGhfqFwWN
RHEL9情報: Python 2はもう提供されない (ぼそ
— Kazuo Moriwaka (@moriwaka) 2022年3月23日
RHEL 8情報: Python 2.7が終わるのと一緒にmailmanも2024年6月でサポート終了。既にパッケージはdeprecated。3が出る予定はない。ドキュメントの記載が不正確なので訂正依頼中。
— Kazuo Moriwaka (@moriwaka) 2022年3月24日
https://t.co/cP0bEtItA7
— Kazuo Moriwaka (@moriwaka) 2022年3月10日
Simple Content Accessで混乱する人がちらちら目につくようになってきたので過去記事に絵を足したりして増強しますた pic.twitter.com/503PLg9UY2
Simple Content AccessとSubscription Service / sca-ss https://t.co/3p0ShM1xCN RHELのサブスクリプション管理に最近登場した2つを紹介するスライドです
— Kazuo Moriwaka (@moriwaka) 2022年3月14日
無闇にアラートあげないほうがいい話、Red Hat Insightsも最初期からあるAdvisorは必須のものだけ上げてあとからついたVulnerabilityはわかるの全部列挙するようになってたりする。ユーザにとって価値あるレポートと網羅性とは大分かけ離れた概念だけどごちゃごちゃになりがち。
— Kazuo Moriwaka (@moriwaka) 2022年3月15日
Red Hatのパートナー各社の社員だと、つい先日(3月2日)から、一部Red Hat公式トレーニングを無償でオンデマンド受講できるようになりました。おすすめですよ。https://t.co/R3Y7veUgoK
— Kazuo Moriwaka (@moriwaka) 2022年3月7日
一般むけトレーニングではなくて記事右側にもリンクのあるパートナーむけのPartner Training Portalから受講する必要があります。ねんのため。https://t.co/fxtCJquBZ2
— Kazuo Moriwaka (@moriwaka) 2022年3月7日
運用手順をつくるときはsystemdのunitがfailedになる可能性も考慮しよう pic.twitter.com/MtLnUMzIPn
— Kazuo Moriwaka (@moriwaka) 2022年3月29日
「Linuxが動くノートPCってどれだろう」と思う人はRHELの認定ハードウェアカタログを眺めると便利ですよ。https://t.co/Y1rfkgDvxL
— Kazuo Moriwaka (@moriwaka) 2022年3月7日
https://t.co/df6Qnd78eG これを書いている時点で CVE-2022-0847 対応のerrataはまだでていません。
— Kazuo Moriwaka (@moriwaka) 2022年3月8日
ログインすると表示される[FOLLOW]ボタンを押すと、情報が更新されたときにメールを受信できます。 pic.twitter.com/KAO951DvD8
googleでエラーメッセージ検索して1件しか表示されない実績を解除した(しかもgithub上のpoファイル) pic.twitter.com/Tb8HA0F2H4
— Kazuo Moriwaka (@moriwaka) 2022年3月9日
luksで暗号化しててRHEL系ならNBDE使うのはいかが…… https://t.co/T8712d3T2l
— Kazuo Moriwaka (@moriwaka) 2022年3月31日
3/11に発売されたVOICEPEAKを買ってあそんでいます。 動作環境はUbuntu 18.04以上ということなんですが、手元のFedora 35でも動きました。最初の体験版は日本語入力ができなかったんですが現在は問題なく入力できています。
公式で予約して15800円で買ったんですがDLsiteとかでクーポン使うほうが安くなるらしいです。
で、やりたかったblog読みあげをやってみました。かなりいい感じで読んでくれます。 「レッドハットの森若です」ってところがさわやかイケボすぎて同僚が吹きそうになったらしい。すまんw
英語の記事をDeepLで翻訳して読ませるだけでかなりそれらしくなってくれるのすごい。
なつかしの2chコピペを喋らせてあそんでみました。
ベンチマーク pic.twitter.com/XsDWkyWxZ0
— Kazuo Moriwaka (@moriwaka) 2022年3月12日
ベンチマークその2 pic.twitter.com/6iZhoPpEH1
— Kazuo Moriwaka (@moriwaka) 2022年3月12日
ベンチマークその3 pic.twitter.com/lzLZhcWPij
— Kazuo Moriwaka (@moriwaka) 2022年3月12日
ベンチマーク。感情表現強力だなあ。 pic.twitter.com/1KmuPs77ar
— Kazuo Moriwaka (@moriwaka) 2022年3月12日
voicepeakに慣れてきた気がする pic.twitter.com/4tt45NAww3
— Kazuo Moriwaka (@moriwaka) 2022年3月12日
バージョンあがったらいろいろ良くなるだろうと期待しているんですが現状気付いたポイントのメモです。
unixでのファイルの編集と置き換えの違いをまとめます。
UNIX系OSのファイルシステムは、「ファイル名→ファイル実体」という対応関係ではなく、間にinodeを挟んだ「ファイル名 → inode → ファイル実体」という対応づけを行っています。
「ファイル名→inode」の対応づけは、ディレクトリエントリにより行われます。
ディレクトリ内でファイル名とinode番号の対応づけが行われていて、ls -i
などで確認できます。
「inode→ファイル実体」の対応づけは、ファイルシステム内部で行われ、ユーザからは隠されます。
inodeは、ファイル種類の情報、ファイルのアクセス権限やタイムスタンプ、ディスク上のどこにファイルの実データが存在するかというメタデータを保持するデータ構造です。inodeには番号がついていて、(デバイス番号、inode番号) の組み合わせでファイル実体がシステム全体の中で一意に定まります。
ls に -i オプションをつけると、ファイルの inode番号を見ることができます。以下は / ディレクトリで ls -i をする例です。
$ ls -i / 123242 bin 141 home 33709218 mnt 19489 run 16892486 tmp 128 boot 123245 lib 50497111 opt 144 sbin 33575067 usr 1025 dev 143 lib64 1 proc 142 srv 50331777 var 16777345 etc 16892485 media 33575041 root 1 sys
この例ではinode番号が同じ1のディレクトリが複数存在することがわかります。これはそれぞれ別のファイルシステムのmount pointで、各ファイルシステムのinode番号1番が付与されているためです。
lsofコマンドで、あるプロセスが扱うファイルを一覧することができます。DEVICEという欄がデバイス番号です。"253,0"のようにmajor, minorの2つの数字の組み合わせです。NODEという欄がinode番号です。 50498017 のように1つの数字が表示されていることがわかります。
$ lsof -p $$ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2734 kmoriwak cwd DIR 253,0 4096 33575046 /home/kmoriwak bash 2734 kmoriwak rtd DIR 253,0 224 128 / bash 2734 kmoriwak txt REG 253,0 1150584 50498017 /usr/bin/bash bash 2734 kmoriwak mem REG 253,0 9253600 51182031 /var/lib/sss/mc/passwd bash 2734 kmoriwak mem REG 253,0 46280 1156751 /usr/lib64/libnss_sss.so.2 (中略) bash 2734 kmoriwak 0u CHR 136,0 0t0 3 /dev/pts/0 bash 2734 kmoriwak 1u CHR 136,0 0t0 3 /dev/pts/0 bash 2734 kmoriwak 2u CHR 136,0 0t0 3 /dev/pts/0 bash 2734 kmoriwak 3r REG 253,0 9253600 51182031 /var/lib/sss/mc/passwd bash 2734 kmoriwak 255u CHR 136,0 0t0 3 /dev/pts/0
念のため ls -i /usr/bn/bash をして対応していることを確認しておきましょう。
$ ls -i /usr/bn/bash 50498017 /usr/bin/bash
当たり前に聞こえますが、通常のファイルは書き換えることができます。 echo でファイルに書き込んで、内容を編集してもinodeは同じままであることを確認します。
$ echo hoge > hoge.txt $ ls -i hoge.txt 9871508 hoge.txt $ echo fuga > hoge.txt $ ls -i hoge.txt 9871508 hoge.txt
1つのシステムの中で複数のプロセスが複数ファイルを操作でき、編集ができるので、あるファイルが編集された際に他のプロセスからどう見えるのかを注意する必要があります。
少なくともlinux+glibcでは、ファイル編集がされたあとの読み込みでは全てのプロセスから編集後の状態が読みだされます。(厳密な動作はlibcやカーネルの実装により変わります。NFSのような複数ホストを対象とするサービスは一貫性を犠牲にしてパフォーマンスを上げているため動作が違います。)
簡単なテストプログラムで様子をみてみましょう。 以下はhoge.txt を読んで3秒おきに出力するだけのプログラムです。
loop.py
import time f = open("hoge.txt") while 1: f.seek(0) print(f.read()) time.sleep(3)
これを実行しながら、他の端末で書き換えます。
$ echo hoge > hoge.txt $ python3 loop.py (別の端末で) $ echo fuga > hoge.txt
echoでhoge.txtを書き換えたあと、loop.pyの出力がhogeからfugaに変わることがわかります。
ファイルの置き換えは、新しいファイル実体を作成して同じ名前に置き換える操作です。inodeに注意してmvコマンドによる置き換え操作をみてみましょう。
$ echo hoge > hoge.txt $ ls -i hoge.txt 9871798 hoge.txt $ echo fuga > fuga.txt $ ls -i fuga.txt 9872073 fuga.txt $ mv fuga.txt hoge.txt $ ls -i hoge.txt 9872073 hoge.txt
「hoge.txt というファイル名から内容をみると"fuga"になっている」という点はさきほどの編集と同じですが、inode番号が変わっています。
置き換えにより既存プロセスからどう見えるかを確認しましょう。 さきほどのloop.pyを実行しながら、他の端末で書き換えます。
$ echo hoge > hoge.txt $ python3 loop.py (別の端末で) $ echo fuga > fuga.txt (別の端末で) $ mv fuga.txt hoge.txt
今回は loop.py の出力が変わらず、hogeのままであることがわかります。 そのままloop.pyを終了せずに、loop.pyから見たファイルの状態を見てみましょう。
$ ps aux|grep loop.py kmoriwak 4450 0.0 0.0 32224 8704 pts/0 S+ 12:30 0:00 python3 loop.py kmoriwak 4535 0.0 0.0 12136 1140 pts/1 S+ 12:30 0:00 grep --color=auto loop.py $ lsof -p 4450 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3 4450 kmoriwak cwd DIR 253,0 37 35375171 /tmp/test python3 4450 kmoriwak rtd DIR 253,0 224 128 / (中略) python3 4450 kmoriwak 3r REG 253,0 5 35375173 /tmp/test/hoge.txt (deleted) $ ls -i hoge.txt 35375180 hoge.txt
ファイル名のあとに(deleted)とあります。これは現在同じ名前で確認できる /tmp/test/hoge.txt とはinode番号が違う別のファイルを参照していることを示しています。
シェルスクリプトを実行するときには、(例外はありますが)実行と読み込みを交互に行います。簡単に確認してみます。
ゆっくり実行されるシェルスクリプトyukkuri.shを作ります。
yukkuri.sh
sleep 3 echo hoge sleep 3 echo fuga sleep 3 echo piyo
strace経由でyukkuri.sh を実行して、プロセスの動作を見てみましょう。
$ strace -e read,write -o out.log bash yukkuri.sh
このような出力が得られます。
(略) read(255, "\nsleep 3\necho hoge\nsleep 3\necho "..., 55) = 55 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=30951, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- read(255, "echo hoge\nsleep 3\necho fuga\nslee"..., 55) = 46 write(1, "hoge\n", 5) = 5 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=30952, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- read(255, "echo fuga\nsleep 3\necho piyo\n", 55) = 28 write(1, "fuga\n", 5) = 5 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=30953, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- read(255, "echo piyo\n", 55) = 10 write(1, "piyo\n", 5) = 5 read(255, "", 55) = 0 +++ exited with 0 +++
最初にELFなんとかやGNUなんとかが読み込みされているのはライブラリの読み込みや初期化で、 SIGCHLDは、sleepプロセスの終了を意味しています。 スクリプトの続きを読むこととコマンドの実行を繰り返していることがわかります。
このreadを行う前にファイルの該当部分を編集することで、実行中のスクリプトの内容が一部変更されます。実際に試してみてください。
mattnさんの記事を読むともっとよくわかります。 zenn.dev
mattnさんの記事でもvimで上書き(置き換え)、cpで上書き(編集)、tarで上書き(置き換え)により再現有無が異なっていますが、利用するツールによりファイルが既に存在する場合の動作が異なります。オプションにより動作が変わるものもあります。不安がある場合は素振りをしてinode番号が変更される事を確認しましょう。
編集するもの:
置き換えするもの: