s10a's blog



ICTSC2023に参加しました

投稿日:   カテゴリー: tech

目次

普段は英語でしか記事を書かないですが、日本人しか読まないと思うので日本語で書きます。

参加メンバー

  • Tamagoham
  • ぶにち
  • かわかず
  • rururu

この5人でチーム「Ri-one」として参加しました。 ちなみにチーム名は僕らが所属しているサークルの名前そのまんまです。 Ri-oneは自律移動ロボットの開発をしていて、ロボカップという大会に参加しています。 僕は人の役に立つサービスロボットの開発に参加していて、主にロボットのナビゲーションを担当しています。

問題の難易度が高くやりごたえのある問題ばかりでした。 僕の得意分野はLinuxやOpenBSDなどのUnix系OSやシェル芸なのですが、解けた問題は少なかったです。

解説

僕が自力で解けた問題を1つだけ解説します。

nle †権限デストロイヤー†

問題は/usr/binにあるコマンド郡と/home/user/memo.txtの権限が000に設定されています。 最終的に/usr/bin/chmodの権限を755に、/home/user/memo.txtの権限を644にしてcatコマンドで中身を見られるようになると正解です。

とりあえずchmodコマンドを使えるように権限を直しましょう。 と言っても普通にchmodコマンドが使えないのでls.so(8)経由でコマンドを呼び出します。

sudo /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /usr/bin/chmod 755 /usr/bin/chmod

これでchmodが使えるようになります。 問題を解くのに必要なコマンド群も権限を755に直しておきましょう。

chmod 755 $(command -v chown)
chmod 755 $(command -v cat)

今回の問題では必要ないですがfindxargschmodを使えば一括に権限を直せます。 ですが、そもそもfindxargsが使える状態だったか覚えていないです。 使えるならこのように一括で権限を直せます。

find /usr/bin -type f -perm 000 | xargs chmod 755

一括で権限を変える際に注意なのですが、/usr/binには権限があえて755ではないsudoコマンドなどがありこれらのコマンドの権限を755にするのは駄目です。 なので安易にls /usr/bin/* | xargs chmod 755をした筆者は大変な目にあいました。

memo.txtの所有者がrootなのでこれもuserに変えておきましょう。 ここでsudo chown user:user memo.txtとしたいところなのですが、なぜが出来ません。

$ ls -l
total 4
---------- 1 root root 75 Mar 15 14:17 memo.txt
$ sudo chown user:user memo.txt
chown: changing ownership of 'memo.txt': Operation not permitted

sudo使ってるのに?なんで?

これはファイルにi属性が付与されているためです。
i属性についてchattr(1)のマニュアルによると

A file with the 'i' attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

のようです。 日本語で要約すると「i属性をもつファイルは変更、削除、ファイル名の変更、リンクの作成、ファイルへの追記が出来ません」みたいなことが書いてあります。

そこでi属性を消すためにchattrコマンドを使います。 まずはchattrコマンドを使えるように権限を直しましょう。 ついでにファイル属性が確認できるlsattrコマンドも直します。

chmod 755 $(command -v chattr)
chmod 755 $(command -v lsattr)

lsattrを使ってファイルの属性を見てみましょう。

$ sudo lsattr memo.txt
----i---------e------- memo.txt

chattrでファイルのi属性を消します。

sudo chattr -i memo.txt

もう一回lsattrすると無くなったのが分かります。

$ sudo lsattr memo.txt
--------------e------- memo.txt

これでファイルの所有者が変えられるのでchownで変えます。

sudo chown user:user memo.txt

またmemo.txtの権限も644に直しときます。

chmod 644 memo.txt

最後に、cat memo.txtが実行出来れば正解です。

$ cat memo.txt
Japanese Energy Okashi“Red Fuku" 美味しかった。また食べたい

解説は以上です。

大会終了後に正答率が発表されて、たしか60%ぐらいだったので半分以上の人が解けていました。

感想

1日目の夜に立食形式のビュッフェが用意されていました。 協賛企業の人や他のチームの人たちと話している間に僕の食べたいものは軒並み、無くなっていました。 なので、ひたすらクラッカーをサルサソースに付けてハイボールと一緒に食べてました。 この時にいろいろな人と話していて印象的だったのが協賛企業の方の1人が、「どんな分野でも良いからコンピュータを好きになりな」と言ってくれたことです。

2日目の競技終了後に裏話的なものも聞けて、 大会前日までサーバが立ち上がってなかった話を聞いたり、 大会に使用したサーバラックやネットワークの構成が見られたりと面白いものを見聞きしました。

大会が開催された場所がNTT中央研修センターという施設で、移動中に携帯電話の歴史というポスターを見かけました。 そのポスターを見て「あぁ、NTTだなあ」と感じました。

順位は15チーム中8位の結果となりました。 個人的には予選のときよりも順位が上がっていたので嬉しかったです。

最後に

色々の人と交流できる機会となったのでいい刺激になりました。 k8s関連の問題が主題されましたが、全く解けなかったのでk8sを勉強したいなと思いました。 一緒に参加したメンバーへ、2日間ありがとうございました。 あまりチームに貢献することは出来ませんでしたが、皆さんと楽しく問題を解くことが出来ました。

参照