昨年に引き続き、今年も「トラコン」ことICTトラブルシューティングコンテスト(ICTSC)2021 夏の陣に「mis1yakudo」として参加してきました。
選手の皆様お疲れ様でした!
— ICTトラブルシューティングコンテスト (@icttoracon) 2021年8月29日
第三位はftp_userの皆さん
第二位は味処まるたかの皆さん
第一位はmis1yakudoの皆さんになります!#ICTSC2021Summer #ICTSC pic.twitter.com/N0PyO54IHf
一昨年に初参加したときは「VyOSってなんぞ」というレベルだったのが、確実に成長を感じてます。
追記(2021/8/31):チームでの最終獲得点数は、3100ptでした
以下は解いた問題のメモ。
やったこと
僕の仕事は専門系(k8sやネットワークなど)以外の雑多な問題を倒す係だったので、ひたすら手がついてない問題を点数の低い方から倒していきました。
1日目
以下たぶん手を付けた順(記憶が正しければ)
頑固なindex.html
再起動すると復活するindex.htmlくんを除霊するお仕事です。
最初はnginxくんのせいかと思いましたが、restartをしても変更内容が保持されるので、nginxくんは無実だと判断しました。
タイミングとしてはどう考えてもrebootしたときに復活するので、reboot時にhookされる何かしらのスクリプトが悪さをしていると予想しました。
最初は/etc/profile.d/
や.bash_profile
かと思いましたが、どうもログイン時というより起動時に書き換わってそうな臭いを感じました。
そこで、他にそういうやつがいないかググって見たところsystemd-tmpfiles
というどう見ても怪しいやつがいることがわかりました。
追記(2021/8/31):今考えたら、profile.d以外に起動時書き換え系のデーモンを知らなかったので、/home
と /etc
を脳死grepしたことを思い出しました。時間があるときはgrepするのがベスト
実際、犯人は/etc/tmpfiles.d/ictsc.conf
だったので、この設定をコメントアウトすることで無事除霊ができました。
止まらない
問題からCtrl+Cによるシグナルが送信されてなさそうな臭いを感じる。
Makefileを見るといつも脳死で打ってるinteractive系オプション(-it
)がなかったので、これを追加して解決
Webサーバーが立ち上がらない
闇pyenv
systemに直入れしてたのにpyenvで環境が切り替わったことが直接の原因。たぶん解決策はいくつかあるが面倒くさいのでsystemに戻すことで解決。
ssh繋がらなくなっちゃった…
こういうときはverboseオプションをつけてログを見よう
user@prob51-ssh-client:~/.ssh$ ssh -v 172.16.0.1 OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /home/user/.ssh/config debug1: /home/user/.ssh/config line 1: Applying options for 172.16.0.1 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: auto-mux: Trying existing master debug1: Control socket "/home/user/.ssh/mux-user@172.16.0.1:22" does not exist debug1: Connecting to 172.16.0.1 [172.16.0.1] port 22. debug1: Connection established. debug1: identity file /home/user/.ssh/id_rsa type -1 debug1: identity file /home/user/.ssh/id_rsa-cert type -1 debug1: identity file /home/user/.ssh/id_dsa type -1 debug1: identity file /home/user/.ssh/id_dsa-cert type -1 debug1: identity file /home/user/.ssh/id_ecdsa type -1 debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/user/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/user/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/user/.ssh/id_ed25519 type -1 debug1: identity file /home/user/.ssh/id_ed25519-cert type -1 debug1: identity file /home/user/.ssh/id_ed25519_sk type -1 debug1: identity file /home/user/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/user/.ssh/id_xmss type -1 debug1: identity file /home/user/.ssh/id_xmss-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1 debug1: Remote protocol version 2.0, remote software version OpenSSH_8.0 debug1: match: OpenSSH_8.0 pat OpenSSH* compat 0x04000000 debug1: Authenticating to 172.16.0.1:22 as 'user' debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: (no match) Unable to negotiate with 172.16.0.1 port 22: no matching key exchange method found. Their offer: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
何やら鍵交換アルゴリズムに関して文句を言われてる。ググるとclient側から使用する鍵交換アルゴリズムを指定できるっぽい
user@prob51-ssh-client:~/.ssh$ diff -u ~/.ssh/config.orig ~/.ssh/config --- /home/user/.ssh/config.orig 2021-08-28 12:12:51.865136824 +0900 +++ /home/user/.ssh/config 2021-08-28 12:16:02.741852658 +0900 @@ -2,4 +2,4 @@ ControlMaster auto ControlPath ~/.ssh/mux-%r@%h:%p ControlPersist 10 - KexAlgorithms diffie-hellman-group1-sha1 + KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
ひとまずこれでdone…
と思いきやまだ繋がらない。サーバー側の/etc/ssh/sshd_config
を見ると、なぜかDenyUsersに今まさにログインしようとしてるユーザーがいるので、除外する。
これでいけるか…と思ったら以下のエラー。
user@prob51-ssh-client:~$ ssh 172.16.0.1 user@172.16.0.1's password: mux_client_request_session: session request failed: Session open refused by peer Failed to connect to new control master
sshのセッション関連かなと思い、server側の/etc/ssh/sshd_config
を見に行くと、MaxSessionsが0になってました。これを1にして無事解決。
[user@prob51-ssh-server ~]$ sudo diff -u /etc/ssh/sshd_config.orig /etc/ssh/sshd_config --- /etc/ssh/sshd_config.orig 2021-08-28 12:24:56.499355499 +0900 +++ /etc/ssh/sshd_config 2021-08-28 12:25:09.182916154 +0900 @@ -46,9 +46,9 @@ PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 -MaxSessions 0 +MaxSessions 1 #AllowUsers -DenyUsers toor administrator administrateur admin adm test guest info mysql user oracle +DenyUsers toor administrator administrateur admin adm test guest info mysql oracle #PubkeyAuthentication yes
iscsi問題
こういうやつはログを見よう
user@iscsi-initiator:~$ sudo iscsiadm -m node --login -p 192.168.18.2 Logging in to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] (multiple) iscsiadm: Could not login to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260]. iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure) iscsiadm: Could not log into all portals
認証が上手く行ってなさそうで、ググった結果からtargetのACLに問題がありそうな臭いを嗅ぎ取る。
user@iscsi-initiator:~$ sudo cat /etc/iscsi/initiatorname.iscsi ## DO NOT EDIT OR REMOVE THIS FILE! ## If you remove this file, the iSCSI daemon will not start. ## If you change the InitiatorName, existing access control lists ## may reject this initiator. The InitiatorName must be unique ## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames. InitiatorName=iqn.2021-07.192.168.18.1:initiator
ACLを確認しに行くと、initiatorの識別子をミスっている。
user@iscsi-target:~$ sudo targetcli ls o- / ......................................................................................................................... [...] ... o- iscsi ............................................................................................................ [Targets: 1] | o- iqn.2021-07.192.168.18.2:target ................................................................................... [TPGs: 1] | o- tpg1 ............................................................................................... [no-gen-acls, no-auth] | o- acls .......................................................................................................... [ACLs: 1] | | o- iqn.2021-07.192.168.18.11:initiator .................................................................. [Mapped LUNs: 1] | | o- mapped_lun0 ............................................................................... [lun0 fileio/disk01 (rw)] | o- luns .......................................................................................................... [LUNs: 1] | | o- lun0 ............................................. [fileio/disk01 (/var/lib/iscsi_disks/disk01.img) (default_tg_pt_gp)] | o- portals .................................................................................................... [Portals: 1] | o- 0.0.0.0:3260 ..................................................................................................... [OK] ...
なので、正しい名前で登録し直しましょう。
user@iscsi-target:~$ sudo targetcli /> cd /iscsi/iqn.2021-07.192.168.18.2:target/tpg1/acls/iqn.2021-07.192.168.18.11:initiator/ /iscsi/iqn.20....11:initiator> get auth AUTH CONFIG GROUP ================= mutual_password= ---------------- The mutual_password auth parameter. mutual_userid= -------------- The mutual_userid auth parameter. password=ictsc2021 ------------------ The password auth parameter. userid=user ----------- The userid auth parameter.
認証情報がわかったので、正しい名前で登録しなおします。
user@iscsi-target:~$ sudo targetcli /> cd /iscsi/iqn.2021-07.192.168.18.2:target/tpg1/acls /iscsi/iqn.20...get/tpg1/acls> cd iqn.2021-07.192.168.18.1:initiator/ /iscsi/iqn.20....1:initiator> set auth userid=user /iscsi/iqn.20....11:initiator> set auth password=ictsc2021 user@iscsi-target:~$ systemctl enable rtslib-fb-targetctl
あとはinitiator側からログインする
user@iscsi-initiator:~$ sudo iscsiadm -m node --login Logging in to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] (multiple) Login to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] successful. user@iscsi-initiator:~$ lsblk | grep -E "(NAME|sda)" NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 5G 0 disk
キャッシュサーバー
/etc/resolv.confを書き換えるなというお達し。自動生成だからファイル本体を書き換えずにやれ、ということかと思ったら、間接的に書き換えるのも×。
ifcfgをいじるかと思ったけどこれも違う。
完全に詰まってしまったので、諦めて他のチームメイトに投げたら知らない間に解いてた。こわい。
L or R
ログを見る
user@router:~$ cat /var/log/freeradius/radius.log.1 Wed Aug 25 23:48:10 2021 : Info: Debugger not attached Wed Aug 25 23:48:10 2021 : Info: systemd watchdog is disabled Wed Aug 25 23:48:16 2021 : Info: rlm_ldap: libldap vendor: OpenLDAP, version: 20449 Wed Aug 25 23:48:16 2021 : Error: rlm_ldap (ldap): Bind with cn=admin,dc=2021-summer,dc=ictsc,dc=net to ldap://localhost:389 failed: Can't contact LDAP server Wed Aug 25 23:48:16 2021 : Error: rlm_ldap (ldap): Opening connection failed (0) Wed Aug 25 23:48:16 2021 : Error: /etc/freeradius/3.0/mods-enabled/ldap[8]: Instantiation failed for module "ldap" Wed Aug 25 23:48:26 2021 : Info: Debugger not attached Wed Aug 25 23:48:26 2021 : Info: systemd watchdog is disabled Wed Aug 25 23:48:36 2021 : Info: rlm_ldap: libldap vendor: OpenLDAP, version: 20449 Wed Aug 25 23:48:36 2021 : Warning: Please use tls_min_version and tls_max_version instead of disable_tlsv1 Wed Aug 25 23:48:36 2021 : Warning: Please use tls_min_version and tls_max_version instead of disable_tlsv1_2 Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server <default> Wed Aug 25 23:48:36 2021 : Warning: Ignoring "sql" (see raddb/mods-available/README.rst) Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server default Wed Aug 25 23:48:36 2021 : Info: # Skipping contents of 'if' as it is always 'false' -- /etc/freeradius/3.0/sites-enabled/inner-tunnel:336 Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server inner-tunnel Wed Aug 25 23:48:36 2021 : Info: Ready to process requests
LDAPにつなぎにいけてないのでネットワーク問題か…?と思ったが何もわからない。
user@router:~$ sudo netstat -anp | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 498/slapd tcp6 0 0 :::389 :::* LISTEN 498/slapd tcp6 0 0 ::1:389 ::1:45628 ESTABLISHED 498/slapd tcp6 0 0 ::1:389 ::1:45626 ESTABLISHED 498/slapd tcp6 0 0 ::1:389 ::1:45630 ESTABLISHED 498/slapd tcp6 0 0 ::1:389 ::1:45632 ESTABLISHED 498/slapd tcp6 0 0 ::1:389 ::1:45624 ESTABLISHED 498/slapd unix 2 [ ACC ] STREAM LISTENING 18986 498/slapd /var/run/slapd/ldapi unix 2 [ ] DGRAM 18837 498/slapd
普通に動いてるしなんだ…?
RADIUSもわからないので終了。
2日目
1日目と違う問題がくると構えてたら1日目と同じだった。なのでRADIUS問を続行
L or R
チームメイトに聞いたら「なんでローテートされた方のログ見てるんですか?」と言われて泣いた。
設定ファイルを書き換えて、stderrにauth関連のログが吐かれるようにしてもらうと何やら怪しそうなログが。
Aug 29 10:29:28 router freeradius[6923]: Sun Aug 29 10:29:28 2021 : Info: Ready to process requests Aug 29 10:46:19 router freeradius[6923]: Sun Aug 29 10:46:19 2021 : Auth: (7) Login incorrect (mschap: FAILED: No NT/LM-Password. Cannot perform authentication): [adam/<via Auth-Type = eap>] (from client switch port 0 via TLS tunnel) Aug 29 10:46:19 router freeradius[6923]: Sun Aug 29 10:46:19 2021 : Auth: (8) Login incorrect (eap_peap: The users session was previously rejected: returning reject (again.)): [adam/<via Auth-Type = eap>] (from client switch port 0 cli 76-83-C9-9B-FB-89)
NT/LMってなんぞと思ったら某窓関連らしい。調べてみるとPEAP(EAP-MSCHAPv2)で使えるパスワード形式は、平文かNTハッシュ形式だけらしい。
面倒くさいので平文で保存すれば解決するだろうと思い実行。(ここでPassword Policy Overlayで平文保存されるようにしなければならないと思い2時間くらい溶かしたがデフォルトで平文保存だったらしい、悲しすぎる)
client1,2のwpa_supplicant.confからパスワードとusernameを取得。これをもとにldapのクエリを書く。
user@router:~$ cat addPassword.ldif dn: uid=adam,ou=Users,dc=2021-summer,dc=ictsc,dc=net changetype: modify add: userPassword userPassword: 9F41SdevdByRHRAf dn: uid=eve,ou=Users,dc=2021-summer,dc=ictsc,dc=net changetype: modify add: userPassword userPassword: NtNJiBAeHadeUNOb user@router:~$ sudo ldapadd -x -D "cn=admin,dc=2021-summer,dc=ictsc,dc=net" -W -H ldapi:/// -f addPassword.ldif
その後client1,2でhostapd系を全部再起動したのち、wpa_supplicantを実行
sudo wpa_supplicant -B -D wired -i eth1 -c ./wpa_supplicant.conf
FreeRADIUSのログには認証成功してそうなログが流れる。でもpingが通らない。なぜ??????
よく原因がわからないまま時間が来てしまったのでダメ元submitしました。合ってるかは結果くるまでわからない……
全体を通して
普通に社会人になってもやりたいなあ、でもISUCONと違って業務に寄ってる関係上、社会人が無双するゲームになっちゃいそうな気がして悩ましい…
おまけ
トラコンごはん情報です
1日目
#mis1yakudo pic.twitter.com/hrSHEhxgeE
— むさしん (@musaprg) 2021年8月28日
2日目
#mis1yakudo 朝活 pic.twitter.com/6NqWXsD5uk
— むさしん (@musaprg) 2021年8月28日
#mis1yakudo お疲れ様でした pic.twitter.com/p8WMbuVQLq
— むさしん (@musaprg) 2021年8月29日