{"id":16402,"date":"2025-07-06T02:27:14","date_gmt":"2025-07-05T17:27:14","guid":{"rendered":"https:\/\/jyakusyadansei.com\/?p=16402"},"modified":"2025-07-08T13:58:45","modified_gmt":"2025-07-08T04:58:45","slug":"%e3%80%90%e5%82%99%e5%bf%98%e9%8c%b2%e3%80%91claude-code-%e3%81%ae-dangerously-skip-permissions-%e3%82%92%e5%ae%89%e5%85%a8%e3%81%ab%e4%bd%bf%e3%81%86hooks%e8%a8%ad%e5%ae%9a-%f0%9f%90%bb","status":"publish","type":"post","link":"https:\/\/jyakusyadansei.com\/?p=16402","title":{"rendered":"\u3010\u5b8c\u5168\u7248\u3011Claude Code \u306e &#8211;dangerously-skip-permissions \u3092\u5b89\u5168\u306b\u4f7f\u3044\u3001rm -rf ~\u304b\u3089\u8eab\u3092\u5b88\u308b\u9632\u5fa1\u8853\u3010\u4e8c\u6bb5\u968e\u9632\u5fa1\u3011"},"content":{"rendered":"<div class=\"grid-cols-1 grid gap-2.5 [&amp;_&gt;_*]:min-w-0 !gap-3.5\">\n<div class=\"grid-cols-1 grid gap-2.5 [&amp;_&gt;_*]:min-w-0 !gap-3.5\">\n<div>\n<div class=\"grid-cols-1 grid gap-2.5 [&amp;_&gt;_*]:min-w-0 !gap-3.5\">\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\u6587\u7cfb\u3067\u3082\u308f\u304b\u308b <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u5bfe\u7b56 &#8211; \u5927\u5207\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u7d76\u5bfe\u306b\u5b88\u308b\u65b9\u6cd5<\/h2>\n<h3 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udcdc \u8a18\u4e8b\u6539\u8a02\u5c65\u6b74<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>v1.0 (2025-07-03)<\/strong> &#8211; \u521d\u7248\uff1a\u57fa\u672c\u7684\u306ahooks\u8a2d\u5b9a\u306b\u3088\u308b\u5b89\u5168\u5bfe\u7b56<br \/>\n<strong>v2.0 (2025-07-06)<\/strong> &#8211; AppArmor\u5bfe\u7b56\u8ffd\u52a0\uff1a\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u9632\u5fa1\u306e2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0<br \/>\n<strong>v3.0 (2025-07-08)<\/strong> &#8211; \u30b9\u30ea\u30fc\u30d7\/\u30ec\u30b8\u30e5\u30fc\u30e0\u5bfe\u7b56\u8ffd\u52a0\uff1a\u65e5\u5e38\u4f7f\u7528\u3067\u306e\u5b9f\u7528\u6027\u5411\u4e0a\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u5fa9\u5e30\u65b9\u6cd5\u3092\u8ffd\u52a0<\/p>\n<hr \/>\n<p class=\"whitespace-normal break-words\">\u308f\u3057\u3058\u3083\u3001\u307b\u306e\u307c\u306e\u3057\u308d\u304f\u307eGPT\u306a\u306e\u3058\u3083\uff01\u4eca\u65e5\u306f<strong>\u6587\u7cfb\u306e\u30da\u30a2\u30d7\u30ed\u30b0\u30e9\u30de\u30fc<\/strong>\u306e\u304a\u4e3b\u306b\u3082\u3001\u306a\u305cClaude Code\u306e\u5b89\u5168\u5bfe\u7b56\u304c\u5fc5\u8981\u306a\u306e\u304b\u3001\u305d\u3057\u3066<strong>\u78ba\u5b9f\u306a\u9632\u5fa1\u65b9\u6cd5<\/strong>\u3092\u3084\u3055\u3057\u304f\u89e3\u8aac\u3059\u308b\u306e\u3058\u3083\u3088\u301c<\/p>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u3057\u308d\u304f\u307e\u3061\u3083\u3093\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u3088\u304f\u308f\u304b\u3089\u306a\u3044\u3051\u3069\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u6d88\u3048\u308b\u306e\u306f\u6016\u3044\u3067\u3059&#8230;\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u5927\u4e08\u592b\u3058\u3083\uff01\u304a\u4e3b\u306b\u3082\u308f\u304b\u308b\u3088\u3046\u306b\u3001\u8eab\u8fd1\u306a\u4f8b\u3067\u8aac\u660e\u3057\u3066\u304b\u3089\u3001<strong>\u7d76\u5bfe\u306b\u5931\u6557\u3057\u306a\u3044\u624b\u9806<\/strong>\u3092\u6559\u3048\u3066\u3042\u3052\u308b\u306e\u3058\u3083\u3088\u300d<\/p>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udc80 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u3063\u3066\u4f55\uff1f\u306a\u305c\u305d\u3093\u306a\u306b\u5371\u967a\u306a\u306e\uff1f<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83c\udfe0 \u304a\u4e3b\u306e\u90e8\u5c4b\u3067\u4f8b\u3048\u308b\u3068<\/h3>\n<p class=\"whitespace-normal break-words\">\u60f3\u50cf\u3057\u3066\u307f\u3066\u304f\u308c\u3058\u3083\u3002\u304a\u4e3b\u306e\u90e8\u5c4b\u306b\u306f\u5927\u5207\u306a\u3082\u306e\u304c\u305f\u304f\u3055\u3093\u3042\u308b\u3058\u3083\u308d\u3046\uff1a<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>\u5352\u696d\u30a2\u30eb\u30d0\u30e0<\/strong> \ud83d\udcda (\u601d\u3044\u51fa\u306e\u5199\u771f)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u5927\u5b66\u306e\u30ec\u30dd\u30fc\u30c8<\/strong> \ud83d\udcc4 (\u91cd\u8981\u306a\u66f8\u985e)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u5bb6\u65cf\u306e\u5199\u771f<\/strong> \ud83d\udcf7 (\u304b\u3051\u304c\u3048\u306e\u306a\u3044\u8a18\u61b6)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u65e5\u8a18\u5e33<\/strong> \ud83d\udcd6 (\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u8a18\u9332)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u4ed5\u4e8b\u306e\u8cc7\u6599<\/strong> \ud83d\udcbc (\u30ad\u30e3\u30ea\u30a2\u306b\u95a2\u308f\u308b\u5927\u4e8b\u306a\u3082\u306e)<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u3068\u3044\u3046\u306e\u306f\u3001<strong>\u3053\u308c\u3089\u3092\u4e00\u77ac\u3067\u5168\u90e8\u71c3\u3084\u3057\u3066\u3057\u307e\u3046\u9b54\u6cd5\u306e\u546a\u6587<\/strong>\u306a\u306e\u3058\u3083\u3002<\/p>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u3048\uff01\u5168\u90e8\u71c3\u3048\u3061\u3083\u3046\u306e\uff1f\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u305d\u3046\u3058\u3083\u3002\u3057\u304b\u3082<strong>\u7070\u3082\u6b8b\u3089\u305a\u3001\u5fa9\u6d3b\u3082\u3067\u304d\u306a\u3044<\/strong>\u306e\u3058\u3083\u3088&#8230;\u300d<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83d\udcf1 \u30b9\u30de\u30db\u3067\u4f8b\u3048\u308b\u3068<\/h3>\n<p class=\"whitespace-normal break-words\">\u304a\u4e3b\u306e\u30b9\u30de\u30db\u306b\u3082\u5927\u5207\u306a\u3082\u306e\u304c\u3042\u308b\u3058\u3083\u308d\u3046\uff1a<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>LINE \u306e\u30c8\u30fc\u30af\u5c65\u6b74<\/strong> \ud83d\udcac \u2192 \u5168\u524a\u9664<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u5199\u771f\u30fb\u52d5\u753b<\/strong> \ud83d\udcf8 \u2192 \u5168\u524a\u9664<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u9023\u7d61\u5148<\/strong> \ud83d\udcde \u2192 \u5168\u524a\u9664<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u30a2\u30d7\u30ea\u3068\u305d\u306e\u30c7\u30fc\u30bf<\/strong> \ud83d\udcf1 \u2192 \u5168\u524a\u9664<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u97f3\u697d\u30fb\u30d7\u30ec\u30a4\u30ea\u30b9\u30c8<\/strong> \ud83c\udfb5 \u2192 \u5168\u524a\u9664<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf ~\/<\/code> \u306f\u3001\u3053\u308c\u3092<strong>\u30b9\u30de\u30db\u306e\u521d\u671f\u5316\u3069\u3053\u308d\u304b\u3001\u30c7\u30fc\u30bf\u5fa9\u65e7\u3082\u4e0d\u53ef\u80fd\u306a\u72b6\u614b<\/strong>\u306b\u3057\u3066\u3057\u307e\u3046\u306e\u3058\u3083\u3002<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83d\udcbb \u30d1\u30bd\u30b3\u30f3\u3067\u306e\u5b9f\u969b\u306e\u88ab\u5bb3\u4f8b<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\">rm<\/span> -rf ~\/Documents     <span class=\"token\"># \u66f8\u985e\u30d5\u30a9\u30eb\u30c0\u304c\u5168\u6d88\u5931<\/span>\r\n<span class=\"token\">rm<\/span> -rf ~\/Pictures      <span class=\"token\"># \u5199\u771f\u30d5\u30a9\u30eb\u30c0\u304c\u5168\u6d88\u5931<\/span>\r\n<span class=\"token\">rm<\/span> -rf ~\/Desktop       <span class=\"token\"># \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u304c\u7a7a\u3063\u307d\u306b<\/span>\r\n<span class=\"token\">rm<\/span> -rf ~\/              <span class=\"token\"># \u30db\u30fc\u30e0\u5168\u4f53\u304c\u6d88\u5931\uff08\u6700\u60aa\uff09<\/span>\r\n<span class=\"token\">rm<\/span> -rf \/               <span class=\"token\"># \u30d1\u30bd\u30b3\u30f3\u5168\u4f53\u304c\u7834\u58ca\uff08\u8d85\u6700\u60aa\uff09<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u60f3\u50cf\u3057\u305f\u3060\u3051\u3067\u6016\u3044&#8230;\u3067\u3082\u306a\u3093\u3067AI\u304c\u305d\u3093\u306a\u3053\u3068\u3059\u308b\u306e\uff1f\u300d<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83e\udd16 AI\u304c <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u3092\u3057\u3066\u3057\u307e\u3046\u7406\u7531<\/h3>\n<p class=\"whitespace-normal break-words\">AI\u306f<strong>\u5584\u610f\u3067\u9593\u9055\u3063\u305f\u5224\u65ad<\/strong>\u3092\u3059\u308b\u3053\u3068\u304c\u3042\u308b\u306e\u3058\u3083\uff1a<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u3088\u304f\u3042\u308b\u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83d\udc64 \u30e6\u30fc\u30b6\u30fc\uff1a\u300c\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u3092\u6574\u7406\u3057\u3066\u300d\r\n\ud83e\udd16 AI\uff1a\u300c\u4e0d\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u307e\u3059\u306d\uff01\u300d\r\n\ud83d\udcbb \u5b9f\u884c\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\uff1arm -rf ~\/Desktop\/*\r\n\ud83d\ude31 \u7d50\u679c\uff1a\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5168\u6d88\u5931<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83d\udc64 \u30e6\u30fc\u30b6\u30fc\uff1a\u300c\u5bb9\u91cf\u3092\u7a7a\u3051\u3066\u300d  \r\n\ud83e\udd16 AI\uff1a\u300c\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u307e\u3059\uff01\u300d\r\n\ud83d\udcbb \u5b9f\u884c\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\uff1afind ~ -size +100M -delete\r\n\ud83d\ude31 \u7d50\u679c\uff1a\u5927\u5207\u306a\u52d5\u753b\u3084\u5199\u771f\u304c\u6d88\u5931<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83d\udc64 \u30e6\u30fc\u30b6\u30fc\uff1a\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u304d\u308c\u3044\u306b\u3057\u3066\u300d\r\n\ud83e\udd16 AI\uff1a\u300c\u53e4\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u6574\u7406\u3057\u307e\u3059\u306d\uff01\u300d\r\n\ud83d\udcbb \u5b9f\u884c\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\uff1arm -rf ~\/project\/\r\n\ud83d\ude31 \u7d50\u679c\uff1a\u6570\u30f6\u6708\u306e\u4f5c\u696d\u304c\u6c34\u306e\u6ce1<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300cAI\u306f\u300e\u6574\u7406\u3059\u308b = \u5168\u90e8\u6d88\u3059\u300f\u3068\u8003\u3048\u304c\u3061\u306a\u306e\u3058\u3083\u3002\u4eba\u9593\u306b\u3068\u3063\u3066\u306e\u300e\u6574\u7406\u300f\u3068AI\u306b\u3068\u3063\u3066\u306e\u300e\u6574\u7406\u300f\u306f\u5168\u7136\u9055\u3046\u306e\u3058\u3083\u3088\u300d<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\u26a0\ufe0f \u672c\u5f53\u306e\u6050\u6016\uff1a&#8211;dangerous \u3092\u4f7f\u308f\u306a\u304f\u3066\u3082\u5371\u967a<\/h3>\n<p class=\"whitespace-normal break-words\">\u591a\u304f\u306e\u4eba\u304c\u52d8\u9055\u3044\u3057\u3066\u3044\u308b\u306e\u306f\u3001\u300c<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">--dangerous<\/code> \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u308f\u306a\u3051\u308c\u3070\u5b89\u5168\u300d\u3068\u3044\u3046\u3053\u3068\u3058\u3083\u3002<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u3067\u3082\u5b9f\u969b\u306f\uff1a<\/strong><\/p>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">Claude Code\u304c\u666e\u901a\u306b\u8d77\u52d5<\/li>\n<li class=\"whitespace-normal break-words\">AI\u304c\u300c\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u307e\u3059\u300d\u3068\u63d0\u6848<\/li>\n<li class=\"whitespace-normal break-words\">\u6a29\u9650\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u306b <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf ~\/Documents<\/code> \u3068\u8868\u793a<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u30e6\u30fc\u30b6\u30fc\u304c\u5185\u5bb9\u3092\u7406\u89e3\u305b\u305a\u306b\u300cOK\u300d\u3092\u30af\u30ea\u30c3\u30af<\/strong><\/li>\n<li class=\"whitespace-normal break-words\">\u5927\u5207\u306a\u66f8\u985e\u30d5\u30a9\u30eb\u30c0\u304c\u6d88\u5931 \ud83d\udca5<\/li>\n<\/ol>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u666e\u901a\u306b\u4f7f\u3063\u3066\u3066\u3082\u5371\u967a\u306a\u3093\u3067\u3059\u306d&#8230;\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u305d\u3046\u3058\u3083\uff01\u3060\u304b\u3089\u3053\u305d\u3001<strong>\u4eca\u304b\u3089\u7d39\u4ecb\u3059\u308b2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0\u304c\u7d76\u5bfe\u306b\u5fc5\u8981<\/strong>\u306a\u306e\u3058\u3083\u3088\u300d<\/p>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udee1\ufe0f \u89e3\u6c7a\u7b56\uff1a\u4e16\u754c\u6700\u5f37\u306e2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0<\/h2>\n<p class=\"whitespace-normal break-words\">\u308f\u3057\u304c\u4f5c\u3063\u305f<strong>\u771f\u306e\u5b8c\u74a7\u7248<\/strong>\u306f\u3001\u4ee5\u4e0b\u3092\u5b9f\u73fe\u3059\u308b\u306e\u3058\u3083\uff1a<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83c\udff0 \u7b2c1\u6bb5\u968e\uff1a\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u9632\u5fa1\uff08AppArmor\uff09<\/h3>\n<p class=\"whitespace-normal break-words\">\u2705 <strong>OS \u30ec\u30d9\u30eb\u3067\u306e\u7269\u7406\u7684\u5236\u9650<\/strong> &#8211; \u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u3092\u5236\u5fa1<br \/>\n\u2705 <strong>\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u306e\u5b8c\u5168\u5236\u5fa1<\/strong> &#8211; \u91cd\u8981\u30d5\u30a9\u30eb\u30c0\u3078\u306e\u524a\u9664\u30a2\u30af\u30bb\u30b9\u3092\u7269\u7406\u7684\u306b\u906e\u65ad<br \/>\n\u2705 <strong>\u6700\u5f8c\u306e\u7826<\/strong> &#8211; Claude\u8a2d\u5b9a\u3092\u8fc2\u56de\u3055\u308c\u3066\u3082\u5b89\u5168<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83c\udfe0 \u7b2c2\u6bb5\u968e\uff1a\u30a2\u30d7\u30ea\u30ec\u30d9\u30eb\u9632\u5fa1\uff08Claude\u8a2d\u5b9a\uff09<\/h3>\n<p class=\"whitespace-normal break-words\">\u2705 <strong>\u4e8b\u524d\u30c1\u30a7\u30c3\u30af\u3068\u30d6\u30ed\u30c3\u30af<\/strong> &#8211; <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u304c\u5b9f\u884c\u3055\u308c\u308b\u524d\u306b\u5b8c\u5168\u505c\u6b62<br \/>\n\u2705 <strong>\u8996\u899a\u7684\u8b66\u544a<\/strong> &#8211; \u5371\u967a\u306a\u30b3\u30de\u30f3\u30c9\u306f\u771f\u3063\u8d64\u306a\u8b66\u544a\u3067\u8868\u793a<br \/>\n\u2705 <strong>\u9593\u9055\u3044\u9632\u6b62<\/strong> &#8211; \u3046\u3063\u304b\u308aOK\u3092\u62bc\u3057\u3066\u3082\u5b89\u5168<br \/>\n\u2705 <strong>\u958b\u767a\u7d99\u7d9a<\/strong> &#8211; \u5b89\u5168\u306a\u30b3\u30de\u30f3\u30c9\u306f\u666e\u901a\u306b\u52d5\u4f5c<br \/>\n\u2705 <strong>\u65e5\u5e38\u4f7f\u7528\u5bfe\u5fdc<\/strong> &#8211; \u30b9\u30ea\u30fc\u30d7\/\u30ec\u30b8\u30e5\u30fc\u30e0\u6642\u306e\u6ce8\u610f\u70b9\u3082\u89e3\u6c7a<\/p>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c2\u3064\u306e\u58c1\u304c\u3042\u308b\u304b\u3089\u3001\u3069\u3061\u3089\u304b\u304c\u7834\u3089\u308c\u3066\u3082\u5927\u4e08\u592b\u306a\u3093\u3067\u3059\u306d\uff01\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u305d\u306e\u901a\u308a\u3058\u3083\uff01\u307e\u3055\u306b<strong>\u591a\u5c64\u9632\u5fa1<\/strong>\u306e\u8003\u3048\u65b9\u306a\u306e\u3058\u3083\u3088\u301c\u300d<\/p>\n<hr \/>\n<h1 class=\"text-2xl font-bold mt-1 text-text-100\">\ud83d\udccb \u5b9f\u88c5\u624b\u9806\uff08\u771f\u306e\u5b8c\u74a7\u7248\uff09<\/h1>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83c\udfaf \u9632\u5fa1\u30ec\u30d9\u30eb\u306e\u9078\u629e<\/h2>\n<p class=\"whitespace-normal break-words\">\u304a\u4e3b\u306e\u30b9\u30ad\u30eb\u30ec\u30d9\u30eb\u306b\u5fdc\u3058\u3066\u3001\u4ee5\u4e0b\u304b\u3089\u9078\u629e\u3067\u304d\u308b\u306e\u3058\u3083\uff1a<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\ud83d\udd30 \u521d\u5fc3\u8005\u30b3\u30fc\u30b9<\/strong>\uff1a\u7b2c2\u6bb5\u968e\u306e\u307f\uff08Claude\u8a2d\u5b9a\uff09- 5\u5206\u3067\u5b8c\u4e86<br \/>\n<strong>\u26a1 \u63a8\u5968\u30b3\u30fc\u30b9<\/strong>\uff1a\u7b2c1\u6bb5\u968e + \u7b2c2\u6bb5\u968e &#8211; 15\u5206\u3067\u5b8c\u4e86<br \/>\n<strong>\ud83c\udff0 \u6700\u5f37\u30b3\u30fc\u30b9<\/strong>\uff1a\u30ab\u30b9\u30bf\u30e0AppArmor + \u7b2c2\u6bb5\u968e &#8211; 30\u5206\u3067\u5b8c\u4e86<\/p>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u3069\u308c\u304c\u304a\u3059\u3059\u3081\uff1f\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c<strong>\u63a8\u5968\u30b3\u30fc\u30b9<\/strong>\u3058\u3083\u306e\uff01\u521d\u5fc3\u8005\u3067\u3082\u8a2d\u5b9a\u3067\u304d\u3066\u3001\u304b\u3064\u6700\u5f37\u30ec\u30d9\u30eb\u306e\u5b89\u5168\u6027\u3092\u5f97\u3089\u308c\u308b\u306e\u3058\u3083\u3088\u300d<\/p>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83c\udff0 \u7b2c1\u6bb5\u968e\uff1a\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u9632\u5fa1\uff08AppArmor\u8a2d\u5b9a\uff09<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 1-1: AppArmor\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff082\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># Ubuntu\/Debian \u306e\u5834\u5408<\/span>\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">apt<\/span> update\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">apt<\/span> <span class=\"token\">install<\/span> apparmor apparmor-utils\r\n\r\n<span class=\"token\"># CentOS\/RHEL \u306e\u5834\u5408  <\/span>\r\n<span class=\"token\">sudo<\/span> yum <span class=\"token\">install<\/span> apparmor\r\n\r\n<span class=\"token\"># macOS \u306e\u5834\u5408<\/span>\r\n<span class=\"token\"># AppArmor\u306f\u5229\u7528\u4e0d\u53ef - \u7b2c2\u6bb5\u968e\u306e\u307f\u3067\u5bfe\u5fdc<\/span>\r\n<span class=\"token\">echo<\/span> <span class=\"token\">\"macOS\u3067\u306f\u7b2c2\u6bb5\u968e\u9632\u5fa1\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3059\"<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 1-2: AppArmor\u306e\u72b6\u614b\u78ba\u8a8d<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># AppArmor\u304c\u52d5\u3044\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> systemctl status apparmor\r\n\r\n<span class=\"token\"># \u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1aActive (running)<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 1-3: Claude Code\u7528\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210\uff085\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># Claude Code\u306e\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u5834\u6240\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"token\">which<\/span> claude\r\n\r\n<span class=\"token\"># \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210<\/span>\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">nano<\/span> \/etc\/apparmor.d\/claude-code<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u3053\u306e\u753b\u9762\u306b\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\uff06\u30da\u30fc\u30b9\u30c8\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># Claude Code AppArmor Profile - \u3057\u308d\u304f\u307eGPT\u7248<\/span>\r\n<span class=\"token\"># \u5371\u967a\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u304b\u3089\u91cd\u8981\u30c7\u30fc\u30bf\u3092\u5b88\u308a\u307e\u3059<\/span>\r\n\r\n<span class=\"token\">#include &lt;tunables\/global&gt;<\/span>\r\n\r\n<span class=\"token\"># Claude Code\u306e\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\uff08\u74b0\u5883\u306b\u5fdc\u3058\u3066\u8abf\u6574\uff09<\/span>\r\n\/usr\/local\/bin\/claude <span class=\"token assign-left\">flags<\/span><span class=\"token\">=<\/span><span class=\"token\">(<\/span>complain<span class=\"token\">)<\/span> <span class=\"token\">{<\/span>\r\n  <span class=\"token\">#include &lt;abstractions\/base&gt;<\/span>\r\n  <span class=\"token\">#include &lt;abstractions\/nameservice&gt;<\/span>\r\n  <span class=\"token\">#include &lt;abstractions\/openssl&gt;<\/span>\r\n  <span class=\"token\">#include &lt;abstractions\/ssl_certs&gt;<\/span>\r\n\r\n  <span class=\"token\"># \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a2\u30af\u30bb\u30b9\uff08Claude API\u3068\u306e\u901a\u4fe1\u306b\u5fc5\u8981\uff09<\/span>\r\n  network inet stream,\r\n  network inet6 stream,\r\n\r\n  <span class=\"token\"># \u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30a2\u30af\u30bb\u30b9<\/span>\r\n  \/usr\/local\/bin\/claude mr,\r\n  \/bin\/** ix,\r\n  \/usr\/bin\/** ix,\r\n  \/usr\/local\/bin\/** ix,\r\n\r\n  <span class=\"token\"># \u4e00\u822c\u7684\u306a\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9<\/span>\r\n  \/etc\/passwd r,\r\n  \/etc\/group r,\r\n  \/etc\/nsswitch.conf r,\r\n  \/etc\/host.conf r,\r\n  \/etc\/hosts r,\r\n  \/etc\/resolv.conf r,\r\n\r\n  <span class=\"token\"># \u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u8aad\u307f\u53d6\u308a<\/span>\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/ r,\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/** r,\r\n\r\n  <span class=\"token\"># \u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u66f8\u304d\u8fbc\u307f\u8a31\u53ef<\/span>\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/workspace\/** rw,\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/projects\/** rw,\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/work\/** rw,\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/dev\/** rw,\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/tmp\/** rw,\r\n\r\n  <span class=\"token\"># Claude\u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<\/span>\r\n  owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/.claude\/** rw,\r\n\r\n  <span class=\"token\"># \u4e00\u6642\u30d5\u30a1\u30a4\u30eb<\/span>\r\n  \/tmp\/** rw,\r\n  \/var\/tmp\/** rw,\r\n\r\n  <span class=\"token\"># \u30d7\u30ed\u30bb\u30b9\u60c5\u5831<\/span>\r\n  @<span class=\"token\">{<\/span>PROC<span class=\"token\">}<\/span>\/*\/stat r,\r\n  @<span class=\"token\">{<\/span>PROC<span class=\"token\">}<\/span>\/*\/status r,\r\n  @<span class=\"token\">{<\/span>PROC<span class=\"token\">}<\/span>\/sys\/kernel\/osrelease r,\r\n\r\n  <span class=\"token\"># \ud83d\udea8 \u91cd\u8981\uff1a\u5371\u967a\u306a\u64cd\u4f5c\u3092\u5b8c\u5168\u7981\u6b62<\/span>\r\n  <span class=\"token\"># \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30d5\u30a9\u30eb\u30c0\u306e\u524a\u9664\u3092\u7981\u6b62<\/span>\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Documents\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\/** d,\r\n  \r\n  <span class=\"token\"># \u5199\u771f\u30d5\u30a9\u30eb\u30c0\u306e\u524a\u9664\u3092\u7981\u6b62  <\/span>\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Pictures\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u5199\u771f\/** d,\r\n  \r\n  <span class=\"token\"># \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306e\u524a\u9664\u3092\u7981\u6b62<\/span>\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Desktop\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/** d,\r\n  \r\n  <span class=\"token\"># \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u306e\u524a\u9664\u3092\u7981\u6b62<\/span>\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Downloads\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\/** d,\r\n\r\n  <span class=\"token\"># \u97f3\u697d\u30fb\u52d5\u753b\u30d5\u30a9\u30eb\u30c0\u306e\u524a\u9664\u3092\u7981\u6b62<\/span>\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Music\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u30df\u30e5\u30fc\u30b8\u30c3\u30af\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/Videos\/** d,\r\n  deny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/\u30d3\u30c7\u30aa\/** d,\r\n\r\n  <span class=\"token\"># \u30b7\u30b9\u30c6\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u66f8\u304d\u8fbc\u307f\u7981\u6b62<\/span>\r\n  deny \/sys\/** w,\r\n  deny \/etc\/** w,\r\n  deny \/boot\/** w,\r\n  deny \/usr\/** w,\r\n  deny \/bin\/** w,\r\n  deny \/sbin\/** w,\r\n\r\n  <span class=\"token\"># \u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u524a\u9664\u7981\u6b62<\/span>\r\n  deny \/** d,\r\n\r\n  <span class=\"token\"># \u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u64cd\u4f5c\u7981\u6b62<\/span>\r\n  deny \/dev\/sd* w,\r\n  deny \/dev\/nvme* w,\r\n\r\n  <span class=\"token\"># \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u6539\u5909\u7981\u6b62<\/span>\r\n  deny \/etc\/passwd w,\r\n  deny \/etc\/shadow w,\r\n  deny \/etc\/group w,\r\n<span class=\"token\">}<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u4fdd\u5b58\u65b9\u6cd5\uff1a<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Ctrl + X<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Y<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Enter<\/code><\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 1-4: \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u9069\u7528\uff081\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u6cd5\u30c1\u30a7\u30c3\u30af<\/span>\r\n<span class=\"token\">sudo<\/span> apparmor_parser -r \/etc\/apparmor.d\/claude-code\r\n\r\n<span class=\"token\"># \u30a8\u30e9\u30fc\u304c\u51fa\u306a\u3051\u308c\u3070\u6210\u529f<\/span>\r\n<span class=\"token\">echo<\/span> <span class=\"token\">\"\u2705 AppArmor\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u9069\u7528\u5b8c\u4e86\"<\/span>\r\n\r\n<span class=\"token\"># \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u9069\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> aa-status <span class=\"token\">|<\/span> <span class=\"token\">grep<\/span> claude<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>claude-code (complain)<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300ccomplain \u30e2\u30fc\u30c9\u3063\u3066\u4f55\uff1f\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300ccomplain \u30e2\u30fc\u30c9\u306f\u300e\u9055\u53cd\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u304c\u5b9f\u884c\u306f\u8a31\u53ef\u300f\u3059\u308b\u30e2\u30fc\u30c9\u3058\u3083\u3002\u6700\u521d\u306f\u3053\u308c\u3067\u52d5\u4f5c\u3092\u78ba\u8a8d\u3057\u3066\u3001\u554f\u984c\u306a\u3051\u308c\u3070 enforce \u30e2\u30fc\u30c9\uff08\u5b8c\u5168\u30d6\u30ed\u30c3\u30af\uff09\u306b\u5909\u66f4\u3059\u308b\u306e\u3058\u3083\u3088\u300d<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 1-5: enforce \u30e2\u30fc\u30c9\u3078\u306e\u5909\u66f4\uff08\u4e0a\u7d1a\u8005\u5411\u3051\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u52d5\u4f5c\u78ba\u8a8d\u5f8c\u3001\u5b8c\u5168\u30d6\u30ed\u30c3\u30af\u30e2\u30fc\u30c9\u306b\u5909\u66f4<\/span>\r\n<span class=\"token\">sudo<\/span> aa-enforce \/etc\/apparmor.d\/claude-code\r\n\r\n<span class=\"token\"># \u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> aa-status <span class=\"token\">|<\/span> <span class=\"token\">grep<\/span> claude<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>claude-code (enforce)<\/code><\/pre>\n<\/div>\n<\/div>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83c\udfe0 \u7b2c2\u6bb5\u968e\uff1a\u30a2\u30d7\u30ea\u30ec\u30d9\u30eb\u9632\u5fa1\uff08Claude\u8a2d\u5b9a\uff09<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 2-1: \u57fa\u672c\u30d5\u30a9\u30eb\u30c0\u306e\u6e96\u5099\uff082\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u5fc5\u8981\u306a\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210<\/span>\r\n<span class=\"token\">mkdir<\/span> -p ~\/.claude\/scripts\r\n<span class=\"token\">mkdir<\/span> -p ~\/.claude\/logs\r\n\r\n<span class=\"token\"># \u78ba\u8a8d<\/span>\r\n<span class=\"token\">ls<\/span> -la ~\/.claude<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 2-2: \u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210\uff083\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\">nano<\/span> ~\/.claude\/settings.json<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\uff06\u30da\u30fc\u30b9\u30c8\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">json<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-json\"><span class=\"token\">{<\/span>\r\n  <span class=\"token\">\"permissions\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">\"deny\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">[<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf \/*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Documents*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Pictures*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Desktop*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Downloads*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Music*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(rm -rf ~\/Videos*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(sudo rm -rf *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(find * -delete)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(find * -exec rm *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(:(){ :|:&amp; };:)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(dd if=\/dev\/zero *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(dd if=\/dev\/random *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(mkfs.*)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(fdisk *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(git config --global *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(curl * | bash)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(wget * | bash)\"<\/span>\r\n    <span class=\"token\">]<\/span><span class=\"token\">,<\/span>\r\n    <span class=\"token\">\"warn\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">[<\/span>\r\n      <span class=\"token\">\"Bash(rm *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(sudo *)\"<\/span><span class=\"token\">,<\/span>\r\n      <span class=\"token\">\"Bash(git push --force *)\"<\/span>\r\n    <span class=\"token\">]<\/span>\r\n  <span class=\"token\">}<\/span><span class=\"token\">,<\/span>\r\n  <span class=\"token\">\"hooks\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">\"PreToolUse\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">[<\/span>\r\n      <span class=\"token\">{<\/span>\r\n        <span class=\"token\">\"matcher\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">\"Bash\"<\/span><span class=\"token\">,<\/span>\r\n        <span class=\"token\">\"hooks\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">[<\/span>\r\n          <span class=\"token\">{<\/span>\r\n            <span class=\"token\">\"type\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">\"command\"<\/span><span class=\"token\">,<\/span>\r\n            <span class=\"token\">\"command\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">\"~\/.claude\/scripts\/dual-layer-security.sh\"<\/span>\r\n          <span class=\"token\">}<\/span>\r\n        <span class=\"token\">]<\/span>\r\n      <span class=\"token\">}<\/span>\r\n    <span class=\"token\">]<\/span>\r\n  <span class=\"token\">}<\/span><span class=\"token\">,<\/span>\r\n  <span class=\"token\">\"security\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">\"dual_layer_protection\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">true<\/span><span class=\"token\">,<\/span>\r\n    <span class=\"token\">\"apparmor_integration\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">true<\/span><span class=\"token\">,<\/span>\r\n    <span class=\"token\">\"log_file\"<\/span><span class=\"token\">:<\/span> <span class=\"token\">\"~\/.claude\/logs\/security.log\"<\/span>\r\n  <span class=\"token\">}<\/span>\r\n<span class=\"token\">}<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u4fdd\u5b58\uff1a<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Ctrl + X<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Y<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Enter<\/code><\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 2-3: \u5f37\u5316\u7248\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30af\u30ea\u30d7\u30c8\u4f5c\u6210\uff085\u5206\uff09<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\">nano<\/span> ~\/.claude\/scripts\/dual-layer-security.sh<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\uff06\u30da\u30fc\u30b9\u30c8\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token shebang\">#!\/bin\/bash<\/span>\r\n\r\n<span class=\"token\">################################################################################<\/span>\r\n<span class=\"token\"># Dual-Layer Security Guard for Claude Code - \u3057\u308d\u304f\u307eGPT\u7248\u3010\u771f\u306e\u5b8c\u74a7\u7248\u3011<\/span>\r\n<span class=\"token\"># \u7b2c1\u6bb5\u968e\uff08AppArmor\uff09+ \u7b2c2\u6bb5\u968e\uff08\u30a2\u30d7\u30ea\u5236\u5fa1\uff09\u306e2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0<\/span>\r\n<span class=\"token\">################################################################################<\/span>\r\n\r\n<span class=\"token\"># \u57fa\u672c\u8a2d\u5b9a<\/span>\r\n<span class=\"token assign-left\">LOG_FILE<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token environment\">$HOME<\/span><span class=\"token\">\/.claude\/logs\/security.log\"<\/span>\r\n<span class=\"token assign-left\">SETTINGS_FILE<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token environment\">$HOME<\/span><span class=\"token\">\/.claude\/settings.json\"<\/span>\r\n<span class=\"token assign-left\">CONFIG_MTIME_FILE<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token environment\">$HOME<\/span><span class=\"token\">\/.claude\/logs\/config_timestamp\"<\/span>\r\n<span class=\"token assign-left\">APPARMOR_LOG<\/span><span class=\"token\">=<\/span><span class=\"token\">\"\/var\/log\/kern.log\"<\/span>\r\n<span class=\"token assign-left\">TIMESTAMP<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">date<\/span> <span class=\"token\">'+%Y-%m-%d %H:%M:%S'<\/span><span class=\"token\">)<\/span>\r\n\r\n<span class=\"token\"># \u8868\u793a\u8272\u306e\u8a2d\u5b9a<\/span>\r\n<span class=\"token assign-left\">RED<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[0;31m'<\/span>      <span class=\"token\"># \u8d64\u8272\uff08\u5371\u967a\uff09<\/span>\r\n<span class=\"token assign-left\">YELLOW<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[1;33m'<\/span>   <span class=\"token\"># \u9ec4\u8272\uff08\u8b66\u544a\uff09<\/span>\r\n<span class=\"token assign-left\">GREEN<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[0;32m'<\/span>    <span class=\"token\"># \u7dd1\u8272\uff08\u5b89\u5168\uff09<\/span>\r\n<span class=\"token assign-left\">BLUE<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[0;34m'<\/span>     <span class=\"token\"># \u9752\u8272\uff08\u60c5\u5831\uff09<\/span>\r\n<span class=\"token assign-left\">PURPLE<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[0;35m'<\/span>   <span class=\"token\"># \u7d2b\u8272\uff08AppArmor\uff09<\/span>\r\n<span class=\"token assign-left\">NC<\/span><span class=\"token\">=<\/span><span class=\"token\">'\\033[0m'<\/span>          <span class=\"token\"># \u8272\u30ea\u30bb\u30c3\u30c8<\/span>\r\n\r\n<span class=\"token\"># \u30ed\u30b0\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210<\/span>\r\n<span class=\"token\">mkdir<\/span> -p <span class=\"token\">\"<\/span><span class=\"token\">$(<\/span><span class=\"token\">dirname<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$LOG_FILE<\/span><span class=\"token\">\"<\/span><span class=\"token\">)<\/span><span class=\"token\">\"<\/span>\r\n<span class=\"token\">mkdir<\/span> -p <span class=\"token\">\"<\/span><span class=\"token\">$(<\/span><span class=\"token\">dirname<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$CONFIG_MTIME_FILE<\/span><span class=\"token\">\"<\/span><span class=\"token\">)<\/span><span class=\"token\">\"<\/span>\r\n\r\n<span class=\"token\"># \u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u95a2\u6570<\/span>\r\n<span class=\"token function-name\">log_event<\/span><span class=\"token\">(<\/span><span class=\"token\">)<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">local<\/span> <span class=\"token assign-left\">level<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token\">$1<\/span><span class=\"token\">\"<\/span>\r\n    <span class=\"token\">local<\/span> <span class=\"token assign-left\">message<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token\">$2<\/span><span class=\"token\">\"<\/span>\r\n    <span class=\"token\">local<\/span> <span class=\"token assign-left\">command<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token\">$3<\/span><span class=\"token\">\"<\/span>\r\n    \r\n    <span class=\"token\">echo<\/span> <span class=\"token\">\"[<\/span><span class=\"token\">$TIMESTAMP<\/span><span class=\"token\">] [<\/span><span class=\"token\">$level<\/span><span class=\"token\">] <\/span><span class=\"token\">$message<\/span><span class=\"token\"> - Command: <\/span><span class=\"token\">$command<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;&gt;<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$LOG_FILE<\/span><span class=\"token\">\"<\/span>\r\n<span class=\"token\">}<\/span>\r\n\r\n<span class=\"token\"># AppArmor\u72b6\u614b\u30c1\u30a7\u30c3\u30af\u95a2\u6570<\/span>\r\n<span class=\"token function-name\">check_apparmor_status<\/span><span class=\"token\">(<\/span><span class=\"token\">)<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">if<\/span> <span class=\"token\">command<\/span> -v aa-status <span class=\"token\">&amp;&gt;<\/span> \/dev\/null<span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n        <span class=\"token\">local<\/span> <span class=\"token assign-left\">claude_status<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">sudo<\/span><span class=\"token\"> aa-status <\/span><span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null <\/span><span class=\"token\">|<\/span> <span class=\"token\">grep<\/span><span class=\"token\"> -i claude <\/span><span class=\"token\">||<\/span> <span class=\"token\">echo<\/span> <span class=\"token\">\"not found\"<\/span><span class=\"token\">)<\/span>\r\n        \r\n        <span class=\"token\">if<\/span> <span class=\"token\">[<\/span><span class=\"token\">[<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$claude_status<\/span><span class=\"token\">\"<\/span> <span class=\"token\">==<\/span> *<span class=\"token\">\"enforce\"<\/span>* <span class=\"token\">]<\/span><span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${PURPLE}<\/span><span class=\"token\">\ud83c\udff0 AppArmor Protection: ACTIVE (enforce mode)<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n            log_event <span class=\"token\">\"APPARMOR\"<\/span> <span class=\"token\">\"AppArmor enforce mode active\"<\/span> <span class=\"token\">\"aa-status\"<\/span>\r\n            <span class=\"token\">return<\/span> <span class=\"token\">0<\/span>\r\n        <span class=\"token\">elif<\/span> <span class=\"token\">[<\/span><span class=\"token\">[<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$claude_status<\/span><span class=\"token\">\"<\/span> <span class=\"token\">==<\/span> *<span class=\"token\">\"complain\"<\/span>* <span class=\"token\">]<\/span><span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${PURPLE}<\/span><span class=\"token\">\ud83c\udff0 AppArmor Protection: MONITORING (complain mode)<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n            log_event <span class=\"token\">\"APPARMOR\"<\/span> <span class=\"token\">\"AppArmor complain mode active\"<\/span> <span class=\"token\">\"aa-status\"<\/span>\r\n            <span class=\"token\">return<\/span> <span class=\"token\">1<\/span>\r\n        <span class=\"token\">else<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${YELLOW}<\/span><span class=\"token\">\u26a0\ufe0f  AppArmor Protection: NOT CONFIGURED<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${YELLOW}<\/span><span class=\"token\">\ud83d\udccb \u7b2c1\u6bb5\u968e\u9632\u5fa1\u304c\u672a\u8a2d\u5b9a\u3067\u3059 - \u7b2c2\u6bb5\u968e\u306e\u307f\u3067\u4fdd\u8b77\u4e2d<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n            log_event <span class=\"token\">\"APPARMOR\"<\/span> <span class=\"token\">\"AppArmor not configured for Claude Code\"<\/span> <span class=\"token\">\"aa-status\"<\/span>\r\n            <span class=\"token\">return<\/span> <span class=\"token\">2<\/span>\r\n        <span class=\"token\">fi<\/span>\r\n    <span class=\"token\">else<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2139\ufe0f  AppArmor: Not available on this system<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        log_event <span class=\"token\">\"APPARMOR\"<\/span> <span class=\"token\">\"AppArmor not available on system\"<\/span> <span class=\"token\">\"check\"<\/span>\r\n        <span class=\"token\">return<\/span> <span class=\"token\">3<\/span>\r\n    <span class=\"token\">fi<\/span>\r\n<span class=\"token\">}<\/span>\r\n\r\n<span class=\"token\"># \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u30c1\u30a7\u30c3\u30af\u95a2\u6570<\/span>\r\n<span class=\"token function-name\">check_config_update<\/span><span class=\"token\">(<\/span><span class=\"token\">)<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">if<\/span> <span class=\"token\">[<\/span> -f <span class=\"token\">\"<\/span><span class=\"token\">$SETTINGS_FILE<\/span><span class=\"token\">\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n        <span class=\"token\">local<\/span> <span class=\"token assign-left\">current_mtime<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">stat<\/span><span class=\"token\"> -c %Y <\/span><span class=\"token\">\"<\/span><span class=\"token\">$SETTINGS_FILE<\/span><span class=\"token\">\"<\/span> <span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null <\/span><span class=\"token\">||<\/span> <span class=\"token\">stat<\/span><span class=\"token\"> -f %m <\/span><span class=\"token\">\"<\/span><span class=\"token\">$SETTINGS_FILE<\/span><span class=\"token\">\"<\/span> <span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null<\/span><span class=\"token\">)<\/span>\r\n        <span class=\"token\">local<\/span> <span class=\"token assign-left\">stored_mtime<\/span><span class=\"token\">=<\/span><span class=\"token\">\"\"<\/span>\r\n        \r\n        <span class=\"token\">if<\/span> <span class=\"token\">[<\/span> -f <span class=\"token\">\"<\/span><span class=\"token\">$CONFIG_MTIME_FILE<\/span><span class=\"token\">\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token assign-left\">stored_mtime<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">cat<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$CONFIG_MTIME_FILE<\/span><span class=\"token\">\"<\/span> <span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null<\/span><span class=\"token\">)<\/span>\r\n        <span class=\"token\">fi<\/span>\r\n        \r\n        <span class=\"token\">if<\/span> <span class=\"token\">[<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$current_mtime<\/span><span class=\"token\">\"<\/span> <span class=\"token\">!=<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$stored_mtime<\/span><span class=\"token\">\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token\">echo<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$current_mtime<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$CONFIG_MTIME_FILE<\/span><span class=\"token\">\"<\/span>\r\n            \r\n            <span class=\"token\">if<\/span> <span class=\"token\">[<\/span> -n <span class=\"token\">\"<\/span><span class=\"token\">$stored_mtime<\/span><span class=\"token\">\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  \ud83d\udccb CONFIGURATION UPDATE DETECTED              \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502                                                 \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u66f4\u65b0\u3055\u308c\u3066\u3044\u307e\u3059                \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  \u3088\u308a\u78ba\u5b9f\u306a\u52d5\u4f5c\u306e\u305f\u3081\u4ee5\u4e0b\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a       \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502                                                 \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  1. \/exit \u3067Claude Code\u3092\u7d42\u4e86                   \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  2. claude \u3067\u518d\u8d77\u52d5                            \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  3. \/hooks \u3067\u8a2d\u5b9a\u78ba\u8a8d                          \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502                                                 \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2502  \ud83d\udc3b\u200d\u2744\ufe0f \u30b9\u30ea\u30fc\u30d7\u5fa9\u5e30\u5f8c\u3082\u540c\u69d8\u306e\u78ba\u8a8d\u3092\u63a8\u5968           \u2502<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${BLUE}<\/span><span class=\"token\">\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n                \r\n                log_event <span class=\"token\">\"CONFIG\"<\/span> <span class=\"token\">\"Configuration file updated - restart recommended\"<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$SETTINGS_FILE<\/span><span class=\"token\">\"<\/span>\r\n            <span class=\"token\">fi<\/span>\r\n        <span class=\"token\">fi<\/span>\r\n    <span class=\"token\">fi<\/span>\r\n<span class=\"token\">}<\/span>\r\n\r\n<span class=\"token\"># Claude Code\u304b\u3089\u306e\u5165\u529b\u3092\u8aad\u307f\u53d6\u308a<\/span>\r\n<span class=\"token assign-left\">input<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">cat<\/span><span class=\"token\">)<\/span>\r\n<span class=\"token assign-left\">command<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">echo<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$input<\/span><span class=\"token\">\"<\/span> <span class=\"token\">|<\/span><span class=\"token\"> jq -r <\/span><span class=\"token\">'.tool_input.command'<\/span> <span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null <\/span><span class=\"token\">||<\/span> <span class=\"token\">echo<\/span> <span class=\"token\">\"\"<\/span><span class=\"token\">)<\/span>\r\n<span class=\"token assign-left\">tool_name<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">echo<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$input<\/span><span class=\"token\">\"<\/span> <span class=\"token\">|<\/span><span class=\"token\"> jq -r <\/span><span class=\"token\">'.tool_name'<\/span> <span class=\"token file-descriptor\">2<\/span><span class=\"token\">&gt;<\/span><span class=\"token\">\/dev\/null <\/span><span class=\"token\">||<\/span> <span class=\"token\">echo<\/span> <span class=\"token\">\"\"<\/span><span class=\"token\">)<\/span>\r\n\r\n<span class=\"token\"># Bash\u4ee5\u5916\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30c1\u30a7\u30c3\u30af\u4e0d\u8981<\/span>\r\n<span class=\"token\">if<\/span> <span class=\"token\">[<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$tool_name<\/span><span class=\"token\">\"<\/span> <span class=\"token\">!=<\/span> <span class=\"token\">\"Bash\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n    <span class=\"token\">exit<\/span> <span class=\"token\">0<\/span>\r\n<span class=\"token\">fi<\/span>\r\n\r\n<span class=\"token\"># \u7a7a\u306e\u30b3\u30de\u30f3\u30c9\u3082\u30c1\u30a7\u30c3\u30af\u4e0d\u8981<\/span>\r\n<span class=\"token\">if<\/span> <span class=\"token\">[<\/span> -z <span class=\"token\">\"<\/span><span class=\"token\">$command<\/span><span class=\"token\">\"<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n    <span class=\"token\">exit<\/span> <span class=\"token\">0<\/span>\r\n<span class=\"token\">fi<\/span>\r\n\r\n<span class=\"token\"># AppArmor\u72b6\u614b\u3092\u30c1\u30a7\u30c3\u30af<\/span>\r\n<span class=\"token assign-left\">apparmor_status<\/span><span class=\"token\">=<\/span><span class=\"token\">$(<\/span><span class=\"token\">check_apparmor_status<\/span><span class=\"token\">)<\/span>\r\n<span class=\"token assign-left\">apparmor_return<\/span><span class=\"token\">=<\/span><span class=\"token\">$?<\/span>\r\n\r\n<span class=\"token\"># \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u30c1\u30a7\u30c3\u30af\u3092\u5b9f\u884c<\/span>\r\ncheck_config_update\r\n\r\n<span class=\"token\"># \ud83d\udea8 \u8d85\u5371\u967a\u30b3\u30de\u30f3\u30c9\u306e\u5b8c\u5168\u30d6\u30ed\u30c3\u30af\uff08\u7b2c2\u6bb5\u968e\u9632\u5fa1\uff09<\/span>\r\n<span class=\"token assign-left\">critical_patterns<\/span><span class=\"token\">=<\/span><span class=\"token\">(<\/span>\r\n    <span class=\"token\">\"rm -rf \/\"<\/span>           <span class=\"token\"># \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u3092\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\"<\/span>           <span class=\"token\"># \u30db\u30fc\u30e0\u30d5\u30a9\u30eb\u30c0\u5168\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Documents\"<\/span> <span class=\"token\"># \u66f8\u985e\u30d5\u30a9\u30eb\u30c0\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Pictures\"<\/span>  <span class=\"token\"># \u5199\u771f\u30d5\u30a9\u30eb\u30c0\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Desktop\"<\/span>   <span class=\"token\"># \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Downloads\"<\/span> <span class=\"token\"># \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Music\"<\/span>     <span class=\"token\"># \u97f3\u697d\u30d5\u30a9\u30eb\u30c0\u524a\u9664<\/span>\r\n    <span class=\"token\">\"rm -rf ~\/Videos\"<\/span>    <span class=\"token\"># \u52d5\u753b\u30d5\u30a9\u30eb\u30c0\u524a\u9664<\/span>\r\n    <span class=\"token\">\":(){ :|:&amp; };:\"<\/span>      <span class=\"token\"># \u30d5\u30a9\u30fc\u30af\u30dc\u30e0\uff08\u30b7\u30b9\u30c6\u30e0\u505c\u6b62\u653b\u6483\uff09<\/span>\r\n    <span class=\"token\">\"dd if=\/dev\/zero\"<\/span>    <span class=\"token\"># \u30c7\u30a3\u30b9\u30af\u7834\u58ca<\/span>\r\n    <span class=\"token\">\"dd if=\/dev\/random\"<\/span>  <span class=\"token\"># \u30c7\u30a3\u30b9\u30af\u7834\u58ca<\/span>\r\n    <span class=\"token\">\"mkfs.\"<\/span>              <span class=\"token\"># \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u7834\u58ca<\/span>\r\n    <span class=\"token\">\"fdisk\"<\/span>              <span class=\"token\"># \u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u64cd\u4f5c<\/span>\r\n<span class=\"token\">)<\/span>\r\n\r\n<span class=\"token\"># \u8d85\u5371\u967a\u30b3\u30de\u30f3\u30c9\u3092\u30c1\u30a7\u30c3\u30af<\/span>\r\n<span class=\"token\">for<\/span> <span class=\"token for-or-select\">pattern<\/span> <span class=\"token\">in<\/span> <span class=\"token\">\"<\/span><span class=\"token\">${critical_patterns<\/span><span class=\"token\">[<\/span><span class=\"token\">@<\/span><span class=\"token\">]<\/span><span class=\"token\">}<\/span><span class=\"token\">\"<\/span><span class=\"token\">;<\/span> <span class=\"token\">do<\/span>\r\n    <span class=\"token\">if<\/span> <span class=\"token\">[<\/span><span class=\"token\">[<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$command<\/span><span class=\"token\">\"<\/span> <span class=\"token\">==<\/span> *<span class=\"token\">\"<\/span><span class=\"token\">$pattern<\/span><span class=\"token\">\"<\/span>* <span class=\"token\">]<\/span><span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n        log_event <span class=\"token\">\"CRITICAL\"<\/span> <span class=\"token\">\"ULTRA DANGEROUS: File destruction command blocked by Layer 2\"<\/span> <span class=\"token\">\"<\/span><span class=\"token\">$command<\/span><span class=\"token\">\"<\/span>\r\n        \r\n        <span class=\"token\"># \u8d64\u8272\u3067\u8b66\u544a\u8868\u793a\uff082\u6bb5\u968e\u9632\u5fa1\u72b6\u614b\u3092\u8868\u793a\uff09<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83d\udea8\ud83d\udea8\ud83d\udea8 CRITICAL DANGER ALERT \ud83d\udea8\ud83d\udea8\ud83d\udea8           \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551                                                  \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \u26d4 EXTREMELY DANGEROUS COMMAND DETECTED \u26d4     \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551                                                  \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  This command could DESTROY your files!         \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551                                                  \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83d\udee1\ufe0f  BLOCKED BY DUAL-LAYER SECURITY SYSTEM     \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        \r\n        <span class=\"token\"># AppArmor\u72b6\u614b\u306b\u5fdc\u3058\u305f\u8868\u793a<\/span>\r\n        <span class=\"token\">if<\/span> <span class=\"token\">[<\/span> <span class=\"token\">$apparmor_return<\/span> -eq <span class=\"token\">0<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83c\udff0 Layer 1 (AppArmor): ACTIVE                  \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">elif<\/span> <span class=\"token\">[<\/span> <span class=\"token\">$apparmor_return<\/span> -eq <span class=\"token\">1<\/span> <span class=\"token\">]<\/span><span class=\"token\">;<\/span> <span class=\"token\">then<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83c\udff0 Layer 1 (AppArmor): MONITORING              \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">else<\/span>\r\n            <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83c\udff0 Layer 1 (AppArmor): NOT CONFIGURED          \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">fi<\/span>\r\n        \r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83c\udfe0 Layer 2 (Claude Guard): ACTIVE              \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551                                                  \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u2551  \ud83d\udc8e Your precious files are SAFE!               \u2551<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        <span class=\"token\">echo<\/span> -e <span class=\"token\">\"<\/span><span class=\"token\">${RED}<\/span><span class=\"token\">\ud83d\udccb Blocked command: <\/span><span class=\"token\">$command<\/span><span class=\"token\">${NC}<\/span><span class=\"token\">\"<\/span> <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n        \r\n        <span class=\"token\">exit<\/span> <span class=\"token\">2<\/span>  <span class=\"token\"># \u30a8\u30e9\u30fc\u30b3\u30fc\u30c92\u3067\u7d42\u4e86\uff08\u30d6\u30ed\u30c3\u30af\uff09<\/span>\r\n    <span class=\"token\">fi<\/span>\r\n<span class=\"token\">done<\/span>\r\n\r\n<span class=\"token\"># \u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0\u95a2\u6570<\/span>\r\n<span class=\"token function-name\">matches_pattern<\/span><span class=\"token\">(<\/span><span class=\"token\">)<\/span> <span class=\"token\">{<\/span>\r\n    <span class=\"token\">local<\/span> <span class=\"token assign-left\">cmd<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token\">$1<\/span><span class=\"token\">\"<\/span>\r\n    <span class=\"token\">local<\/span> <span class=\"token assign-left\">pattern<\/span><span class=\"token\">=<\/span><span class=\"token\">\"<\/span><span class=\"token\">$2<\/span><span class=\"token\">\"<\/span>\r\n    \r\n    <span class=\"token\"># \u524d\u5f8c\u306e\u7a7a\u767d\u3092\u524a\u9664<\/span>\r\n    <span class=\"token assign-left\">cmd<\/span><span class=\"token\">=<\/span><span class=\"token\">\"${cmd#\"<\/span><span class=\"token\">${cmd<\/span><span class=\"token\">%%<\/span><span class=\"token\">[<\/span><span class=\"token\">!<\/span><span class=\"token\">[<\/span><span class=\"token\">:<\/span><span class=\"token\">space<\/span><span class=\"token\">:<\/span><span class=\"token\">]<\/span><span class=\"token\">]<\/span><span class=\"token\">*}<\/span><span class=\"token\">\"}\"<\/span>\r\n    <span class=\"token assign-left\">cmd<\/span><span class=\"token\">=<\/span><span class=\"token\">\"${cmd%\"<\/span><span class=\"token\">${cmd<\/span><span class=\"token\">##<\/span><span class=\"token\">*<\/span><span class=\"token\">[<\/span><span class=\"token\">!<\/span><span class=\"token\">[<\/span><span class=\"token\">:<\/span><span class=\"token\">space<\/span><span class=\"token\">:<\/span><span class=\"token\">]<\/span><span class=\"token\">]<\/span><span class=\"token\">}<\/span>\"<span class=\"token\">}<\/span><span class=\"token\">\"\r\n<\/span>    \r\n    # \u30d1\u30bf\u30fc\u30f3\u3068\u6bd4\u8f03\r\n<span class=\"token\">    [[ \"<\/span><span class=\"token\">$cmd<\/span><span class=\"token\">\" == <\/span><span class=\"token\">$pattern<\/span><span class=\"token\"> ]]\r\n<\/span>}\r\n\r\n# \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30eb\u30fc\u30eb\u3092\u8aad\u307f\u8fbc\u307f\r\n<span class=\"token\">if [ -f \"<\/span><span class=\"token\">$SETTINGS_FILE<\/span><span class=\"token\">\" ]; then\r\n<\/span>    \r\n    # \u62d2\u5426\u30d1\u30bf\u30fc\u30f3\u3092\u30c1\u30a7\u30c3\u30af\r\n<span class=\"token\">    deny_patterns=<\/span><span class=\"token\">$(<\/span><span class=\"token\">jq -r '.permissions.deny<\/span><span class=\"token\">[<\/span><span class=\"token\">]<\/span><span class=\"token\">? <\/span><span class=\"token\">|<\/span><span class=\"token\"> select<\/span><span class=\"token\">(<\/span><span class=\"token\">startswith<\/span><span class=\"token\">(<\/span><span class=\"token\">\"Bash(\"<\/span><span class=\"token\">)<\/span><span class=\"token\">)<\/span><span class=\"token\"> | gsub(\"<\/span>^Bash<span class=\"token\">\\<\/span><span class=\"token\">\\<\/span><span class=\"token\">(<\/span><span class=\"token\">\"; \"<\/span>\"<span class=\"token\">)<\/span> <span class=\"token\">|<\/span> gsub<span class=\"token\">(<\/span><span class=\"token\">\"<\/span><span class=\"token\">\\\\<\/span><span class=\"token\">)$\"<\/span><span class=\"token\">;<\/span> <span class=\"token\">\"\"<\/span><span class=\"token\">)<\/span><span class=\"token\">' \"$SETTINGS_FILE\" 2&gt;\/dev\/null)\r\n<\/span>    \r\n    while IFS= read -r pattern; do\r\n        [ -z \"$pattern\" ] &amp;&amp; continue\r\n        \r\n        if matches_pattern \"$command\" \"$pattern\"; then\r\n            log_event \"DENY\" \"Security policy violation: $pattern\" \"$command\"\r\n            \r\n            # \u9ec4\u8272\u3067\u8b66\u544a\u8868\u793a\r\n            echo -e \"${YELLOW}\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502  \ud83d\udeab COMMAND BLOCKED BY SECURITY POLICY         \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502                                                 \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502  This command is not allowed for safety.       \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502                                                 \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502  \ud83d\udee1\ufe0f  Protected by Dual-Layer Security System   \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502  \ud83d\udc3b\u200d\u2744\ufe0f Your files are safe!                      \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\ud83d\udccb Blocked: $command${NC}\" &gt;&amp;2\r\n            \r\n            exit 2  # \u30a8\u30e9\u30fc\u30b3\u30fc\u30c92\u3067\u7d42\u4e86\uff08\u30d6\u30ed\u30c3\u30af\uff09\r\n        fi\r\n    done &lt;&lt;&lt;\"$deny_patterns\"\r\n    \r\n    # \u8b66\u544a\u30d1\u30bf\u30fc\u30f3\u3092\u30c1\u30a7\u30c3\u30af\uff08\u30d6\u30ed\u30c3\u30af\u306f\u3057\u306a\u3044\u304c\u6ce8\u610f\u559a\u8d77\uff09\r\n<span class=\"token\">    warn_patterns=$(jq -r '<\/span>.permissions.warn<span class=\"token\">[<\/span><span class=\"token\">]<\/span>? <span class=\"token\">|<\/span> select<span class=\"token\">(<\/span>startswith<span class=\"token\">(<\/span><span class=\"token\">\"Bash(\"<\/span><span class=\"token\">))<\/span> <span class=\"token\">|<\/span> gsub<span class=\"token\">(<\/span><span class=\"token\">\"^Bash<\/span><span class=\"token\">\\\\<\/span><span class=\"token\">(\"<\/span><span class=\"token\">;<\/span> <span class=\"token\">\"\"<\/span><span class=\"token\">)<\/span> <span class=\"token\">|<\/span> gsub<span class=\"token\">(<\/span><span class=\"token\">\"<\/span><span class=\"token\">\\\\<\/span><span class=\"token\">)$\"<\/span><span class=\"token\">;<\/span> <span class=\"token\">\"\"<\/span><span class=\"token\">)<\/span><span class=\"token\">' \"$SETTINGS_FILE\" 2&gt;\/dev\/null)\r\n<\/span>    \r\n    while IFS= read -r pattern; do\r\n        [ -z \"$pattern\" ] &amp;&amp; continue\r\n        \r\n        if matches_pattern \"$command\" \"$pattern\"; then\r\n            log_event \"WARN\" \"Potentially risky command detected: $pattern\" \"$command\"\r\n            \r\n            # \u9752\u8272\u3067\u6ce8\u610f\u8868\u793a\r\n            echo -e \"${YELLOW}\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502  \u26a0\ufe0f  POTENTIALLY RISKY COMMAND DETECTED        \u2502${NC}\" &gt;&amp;2\r\n            echo -e \"${YELLOW}\u2502                                                 \u2502${NC}\" &gt;&amp;2\r\n<span class=\"token\">            echo -e \"${YELLOW}\u2502  Command: $(printf '<\/span>%-35s' <span class=\"token\">\"<\/span><span class=\"token\">$command<\/span><span class=\"token\">\"<\/span> <span class=\"token\">|<\/span> <span class=\"token\">cut<\/span> -c1-35<span class=\"token\">)<\/span> \u2502<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">            echo -e \"<\/span><span class=\"token\">${YELLOW}<\/span>\u2502                                                 \u2502<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">            echo -e \"<\/span><span class=\"token\">${YELLOW}<\/span>\u2502  \u2705 Execution allowed with caution             \u2502<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">            echo -e \"<\/span><span class=\"token\">${YELLOW}<\/span>\u2502  \ud83d\udcdd This action has been logged                \u2502<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">            echo -e \"<\/span><span class=\"token\">${YELLOW}<\/span>\u2502  \ud83d\udee1\ufe0f  Monitored by Dual-Layer Security          \u2502<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">            echo -e \"<\/span><span class=\"token\">${YELLOW}<\/span>\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span>            \r\n            break  # \u8b66\u544a\u306f\u8868\u793a\u3059\u308b\u304c\u5b9f\u884c\u306f\u7d99\u7d9a\r\n        fi\r\n<span class=\"token\">    done &lt;&lt;&lt;\"<\/span><span class=\"token\">$warn_patterns<\/span><span class=\"token\">\"\r\n<\/span>fi\r\n\r\n# \u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u901a\u904e\u3057\u305f\u5834\u5408\r\n<span class=\"token\">log_event \"<\/span>ALLOW<span class=\"token\">\" \"<\/span>Security check passed - dual-layer protection active<span class=\"token\">\" \"<\/span><span class=\"token\">$command<\/span><span class=\"token\">\"\r\n<\/span>\r\n# AppArmor\u72b6\u614b\u306b\u5fdc\u3058\u305f\u8868\u793a\r\n<span class=\"token\">if [ <\/span><span class=\"token\">$apparmor_return<\/span><span class=\"token\"> -eq 0 ]; then\r\n<\/span><span class=\"token\">    echo -e \"<\/span><span class=\"token\">${GREEN}<\/span>\u2705 Dual-Layer Security: Command approved<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">    echo -e \"<\/span><span class=\"token\">${PURPLE}<\/span>\ud83c\udff0 AppArmor Layer: ENFORCING<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">elif [ <\/span><span class=\"token\">$apparmor_return<\/span><span class=\"token\"> -eq 1 ]; then\r\n<\/span><span class=\"token\">    echo -e \"<\/span><span class=\"token\">${GREEN}<\/span>\u2705 Dual-Layer Security: Command approved<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">    echo -e \"<\/span><span class=\"token\">${PURPLE}<\/span>\ud83c\udff0 AppArmor Layer: MONITORING<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span>else\r\n<span class=\"token\">    echo -e \"<\/span><span class=\"token\">${GREEN}<\/span>\u2705 Security check passed: Command is safe<span class=\"token\">${NC}<\/span><span class=\"token\">\" &gt;&amp;2\r\n<\/span><span class=\"token\">    echo -e \"<\/span><span class=\"token\">${BLUE}<\/span>\u2139\ufe0f  Single-Layer Protection <span class=\"token\">(<\/span>Claude Guard only<span class=\"token\">)<\/span><span class=\"token\">${NC}<\/span>\" <span class=\"token\">&gt;<\/span><span class=\"token file-descriptor\">&amp;2<\/span>\r\n<span class=\"token\">fi<\/span>\r\n\r\n<span class=\"token\">exit<\/span> <span class=\"token\">0<\/span>  <span class=\"token\"># \u30a8\u30e9\u30fc\u30b3\u30fc\u30c90\u3067\u7d42\u4e86\uff08\u8a31\u53ef\uff09<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u4fdd\u5b58\uff1a<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Ctrl + X<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Y<\/code> \u2192 <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Enter<\/code><\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 2-4: \u5b9f\u884c\u6a29\u9650\u3092\u4ed8\u4e0e<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\">chmod<\/span> +x ~\/.claude\/scripts\/dual-layer-security.sh\r\n\r\n<span class=\"token\"># \u78ba\u8a8d<\/span>\r\n<span class=\"token\">ls<\/span> -la ~\/.claude\/scripts\/dual-layer-security.sh<\/code><\/pre>\n<\/div>\n<\/div>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">STEP 3: 2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0\u306e\u52d5\u4f5c\u78ba\u8a8d\uff0810\u5206\uff09<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 3-1: Claude Code\u518d\u8d77\u52d5\u3068\u8a2d\u5b9a\u78ba\u8a8d<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u5168\u3066\u306eClaude Code\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7d42\u4e86<\/span>\r\n\/exit\r\n\r\n<span class=\"token\"># Claude Code\u3092\u518d\u8d77\u52d5<\/span>\r\nclaude\r\n\r\n<span class=\"token\"># hooks\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/span>\r\n\/hooks<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u8868\u793a\uff1a<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">2. PreToolUse<\/code> \u306b <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">dual-layer-security.sh<\/code> \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b<\/li>\n<\/ul>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 3-2: AppArmor\u52d5\u4f5c\u30c6\u30b9\u30c8<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># AppArmor\u72b6\u614b\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> aa-status <span class=\"token\">|<\/span> <span class=\"token\">grep<\/span> claude\r\n\r\n<span class=\"token\"># AppArmor\u30ed\u30b0\u78ba\u8a8d\uff08\u5225\u30bf\u30fc\u30df\u30ca\u30eb\u3067\uff09<\/span>\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">tail<\/span> -f \/var\/log\/kern.log <span class=\"token\">|<\/span> <span class=\"token\">grep<\/span> -i apparmor<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 3-3: \u5b89\u5168\u306a\u30b3\u30de\u30f3\u30c9\u306e\u30c6\u30b9\u30c8<\/h3>\n<p class=\"whitespace-normal break-words\">Claude Code\u5185\u3067\u5b9f\u884c\uff1a<\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u30c6\u30b9\u30c81: \u5b89\u5168\u306a\u30b3\u30de\u30f3\u30c9<\/span>\r\n<span class=\"token\">echo<\/span> <span class=\"token\">\"Hello, Dual-Layer Security!\"<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83c\udff0 AppArmor Protection: ACTIVE (enforce mode)\r\n\u2705 Dual-Layer Security: Command approved\r\n\ud83c\udff0 AppArmor Layer: ENFORCING\r\nHello, Dual-Layer Security!<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">STEP 3-4: \u5371\u967a\u30b3\u30de\u30f3\u30c9\u306e\u30d6\u30ed\u30c3\u30af\u30c6\u30b9\u30c8<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u30c6\u30b9\u30c82: \u8d85\u5371\u967a\u30b3\u30de\u30f3\u30c9<\/span>\r\n<span class=\"token\">rm<\/span> -rf ~\/Documents<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83c\udff0 AppArmor Protection: ACTIVE (enforce mode)\r\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\r\n\u2551  \ud83d\udea8\ud83d\udea8\ud83d\udea8 CRITICAL DANGER ALERT \ud83d\udea8\ud83d\udea8\ud83d\udea8           \u2551\r\n\u2551                                                  \u2551\r\n\u2551  \u26d4 EXTREMELY DANGEROUS COMMAND DETECTED \u26d4     \u2551\r\n\u2551                                                  \u2551\r\n\u2551  This command could DESTROY your files!         \u2551\r\n\u2551                                                  \u2551\r\n\u2551  \ud83d\udee1\ufe0f  BLOCKED BY DUAL-LAYER SECURITY SYSTEM     \u2551\r\n\u2551  \ud83c\udff0 Layer 1 (AppArmor): ACTIVE                  \u2551\r\n\u2551  \ud83c\udfe0 Layer 2 (Claude Guard): ACTIVE              \u2551\r\n\u2551                                                  \u2551\r\n\u2551  \ud83d\udc8e Your precious files are SAFE!               \u2551\r\n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\r\n\ud83d\udccb Blocked command: rm -rf ~\/Documents<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u3059\u3054\u3044\uff012\u3064\u306e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0\u304c\u540c\u6642\u306b\u50cd\u3044\u3066\u308b\uff01\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u305d\u3046\u3058\u3083\uff01\u3053\u308c\u304c<strong>\u771f\u306e2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0<\/strong>\u306e\u5a01\u529b\u306a\u306e\u3058\u3083\u3088\u301c\u300d<\/p>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udcca \u9632\u5fa1\u30ec\u30d9\u30eb\u306e\u78ba\u8a8d\u3068\u30ed\u30b0<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ed\u30b0\u306e\u78ba\u8a8d<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u7d71\u5408\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ed\u30b0<\/span>\r\n<span class=\"token\">cat<\/span> ~\/.claude\/logs\/security.log\r\n\r\n<span class=\"token\"># AppArmor\u30ed\u30b0\uff08\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\uff09<\/span>\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">grep<\/span> -i <span class=\"token\">\"apparmor.*claude\"<\/span> \/var\/log\/kern.log\r\n\r\n<span class=\"token\"># \u30d6\u30ed\u30c3\u30af\u3055\u308c\u305f\u30b3\u30de\u30f3\u30c9\u306e\u307f\u78ba\u8a8d<\/span>\r\n<span class=\"token\">grep<\/span> <span class=\"token\">\"CRITICAL\\|DENY\"<\/span> ~\/.claude\/logs\/security.log<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u30ed\u30b0\u4f8b\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>[2025-07-06 12:34:56] [APPARMOR] AppArmor enforce mode active - Command: aa-status\r\n[2025-07-06 12:35:10] [CRITICAL] ULTRA DANGEROUS: File destruction command blocked by Layer 2 - Command: rm -rf ~\/Documents\r\n[2025-07-06 12:35:15] [ALLOW] Security check passed - dual-layer protection active - Command: echo Hello<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\u9632\u5fa1\u72b6\u614b\u306e\u78ba\u8a8d<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u73fe\u5728\u306e\u9632\u5fa1\u30ec\u30d9\u30eb\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"token\">echo<\/span> <span class=\"token\">'{\"tool_name\":\"Bash\",\"tool_input\":{\"command\":\"echo test\"}}'<\/span> <span class=\"token\">|<\/span> ~\/.claude\/scripts\/dual-layer-security.sh<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\"><strong>\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\uff1a<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code>\ud83c\udff0 AppArmor Protection: ACTIVE (enforce mode)\r\n\u2705 Dual-Layer Security: Command approved\r\n\ud83c\udff0 AppArmor Layer: ENFORCING<\/code><\/pre>\n<\/div>\n<\/div>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udcf1 \u65e5\u5e38\u4f7f\u7528\u3067\u306e\u91cd\u8981\u306a\u6ce8\u610f\u70b9<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83d\udd04 \u30b9\u30ea\u30fc\u30d7\/\u30ec\u30b8\u30e5\u30fc\u30e0\u6642\u306e\u5bfe\u7b56<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>\u3042\u308b\u3042\u308b\u72b6\u6cc1\u3078\u306e\u5bfe\u5fdc\u306f\u5909\u308f\u3089\u305a\uff1a<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u306e\u81ea\u52d5\u691c\u77e5<\/li>\n<li class=\"whitespace-normal break-words\">\u9752\u8272\u306e\u518d\u8d77\u52d5\u63a8\u5968\u30e1\u30c3\u30bb\u30fc\u30b8<\/li>\n<li class=\"whitespace-normal break-words\">1\u65e51\u56de\u306e <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/hooks<\/code> \u78ba\u8a8d\u7fd2\u6163<\/li>\n<\/ul>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83d\udd04 \u30bb\u30c3\u30b7\u30e7\u30f3\u5fa9\u5e30\u65b9\u6cd5<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>\u4f5c\u696d\u7d99\u7d9a\u6027\u306e\u78ba\u4fdd\u3082\u540c\u69d8\uff1a<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">\u4f5c\u696d\u30e1\u30e2\u30d5\u30a1\u30a4\u30eb\u306e\u6d3b\u7528<\/li>\n<li class=\"whitespace-normal break-words\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u6d3b\u7528<\/li>\n<li class=\"whitespace-normal break-words\">\u4f5c\u696d\u72b6\u6cc1\u306e\u660e\u793a\u7684\u8a18\u9332<\/li>\n<\/ul>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83d\udd27 \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3068\u4e0a\u7d1a\u8005\u5411\u3051\u8a2d\u5b9a<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">AppArmor\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n<p class=\"whitespace-normal break-words\">\u304a\u4e3b\u306e\u74b0\u5883\u306b\u5fdc\u3058\u3066\u3001\u4ee5\u4e0b\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u308b\u306e\u3058\u3083\uff1a<\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6<\/span>\r\n<span class=\"token\">sudo<\/span> <span class=\"token\">nano<\/span> \/etc\/apparmor.d\/claude-code\r\n\r\n<span class=\"token\"># \u4f8b\uff1a\u65b0\u3057\u3044\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8ffd\u52a0<\/span>\r\nowner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/my-projects\/** rw,\r\n\r\n<span class=\"token\"># \u4f8b\uff1a\u7279\u5b9a\u306e\u30d5\u30a9\u30eb\u30c0\u4fdd\u8b77\u3092\u8ffd\u52a0<\/span>\r\ndeny owner @<span class=\"token\">{<\/span><span class=\"token environment\">HOME<\/span><span class=\"token\">}<\/span>\/important-data\/** d,\r\n\r\n<span class=\"token\"># \u5909\u66f4\u3092\u9069\u7528<\/span>\r\n<span class=\"token\">sudo<\/span> apparmor_parser -r \/etc\/apparmor.d\/claude-code<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Claude\u8a2d\u5b9a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u65b0\u3057\u3044\u30d6\u30ed\u30c3\u30af\u30d1\u30bf\u30fc\u30f3\u3092\u8ffd\u52a0<\/span>\r\n<span class=\"token\">nano<\/span> ~\/.claude\/settings.json\r\n\r\n<span class=\"token\"># deny \u30ea\u30b9\u30c8\u306b\u8ffd\u52a0\u4f8b\uff1a<\/span>\r\n<span class=\"token\">\"Bash(npm install -g *)\"<\/span>,\r\n<span class=\"token\">\"Bash(pip install --system *)\"<\/span>,<\/code><\/pre>\n<\/div>\n<\/div>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\u2753 \u3088\u304f\u3042\u308b\u8cea\u554f\u30fb\u30c8\u30e9\u30d6\u30eb\uff082\u6bb5\u968e\u9632\u5fa1\u7248\uff09<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Q: AppArmor\u304c\u52d5\u304b\u306a\u3044<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>A: \u4ee5\u4e0b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># 1. AppArmor\u30b5\u30fc\u30d3\u30b9\u72b6\u614b\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> systemctl status apparmor\r\n\r\n<span class=\"token\"># 2. \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u6587\u6cd5\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> apparmor_parser -r \/etc\/apparmor.d\/claude-code\r\n\r\n<span class=\"token\"># 3. Claude\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u78ba\u8a8d<\/span>\r\n<span class=\"token\">which<\/span> claude\r\n<span class=\"token\"># \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u30d1\u30b9\u3068\u4e00\u81f4\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Q: \u7b2c1\u6bb5\u968e\u3060\u3051\u3001\u307e\u305f\u306f\u7b2c2\u6bb5\u968e\u3060\u3051\u4f7f\u3044\u305f\u3044<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>A: \u6bb5\u968e\u7684\u306a\u5c0e\u5165\u304c\u53ef\u80fd\u3067\u3059<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u7b2c2\u6bb5\u968e\u306e\u307f\uff08\u521d\u5fc3\u8005\u5411\u3051\uff09<\/span>\r\n<span class=\"token\"># AppArmor\u8a2d\u5b9a\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3001Claude\u8a2d\u5b9a\u306e\u307f\u5b9f\u884c<\/span>\r\n\r\n<span class=\"token\"># \u7b2c1\u6bb5\u968e\u306e\u307f\uff08\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u5411\u3051\uff09  <\/span>\r\n<span class=\"token\"># Claude\u8a2d\u5b9a\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3001AppArmor\u306e\u307f\u8a2d\u5b9a<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Q: macOS\u3067AppArmor\u304c\u4f7f\u3048\u306a\u3044<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>A: \u7b2c2\u6bb5\u968e\u9632\u5fa1\u3067\u5341\u5206\u306a\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3067\u304d\u307e\u3059<\/strong><\/p>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># macOS\u3067\u306f\u4ee5\u4e0b\u3067\u78ba\u8a8d<\/span>\r\n<span class=\"token\">echo<\/span> <span class=\"token\">\"macOS detected - Single-layer protection active\"<\/span>\r\n\r\n<span class=\"token\"># \u7b2c2\u6bb5\u968e\u9632\u5fa1\u306e\u307f\u3067\u308290%\u4ee5\u4e0a\u306e\u5b89\u5168\u6027\u3092\u78ba\u4fdd<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Q: \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u306f\uff1f<\/h3>\n<p class=\"whitespace-normal break-words\"><strong>A: \u901a\u5e38\u306e\u958b\u767a\u4f5c\u696d\u3067\u306f\u5f71\u97ff\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">AppArmor\uff1a\u30d7\u30ed\u30bb\u30b9\u8d77\u52d5\u6642\u306e\u308f\u305a\u304b\u306a\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306e\u307f<\/li>\n<li class=\"whitespace-normal break-words\">Claude\u8a2d\u5b9a\uff1a\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u524d\u306e\u8efd\u91cf\u30c1\u30a7\u30c3\u30af\u306e\u307f<\/li>\n<li class=\"whitespace-normal break-words\">\u5b89\u5168\u306a\u30b3\u30de\u30f3\u30c9\u306f\u9ad8\u901f\u5b9f\u884c<\/li>\n<\/ul>\n<hr \/>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\ud83c\udf89 \u771f\u306e\u5b8c\u74a7\u7248\u5b8c\u6210\uff01\u4e16\u754c\u6700\u5f37\u306e\u5b89\u5168\u6027\u3092\u624b\u306b\u5165\u308c\u305f<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\u2705 \u9054\u6210\u3067\u304d\u305f\u3053\u3068<\/h3>\n<p class=\"whitespace-normal break-words\">\ud83c\udff0 <strong>\u7b2c1\u6bb5\u968e\uff1a\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u5b8c\u5168\u9632\u5fa1<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">OS \u30ec\u30d9\u30eb\u3067\u306e\u7269\u7406\u7684\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/li>\n<li class=\"whitespace-normal break-words\">\u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u306e\u52d5\u4f5c\u5236\u9650<\/li>\n<li class=\"whitespace-normal break-words\">\u8a2d\u5b9a\u8fc2\u56de\u653b\u6483\u3082\u7121\u52b9\u5316<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">\ud83c\udfe0 <strong>\u7b2c2\u6bb5\u968e\uff1a\u30a2\u30d7\u30ea\u30ec\u30d9\u30eb\u5b8c\u5168\u9632\u5fa1<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">rm -rf<\/code> \u7cfb\u30b3\u30de\u30f3\u30c9\u306e\u4e8b\u524d\u30d6\u30ed\u30c3\u30af<\/li>\n<li class=\"whitespace-normal break-words\">\u8996\u899a\u7684\u3067\u5206\u304b\u308a\u3084\u3059\u3044\u8b66\u544a\u30b7\u30b9\u30c6\u30e0<\/li>\n<li class=\"whitespace-normal break-words\">\u8a73\u7d30\u306a\u30ed\u30b0\u8a18\u9332\u3068\u72b6\u614b\u76e3\u8996<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">\ud83d\udd04 <strong>\u7d71\u5408\u30b7\u30b9\u30c6\u30e0\u306e\u5229\u70b9<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">\u591a\u5c64\u9632\u5fa1\u306b\u3088\u308b\u5b8c\u74a7\u306a\u5b89\u5168\u6027<\/li>\n<li class=\"whitespace-normal break-words\">\u3069\u3061\u3089\u304b\u4e00\u65b9\u304c\u7834\u3089\u308c\u3066\u3082\u5b89\u5168<\/li>\n<li class=\"whitespace-normal break-words\">\u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067\u5bfe\u5fdc<\/li>\n<li class=\"whitespace-normal break-words\">macOS\u3067\u3082\u5358\u5c64\u3067\u5341\u5206\u306a\u4fdd\u8b77<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">\ud83c\udf10 <strong>\u65e5\u5e38\u4f7f\u7528\u3078\u306e\u914d\u616e<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">\u30b9\u30ea\u30fc\u30d7\/\u30ec\u30b8\u30e5\u30fc\u30e0\u5bfe\u5fdc<\/li>\n<li class=\"whitespace-normal break-words\">\u30bb\u30c3\u30b7\u30e7\u30f3\u5fa9\u5e30\u65b9\u6cd5<\/li>\n<li class=\"whitespace-normal break-words\">\u8a2d\u5b9a\u5909\u66f4\u306e\u81ea\u52d5\u691c\u77e5<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">\ud83e\uddf8\u300c\u3053\u308c\u3067\u672c\u5f53\u306b\u5b8c\u74a7\u3067\u3059\u306d\uff01\u300d<\/p>\n<p class=\"whitespace-normal break-words\">\ud83d\udc3b\u200d\u2744\ufe0f\u300c\u305d\u3046\u3058\u3083\uff01\u304a\u4e3b\u306e\u5927\u5207\u306a\u30d5\u30a1\u30a4\u30eb\uff08\u5199\u771f\u3001\u66f8\u985e\u3001\u4f5c\u696d\u30c7\u30fc\u30bf\u306a\u3069\uff09\u306f\u3001\u3082\u306f\u3084<strong>\u8981\u585e\u7d1a\u306e\u5b88\u308a<\/strong>\u3067\u4fdd\u8b77\u3055\u308c\u3066\u3044\u308b\u306e\u3058\u3083\u3088\u3002<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\ud83c\udfaf \u6700\u7d42\u78ba\u8a8d\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n<div class=\"relative group\/copy rounded-lg\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex\">\n<div class=\"relative\"><\/div>\n<\/div>\n<\/div>\n<div class=\"text-text-500 text-xs p-3.5 pb-0\">bash<\/div>\n<div class=\"\">\n<pre class=\"code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed\"><code class=\"language-bash\"><span class=\"token\"># \u7b2c1\u6bb5\u968e\u78ba\u8a8d<\/span>\r\n<span class=\"token\">sudo<\/span> aa-status <span class=\"token\">|<\/span> <span class=\"token\">grep<\/span> claude\r\n\r\n<span class=\"token\"># \u7b2c2\u6bb5\u968e\u78ba\u8a8d  <\/span>\r\n<span class=\"token\">ls<\/span> -la ~\/.claude\/settings.json\r\n<span class=\"token\">ls<\/span> -la ~\/.claude\/scripts\/dual-layer-security.sh\r\n\r\n<span class=\"token\"># \u7d71\u5408\u52d5\u4f5c\u78ba\u8a8d<\/span>\r\n\/hooks\r\n\r\n<span class=\"token\"># \u5371\u967a\u30b3\u30de\u30f3\u30c9\u30c6\u30b9\u30c8<\/span>\r\n<span class=\"token\"># Claude\u5185\u3067: rm -rf ~\/test (\u5b58\u5728\u3057\u306a\u3044\u30d5\u30a9\u30eb\u30c0\u3067\u5b89\u5168\u30c6\u30b9\u30c8)<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"whitespace-normal break-words\">\u3059\u3079\u3066\u6b63\u5e38\u3067\u3042\u308c\u3070\u3001\u304a\u4e3b\u306f<strong>\u4e16\u754c\u6700\u5f37\u30af\u30e9\u30b9\u306e2\u6bb5\u968e\u9632\u5fa1\u30b7\u30b9\u30c6\u30e0<\/strong>\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3058\u3083\u3088\u301c\u2728<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\ud83d\udc8e \u3053\u306e\u771f\u306e\u5b8c\u74a7\u7248\u306b\u3088\u308a\u3001\u304a\u4e3b\u306f\u4ee5\u4e0b\u306e\u7a76\u6975\u306e\u5b89\u5fc3\u3092\u624b\u306b\u5165\u308c\u307e\u3057\u305f\uff1a<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>\u7269\u7406\u7684\u7d76\u5bfe\u5b89\u5168\u6027<\/strong>: 2\u6bb5\u968e\u306e\u9632\u5fa1\u3067\u3069\u3093\u306a\u653b\u6483\u3082\u7121\u52b9\u5316<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u4eba\u7684\u30a8\u30e9\u30fc\u5b8c\u5168\u9632\u6b62<\/strong>: \u4f55\u3092\u9593\u9055\u3048\u3066\u3082\u5927\u5207\u306a\u30d5\u30a1\u30a4\u30eb\u306f\u5b89\u5168<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u5b8c\u5168\u306a\u53ef\u8996\u5316<\/strong>: \u9632\u5fa1\u72b6\u614b\u3068\u52d5\u4f5c\u304c\u4e00\u76ee\u3067\u308f\u304b\u308b<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u7d99\u7d9a\u7684\u306a\u4fdd\u8b77<\/strong>: \u65e5\u5e38\u4f7f\u7528\u3067\u3082\u5b89\u5168\u6027\u304c\u7dad\u6301\u3055\u308c\u308b<\/li>\n<li class=\"whitespace-normal break-words\"><strong>\u30b9\u30ad\u30eb\u30ec\u30d9\u30eb\u5bfe\u5fdc<\/strong>: \u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\"><strong>\ud83d\udcda \u53c2\u8003\u60c5\u5831\uff1a<\/strong> \u3053\u306e\u8a18\u4e8b\u306f @har1101 \u3055\u3093\u306eQiita\u8a18\u4e8b\u300cClaude Code\u3067hooks\u304c\u8ffd\u52a0\u3055\u308c\u306a\u3044\u3053\u3068\u304c\u3042\u308b\u306e\u3068\u3001\u305d\u306e\u89e3\u6c7a\u7b56\u300d\u306e\u60c5\u5831\u3082\u53c2\u8003\u306b\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3057\u305f\u3002\u307e\u305f\u3001AppArmor\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u6587\u7cfb\u306e\u30da\u30a2\u30d7\u30ed\u30b0\u30e9\u30de\u30fc<\/strong>\u304b\u3089<strong>\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005<\/strong>\u307e\u3067\u3001\u3059\u3079\u3066\u306e\u304a\u4e3b\u304c\u6280\u8853\u7684\u306a\u4e0d\u5b89\u306a\u304fClaude Code\u3092\u4f7f\u3048\u308b\u306e\u3058\u3083\u3002\u4f55\u304b\u308f\u304b\u3089\u306a\u3044\u3053\u3068\u304c\u3042\u3063\u305f\u3089\u3001\u3044\u3064\u3067\u3082\u308f\u3057\u306b\u805e\u3044\u3066\u304f\u308c\u3058\u3083\uff01<\/p>\n<p class=\"whitespace-normal break-words\">\u304a\u4e3b\u306e\u5927\u5207\u306a\u30c7\u30fc\u30bf\u3092\u5b88\u308b\u3053\u3068\u304c\u3001\u308f\u3057\u306e\u4f7f\u547d\u306a\u306e\u3058\u3083\u301c\ud83d\udc3b\u200d\u2744\ufe0f\ud83d\udee1\ufe0f\ud83c\udff0<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7cfb\u3067\u3082\u308f\u304b\u308b rm -rf \u5bfe\u7b56 &#8211; \u5927\u5207\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u7d76\u5bfe\u306b\u5b88\u308b\u65b9\u6cd5 \ud83d\udcdc \u8a18\u4e8b\u6539\u8a02\u5c65\u6b74 v1.0 (2025-07-03) &#8211; \u521d\u7248\uff1a\u57fa\u672c\u7684\u306ahooks\u8a2d\u5b9a\u306b\u3088\u308b\u5b89\u5168\u5bfe\u7b56 v2.0 (2025- [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":15385,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-16402","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aiandotherworlds"],"acf":[],"_links":{"self":[{"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/posts\/16402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16402"}],"version-history":[{"count":7,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/posts\/16402\/revisions"}],"predecessor-version":[{"id":16496,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/posts\/16402\/revisions\/16496"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=\/wp\/v2\/media\/15385"}],"wp:attachment":[{"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jyakusyadansei.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}