2026-05-12 SMB共有フォルダのアクセス権変更 【背景・目的】 norizuki.com の SMB 共有フォルダは LAN 内からのみアクセスし、使用者は3名のみ。 利便性向上のため、Internal 共有を全ユーザー(everyone)で読み書き可能にする。 ただしセキュリティを担保するため、全共有のゲストアクセスは無効化する。 【作業前の状態】 sharing -l で確認した共有3つ: - Internal (/Volumes/LACIERAID2TB/Internal): SMB, ゲスト=可 - aneeson.com (/Users/niac/web/aneeson.com): SMB, ゲスト=不可 - niacのパブリックフォルダ (/Users/niac/Public): AFP+SMB, ゲスト=可 【実施内容】 1. 全共有のゲストアクセスを無効化 sudo sharing -e 'Internal' -g 000 sudo sharing -e 'niacのパブリックフォルダ' -g 000 ※ 途中 -s 100 の意味を誤解し SMB を一旦無効化してしまったため、 sudo sharing -e 'Internal' -s 001 と sudo sharing -e 'niacのパブリックフォルダ' -s 101 で復元。 sharing コマンドのフラグは AFP/FTP/SMB の3桁順。 2. Internal に対し everyone への ACL を再帰付与 sudo chmod -R +a 'everyone allow read,write,delete,append, readattr,writeattr,readextattr,writeextattr,readsecurity, file_inherit,directory_inherit' \ /Volumes/LACIERAID2TB/Internal 対象 483,550 件中 246 件で "Operation not permitted" が発生。 調査の結果、これらは古い AppleWorks 6.app バンドル内部の 0バイト互換ファイル(HFS Classic Mac OS 時代の遺物)で、 SMB 共有実用上は影響なし。 ルートおよび一般ユーザーディレクトリ(DCIM, Desktop, FileMaker等) には正しく ACL が継承され、新規作成ファイルにも自動継承される。 【作業前のサーバー状態確認】 - uptime: load avg 3.33 (4論理CPU / 2物理コアなので許容範囲。 起動 20 分後で mdworker による Spotlight indexing が主因と判断) - df: LaCieRAID2TB 98% 使用、空き 48GB 【最終状態】 共有名 | プロトコル | ゲスト | everyone 権限 Internal | SMB | 無 | rw (継承付き) aneeson.com | SMB | 無 | 変更なし niacのパブリック | AFP+SMB | 無 | 変更なし 【メモ】 - ゲスト無効化により、SMB 接続は登録ユーザー(niac, menou, yuria, boss, aneeson 等) での認証が必要。3名の使用者にはアカウント共有を周知すること。 - 古いファイル名に ":" を含むものや AppleWorks 6.app 内のファイルは ACL 設定不可だが実害なし。 ---------------------------------------------------------------------- 2026-05-18 MariaDB 接続枯渇障害の復旧と再発防止 【背景・目的】 「norizuki.com の MariaDB が止まっているか」との問い合わせ。 調査の結果、mysqld は稼働していたが "Too many connections" で 新規接続を一切受け付けられず実質ダウン状態だった。原因究明と恒久対策。 【原因】 - mysqld が *:3306 で全インターフェース待受。norizuki.com はグローバル IP直付け(NAT無し)で、pf のルール上 3306 は whitelist 限定にもオープン ポートにも入っておらず外部から到達可能になっていた。 - 3306 への接続 133 件が全て CLOSE_WAIT で滞留(正常利用ゼロ)。 発生元は外部スキャナ/ブルートフォースbot (104.236.201.180 が 61 件、他 121.167.15.73 / 116.30.192.132 / 152.32.250.21 / 71.6.165.200 等)。 - my.cnf に max_connections 設定なし=デフォルト 151。滞留分で枠が 埋まり正規クライアント・管理者とも接続不可。 - 5/18 11:47 頃からスキャナ攻撃で枯渇、err ログに "Too many connections (unauthenticated host)" が連続。 【作業前のサーバー状態確認】 - uptime: load avg 1.17(2 users)、復旧作業中一時 1.80 まで上昇 - mysqld PID 46859 稼働、socket /tmp/mysql.sock、 datadir /usr/local/var/mysql(plist の --datadir 優先で稼働) 【実施内容】 1. pf で 3306 を whitelist 限定化(承認済み) /etc/pf.anchors/blacklist の block in quick proto tcp to any port {...} に 3306 を追加。 whitelist の pass quick が先なので作業Mac(159.28.108.1)/ 自宅(221.170.61.15)/localhost からは引き続き接続可。 常習bot 5IP を blacklist.txt に追加し sort -u。 pfctl -a blacklist -f /etc/pf.anchors/blacklist でリロード。 ※ 副次効果: blacklist テーブルが pfctl 未ロード状態(0件)だったのを アンカー再読込で蓄積済み数千件を全件有効化。 2. /usr/local/etc/my.cnf の [mysqld] に bind-address=127.0.0.1 追加 (mysqld 自体が外部インターフェースを待受けないよう二重防御)。 3. MariaDB 再起動(LaunchAgent homebrew.mxcl.mariadb 経由 unload→load)。mysqld がシャットダウンで滞留スレッド "did not exit" によりハングしたため kill -9 で強制終了 (InnoDB クラッシュセーフ、再起動時リカバリ正常完了・破損なし)。 4. 地雷除去: my.cnf の datadir=/Volumes/LACIERAID2TB/mysql_data 行を削除。これは過去に DB を LaCie RAID へ移そうとして Catalina の TCC(daemon は /Volumes/* が EPERM 拒否)により 断念した際の消し忘れ。plist の --datadir 優先で不活性だったが、 --datadir 無し起動時に空 datadir 新規作成/起動失敗の地雷のため除去。 【最終状態】 - mysqld 稼働(PID 57740)、127.0.0.1:3306 のみ待受 (err ログ "Server socket created on IP: '127.0.0.1'." で確認) - ping 正常、DB 5件(information_schema/mysql/niac/ performance_schema/test)健全 - CLOSE_WAIT 133→解消、外部到達不能で再発防止 - load 1.41 に低下 - バックアップ: /usr/local/etc/my.cnf.bak_*、 /etc/pf.anchors/blacklist.bak_*、blacklist.txt.bak_* を取得 【メモ】 - 外部ブルートフォース対策は「3306 を 127.0.0.1 待受 + pf 遮断」で 構造的に成立不能とするのが最強(レート制限より確実)。 - 25/80/443/587/993 は受信用に開放必須。これらは既存の auth-fail-blacklist.sh(2回失敗でBAN)+ DKIM/LE で運用継続。 - ローカルアプリ(as/ 等)は socket /tmp/mysql.sock 接続のため bind-address=127.0.0.1 / pf 遮断の影響なし。 ---------------------------------------------------------------------- 2026-05-18 旧業務システムの3月決算修正をWeb会計DB(niac)へ反映 【背景・目的】 旧業務システム(/Volumes/Internal/業務システム/会計&販売管理)で 2026年3月分(会計年度2025・月12)の決算整理仕訳を実施・修正。 これをWeb会計システム(as/, MariaDB niac)へ反映する。 【調査でわかったこと】 - 移行手順は migrate_to_mariadb.py(Dropbox/www/業務システム/会計&販売 管理/)。振伝/繰越バイナリ + 設定/勘定科目 を読み migration.sql を生成 →mysqlで流す「全件 TRUNCATE→全年度再投入」型(月単位パッチ機能なし)。 CommonDB.rdb は読まない。会計期は各レコードの日付で決定。 - 正本は /Volumes/Internal。スクリプトが読むDropboxコピーは未同期で古い。 - 決算整理仕訳は3/31付。今日の更新は振伝2026:02/03・繰越2026:04に入る (振伝2025:12は未変更)が、日付判定でFY2025月12へ正しく取込まれる。 - Web固有データ: FY2026(slip_date>=2026-04-01)43伝票はWeb入力分で要保全。 partner_id紐付け10件(補助簿の取引先タグ。うち8件FY2026/2件FY2025・3月)。 【実施内容】 A. バックアップ(TS=20260518_145738): 全gl_*を mysqldump (/Users/niac/db_backups/niac_gl_*.sql(.gz)) + 同一DB内に