# HG changeset patch # User kiyama # Date 1704602965 -32400 # Node ID 9da7bbb222979563ac2bf645929e0a03a47a58a2 # Parent cd781513b6b139c1a8251f099984d260dd7abefc udate diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/key-gen.png Binary file slide/figs/key-gen.png has changed diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/ldapadddel.png Binary file slide/figs/ldapadddel.png has changed diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/ldapsearch.png Binary file slide/figs/ldapsearch.png has changed diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/slashcommand-exp.png Binary file slide/figs/slashcommand-exp.png has changed diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/system.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/figs/system.svg Sun Jan 07 13:49:25 2024 +0900 @@ -0,0 +1,878 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r cd781513b6b1 -r 9da7bbb22297 slide/figs/vmaudit.png Binary file slide/figs/vmaudit.png has changed diff -r cd781513b6b1 -r 9da7bbb22297 slide/template.html --- a/slide/template.html Mon Jan 01 14:11:41 2024 +0900 +++ b/slide/template.html Sun Jan 07 13:49:25 2024 +0900 @@ -1,4 +1,4 @@ -
+ /* content:""; */display:table}div#\:\$p>svg>foreignObject>section:after{clear:both}div#\:\$p>svg>foreignObject>section>:first-child{margin-top:0!important}div#\:\$p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#\:\$p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#\:\$p>svg>foreignObject>section .absent{color:var(--color-danger-fg)}div#\:\$p>svg>foreignObject>section .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}div#\:\$p>svg>foreignObject>section .anchor:focus{outline:none}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre),div#\:\$p>svg>foreignObject>section blockquote,div#\:\$p>svg>foreignObject>section details,div#\:\$p>svg>foreignObject>section dl,div#\:\$p>svg>foreignObject>section ol,div#\:\$p>svg>foreignObject>section p,div#\:\$p>svg>foreignObject>section table,div#\:\$p>svg>foreignObject>section ul{margin-bottom:16px;margin-top:0}div#\:\$p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#\:\$p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1) .octicon-link,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2) .octicon-link,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3) .octicon-link,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4) .octicon-link,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5) .octicon-link,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6) .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor{text-decoration:none}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor .octicon-link,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor .octicon-link,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor .octicon-link,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor .octicon-link,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor .octicon-link,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor .octicon-link{visibility:visible}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1) code,div#\:\$p>svg>foreignObject>section :is(h1,marp-h1) tt,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2) code,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2) tt,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3) code,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3) tt,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4) code,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4) tt,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5) code,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5) tt,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6) code,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6) tt{font-size:inherit;padding:0 .2em}div#\:\$p>svg>foreignObject>section summary :is(h1,marp-h1),div#\:\$p>svg>foreignObject>section summary :is(h2,marp-h2),div#\:\$p>svg>foreignObject>section summary :is(h3,marp-h3),div#\:\$p>svg>foreignObject>section summary :is(h4,marp-h4),div#\:\$p>svg>foreignObject>section summary :is(h5,marp-h5),div#\:\$p>svg>foreignObject>section summary :is(h6,marp-h6){display:inline-block}div#\:\$p>svg>foreignObject>section summary :is(h1,marp-h1) .anchor,div#\:\$p>svg>foreignObject>section summary :is(h2,marp-h2) .anchor,div#\:\$p>svg>foreignObject>section summary :is(h3,marp-h3) .anchor,div#\:\$p>svg>foreignObject>section summary :is(h4,marp-h4) .anchor,div#\:\$p>svg>foreignObject>section summary :is(h5,marp-h5) .anchor,div#\:\$p>svg>foreignObject>section summary :is(h6,marp-h6) .anchor{margin-left:-40px}div#\:\$p>svg>foreignObject>section summary :is(h1,marp-h1),div#\:\$p>svg>foreignObject>section summary :is(h2,marp-h2){border-bottom:0;padding-bottom:0}div#\:\$p>svg>foreignObject>section ol.no-list,div#\:\$p>svg>foreignObject>section ul.no-list{list-style-type:none;padding:0}div#\:\$p>svg>foreignObject>section ol[type="a s"]{list-style-type:lower-alpha}div#\:\$p>svg>foreignObject>section ol[type="A s"]{list-style-type:upper-alpha}div#\:\$p>svg>foreignObject>section ol[type="i s"]{list-style-type:lower-roman}div#\:\$p>svg>foreignObject>section ol[type="I s"]{list-style-type:upper-roman}div#\:\$p>svg>foreignObject>section div>ol:not([type]),div#\:\$p>svg>foreignObject>section ol[type="1"]{list-style-type:decimal}div#\:\$p>svg>foreignObject>section ol ol,div#\:\$p>svg>foreignObject>section ol ul,div#\:\$p>svg>foreignObject>section ul ol,div#\:\$p>svg>foreignObject>section ul ul{margin-bottom:0;margin-top:0}div#\:\$p>svg>foreignObject>section li>p{margin-top:16px}div#\:\$p>svg>foreignObject>section li+li{margin-top:.25em}div#\:\$p>svg>foreignObject>section dl{padding:0}div#\:\$p>svg>foreignObject>section dl dt{font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold,600);margin-top:16px;padding:0}div#\:\$p>svg>foreignObject>section dl dd{margin-bottom:16px;padding:0 16px}div#\:\$p>svg>foreignObject>section table th{font-weight:var(--base-text-weight-semibold,600)}div#\:\$p>svg>foreignObject>section table td,div#\:\$p>svg>foreignObject>section table th{border:1px solid var(--color-border-default);padding:6px 13px}div#\:\$p>svg>foreignObject>section table td>:last-child{margin-bottom:0}div#\:\$p>svg>foreignObject>section table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}div#\:\$p>svg>foreignObject>section table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}div#\:\$p>svg>foreignObject>section table img{background-color:transparent}div#\:\$p>svg>foreignObject>section img[align=right]{padding-left:20px}div#\:\$p>svg>foreignObject>section img[align=left]{padding-right:20px}div#\:\$p>svg>foreignObject>section .emoji{background-color:transparent;max-width:none;vertical-align:text-top}div#\:\$p>svg>foreignObject>section :is(span,marp-span).frame,div#\:\$p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){display:block;overflow:hidden}div#\:\$p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){border:1px solid var(--color-border-default);float:left;margin:13px 0 0;padding:7px;width:auto}div#\:\$p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) img{display:block;float:left}div#\:\$p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) :is(span,marp-span){clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-center{clear:both;display:block;overflow:hidden}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-center>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:center}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-center :is(span,marp-span) img{margin:0 auto;text-align:center}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-right{clear:both;display:block;overflow:hidden}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-right>:is(span,marp-span){display:block;margin:13px 0 0;overflow:hidden;text-align:right}div#\:\$p>svg>foreignObject>section :is(span,marp-span).align-right :is(span,marp-span) img{margin:0;text-align:right}div#\:\$p>svg>foreignObject>section :is(span,marp-span).float-left{display:block;float:left;margin-right:13px;overflow:hidden}div#\:\$p>svg>foreignObject>section :is(span,marp-span).float-left :is(span,marp-span){margin:13px 0 0}div#\:\$p>svg>foreignObject>section :is(span,marp-span).float-right{display:block;float:right;margin-left:13px;overflow:hidden}div#\:\$p>svg>foreignObject>section :is(span,marp-span).float-right>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:right}div#\:\$p>svg>foreignObject>section code,div#\:\$p>svg>foreignObject>section tt{background-color:var(--color-neutral-muted);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em;white-space:break-spaces}div#\:\$p>svg>foreignObject>section code br,div#\:\$p>svg>foreignObject>section tt br{display:none}div#\:\$p>svg>foreignObject>section del code{text-decoration:inherit}div#\:\$p>svg>foreignObject>section samp{font-size:85%}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) code{font-size:100%}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre)>code{background:transparent;border:0;margin:0;padding:0;white-space:pre;word-break:normal}div#\:\$p>svg>foreignObject>section .highlight{margin-bottom:16px}div#\:\$p>svg>foreignObject>section .highlight :is(pre,marp-pre){margin-bottom:0;word-break:normal}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre){background-color:var(--color-canvas-subtle);border-radius:6px;color:var(--color-fg-default);font-size:85%;line-height:1.45;overflow:auto;padding:16px}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) code,div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) tt{word-wrap:normal;background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}div#\:\$p>svg>foreignObject>section .csv-data td,div#\:\$p>svg>foreignObject>section .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}div#\:\$p>svg>foreignObject>section .csv-data .blob-num{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}div#\:\$p>svg>foreignObject>section .csv-data tr{border-top:0}div#\:\$p>svg>foreignObject>section .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:var(--base-text-weight-semibold,600)}div#\:\$p>svg>foreignObject>section [data-footnote-ref]:before{content:"["}div#\:\$p>svg>foreignObject>section [data-footnote-ref]:after{content:"]"}div#\:\$p>svg>foreignObject>section .footnotes{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}div#\:\$p>svg>foreignObject>section div#\:\$p>svg>foreignObject>section section.footnotes{--marpit-root-font-size:12px}div#\:\$p>svg>foreignObject>section .footnotes ol{padding-left:16px}div#\:\$p>svg>foreignObject>section .footnotes ol ul{display:inline-block;margin-top:16px;padding-left:16px}div#\:\$p>svg>foreignObject>section .footnotes li{position:relative}div#\:\$p>svg>foreignObject>section .footnotes li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}div#\:\$p>svg>foreignObject>section .footnotes li:target{color:var(--color-fg-default)}div#\:\$p>svg>foreignObject>section .footnotes .data-footnote-backref g-emoji{font-family:monospace}div#\:\$p>svg>foreignObject>section .pl-c{color:var(--color-prettylights-syntax-comment)}div#\:\$p>svg>foreignObject>section .pl-c1,div#\:\$p>svg>foreignObject>section .pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}div#\:\$p>svg>foreignObject>section .pl-e,div#\:\$p>svg>foreignObject>section .pl-en{color:var(--color-prettylights-syntax-entity)}div#\:\$p>svg>foreignObject>section .pl-s .pl-s1,div#\:\$p>svg>foreignObject>section .pl-smi{color:var(--color-prettylights-syntax-storage-modifier-import)}div#\:\$p>svg>foreignObject>section .pl-ent{color:var(--color-prettylights-syntax-entity-tag)}div#\:\$p>svg>foreignObject>section .pl-k{color:var(--color-prettylights-syntax-keyword)}div#\:\$p>svg>foreignObject>section .pl-pds,div#\:\$p>svg>foreignObject>section .pl-s,div#\:\$p>svg>foreignObject>section .pl-s .pl-pse .pl-s1,div#\:\$p>svg>foreignObject>section .pl-sr,div#\:\$p>svg>foreignObject>section .pl-sr .pl-cce,div#\:\$p>svg>foreignObject>section .pl-sr .pl-sra,div#\:\$p>svg>foreignObject>section .pl-sr .pl-sre{color:var(--color-prettylights-syntax-string)}div#\:\$p>svg>foreignObject>section .pl-smw,div#\:\$p>svg>foreignObject>section .pl-v{color:var(--color-prettylights-syntax-variable)}div#\:\$p>svg>foreignObject>section .pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}div#\:\$p>svg>foreignObject>section .pl-ii{background-color:var(--color-prettylights-syntax-invalid-illegal-bg);color:var(--color-prettylights-syntax-invalid-illegal-text)}div#\:\$p>svg>foreignObject>section .pl-c2{background-color:var(--color-prettylights-syntax-carriage-return-bg);color:var(--color-prettylights-syntax-carriage-return-text)}div#\:\$p>svg>foreignObject>section .pl-sr .pl-cce{color:var(--color-prettylights-syntax-string-regexp);font-weight:700}div#\:\$p>svg>foreignObject>section .pl-ml{color:var(--color-prettylights-syntax-markup-list)}div#\:\$p>svg>foreignObject>section .pl-mh,div#\:\$p>svg>foreignObject>section .pl-mh .pl-en,div#\:\$p>svg>foreignObject>section .pl-ms{color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#\:\$p>svg>foreignObject>section .pl-mi{color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#\:\$p>svg>foreignObject>section .pl-mb{color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#\:\$p>svg>foreignObject>section .pl-md{background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#\:\$p>svg>foreignObject>section .pl-mi1{background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#\:\$p>svg>foreignObject>section .pl-mc{background-color:var(--color-prettylights-syntax-markup-changed-bg);color:var(--color-prettylights-syntax-markup-changed-text)}div#\:\$p>svg>foreignObject>section .pl-mi2{background-color:var(--color-prettylights-syntax-markup-ignored-bg);color:var(--color-prettylights-syntax-markup-ignored-text)}div#\:\$p>svg>foreignObject>section .pl-mdr{color:var(--color-prettylights-syntax-meta-diff-range);font-weight:700}div#\:\$p>svg>foreignObject>section .pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}div#\:\$p>svg>foreignObject>section .pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}div#\:\$p>svg>foreignObject>section .pl-corl{color:var(--color-prettylights-syntax-constant-other-reference-link);text-decoration:underline}div#\:\$p>svg>foreignObject>section g-emoji{display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:var(--base-text-weight-normal,400);line-height:1;min-width:1ch;vertical-align:-.075em}div#\:\$p>svg>foreignObject>section g-emoji img{height:1em;width:1em}div#\:\$p>svg>foreignObject>section .task-list-item{list-style-type:none}div#\:\$p>svg>foreignObject>section .task-list-item label{font-weight:var(--base-text-weight-normal,400)}div#\:\$p>svg>foreignObject>section .task-list-item.enabled label{cursor:pointer}div#\:\$p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:4px}div#\:\$p>svg>foreignObject>section .task-list-item .handle{display:none}div#\:\$p>svg>foreignObject>section .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}div#\:\$p>svg>foreignObject>section .contains-task-list:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}div#\:\$p>svg>foreignObject>section .contains-task-list{position:relative}div#\:\$p>svg>foreignObject>section .contains-task-list:focus-within .task-list-item-convert-container,div#\:\$p>svg>foreignObject>section .contains-task-list:hover .task-list-item-convert-container{clip:auto;display:block;height:24px;overflow:visible;width:auto}div#\:\$p>svg>foreignObject>section ::-webkit-calendar-picker-indicator{filter:invert(50%)}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1){color:var(--h1-color);font-size:1.6em}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1),div#\:\$p>svg>foreignObject>section :is(h2,marp-h2){border-bottom:none}div#\:\$p>svg>foreignObject>section :is(h2,marp-h2){font-size:1.3em}div#\:\$p>svg>foreignObject>section :is(h3,marp-h3){font-size:1.1em}div#\:\$p>svg>foreignObject>section :is(h4,marp-h4){font-size:1.05em}div#\:\$p>svg>foreignObject>section :is(h5,marp-h5){font-size:1em}div#\:\$p>svg>foreignObject>section :is(h6,marp-h6){font-size:.9em}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1) strong,div#\:\$p>svg>foreignObject>section :is(h2,marp-h2) strong,div#\:\$p>svg>foreignObject>section :is(h3,marp-h3) strong,div#\:\$p>svg>foreignObject>section :is(h4,marp-h4) strong,div#\:\$p>svg>foreignObject>section :is(h5,marp-h5) strong,div#\:\$p>svg>foreignObject>section :is(h6,marp-h6) strong{color:var(--heading-strong-color);font-weight:inherit}div#\:\$p>svg>foreignObject>section :is(h1,marp-h1)::part(auto-scaling),div#\:\$p>svg>foreignObject>section :is(h2,marp-h2)::part(auto-scaling),div#\:\$p>svg>foreignObject>section :is(h3,marp-h3)::part(auto-scaling),div#\:\$p>svg>foreignObject>section :is(h4,marp-h4)::part(auto-scaling),div#\:\$p>svg>foreignObject>section :is(h5,marp-h5)::part(auto-scaling),div#\:\$p>svg>foreignObject>section :is(h6,marp-h6)::part(auto-scaling){max-height:563px}div#\:\$p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre){border:1px solid var(--color-border-default);line-height:1.15;overflow:visible}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre)::part(auto-scaling){max-height:529px}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs){color:var(--color-prettylights-syntax-storage-modifier-import)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-doctag),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-keyword),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-keyword),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-tag),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-variable),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-type),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable.language_){color:var(--color-prettylights-syntax-keyword)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_.inherited__),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.function_){color:var(--color-prettylights-syntax-entity)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attr),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attribute),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-literal),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-number),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-operator),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-attr),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-class),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-id),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable){color:var(--color-prettylights-syntax-constant)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-string),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-regexp),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-string){color:var(--color-prettylights-syntax-string)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-built_in),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-symbol){color:var(--color-prettylights-syntax-variable)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-code),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-comment),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-formula){color:var(--color-prettylights-syntax-comment)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-name),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-quote),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-pseudo),div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-tag){color:var(--color-prettylights-syntax-entity-tag)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-subst){color:var(--color-prettylights-syntax-storage-modifier-import)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-section){color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-bullet){color:var(--color-prettylights-syntax-markup-list)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-emphasis){color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-strong){color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-addition){background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#\:\$p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-deletion){background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#\:\$p>svg>foreignObject>section footer,div#\:\$p>svg>foreignObject>section header{color:var(--header-footer-color);font-size:18px;left:30px;margin:0;position:absolute}div#\:\$p>svg>foreignObject>section header{top:21px}div#\:\$p>svg>foreignObject>section footer{bottom:21px}div#\:\$p>svg>foreignObject>section{--h1-color:#246;--header-footer-color:hsla(0,0%,40%,.75);--heading-strong-color:#48c;--paginate-color:#777;align-items:stretch;display:flex;flex-flow:column nowrap;font-size:29px;height:720px;justify-content:center;padding:78.5px;width:1280px}div#\:\$p>svg>foreignObject>section{--marpit-root-font-size:29px}div#\:\$p>svg>foreignObject>section:where(.invert){--h1-color:#cee7ff;--header-footer-color:hsla(0,0%,60%,.75);--heading-strong-color:#7bf;--paginate-color:#999}div#\:\$p>svg>foreignObject>section>:last-child,div#\:\$p>svg>foreignObject>section[data-footer]>:nth-last-child(2){margin-bottom:0}div#\:\$p>svg>foreignObject>section>:first-child,div#\:\$p>svg>foreignObject>section>header:first-child+*{margin-top:0}div#\:\$p>svg>foreignObject>section:after{bottom:21px;color:var(--paginate-color);font-size:24px;padding:0;position:absolute;right:30px}div#\:\$p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#\:\$p>svg>foreignObject>section[data-color] :is(h1,marp-h1),div#\:\$p>svg>foreignObject>section[data-color] :is(h2,marp-h2),div#\:\$p>svg>foreignObject>section[data-color] :is(h3,marp-h3),div#\:\$p>svg>foreignObject>section[data-color] :is(h4,marp-h4),div#\:\$p>svg>foreignObject>section[data-color] :is(h5,marp-h5),div#\:\$p>svg>foreignObject>section[data-color] :is(h6,marp-h6){color:currentcolor}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

システム管理を体験させる学生実験に関する考察

琉球大学 理工学研究科 知能情報プログラム
河野研究室

木山 瑞基

-
-

研究・学習レベルを上げたい

+
+

知能情報コースの卒業生に期待される能力

    -
  • 学生がシステムを管理することで実践的なシステム構築を習得できる
  • -
  • また、自身の研究や学習に関連するシステムを構築することで専門性が深化していく
  • -
  • これを学科規模のシステムで取り組むことで他の学生の教育につながる
  • -
  • このようなサイクルを通して学科としての学習・研究レベルを上げていきたい
  • +
  • 技術力
  • +
  • コミュニケーション能力
  • +
  • 問題解決能力
  • +
  • 技術者としての倫理観
-
+
+

学士修士の研究者としてのシステム管理の知識

+
    +
  • 旧システムの問題点を解消したシステムの構築
  • +
  • 要求に対応するシステム運用
  • +
  • 適切な環境やハイスペックマシンを使用する為の構築
  • +
+
+
+

システム管理活動を通してこれらの能力を身につける

+
    +
  • +

    3年生を対象とした演習科目の中でシステム管理を体験させた

    +
  • +
  • +

    チャットツールを用いたシステム管理

    +
  • +
+
+

情報工学生が利用するシステム

    @@ -35,26 +54,32 @@
  • 学生・教員の約300名に対して演習、研究活動を行う為のシステムを提供している
-
  • 学生が中心となって管理している
  • +
  • 学生が中心となって管理している +
      +
    • 指導教員、技術職員、学生の6名
    • +
    +
  • 2022年より講義にシステム管理活動が追加された
  • -
    -

    システム管理チームの問題点

    +
    +

    システム構成(ハードウェア)

    +
      +
    • 2Uサーバー6台導入している
        -
      • チームに所属して長期的に活動を行う学生は2~3名ほどに留まっている
      • -
      • システム管理に興味を持つ学生が少なく、そもそも存在を知らない学生もいる
      • +
      • 4台はGPUを搭載した基幹サーバー
      • +
      • 2台はディスクサーバー
      • +
      +
    • +
    • さくらのクラウドサーバー +
        +
      • 冗長構成用のサーバー
      • +
      +
    -
    -

    取り組み

    -
      -
    • 演習科目を通して学生にシステム管理活動を行なった
    • -
    • チャットツールを用いたシステム管理の提案
    • -
    -
    -
    -

    知能情報コースの教育用計算機システム

    +
    +

    システム上で動作しているサービス

    • 学生の演習や研究活動に必要なリソースを提供している @@ -69,37 +94,62 @@
    • 授業連絡等で使用されるMattermost
    - -
    -
    -

    学生主体のシステム管理

    -
      -
    • スタッフと学生の混成メンバー(6人) +
    • ファイルシステム
        -
      • 指導教員2名、技術職員1名、学生3名
      • -
      -
    • -
    • 2022年度から3年生の学生実験(前後期)としても実施 -
        -
      • 毎期約10名の学生が参加している
      • +
      • ceph
    -
    -

    シス管の変遷

    +
    +

    サービスの利用例

      -
    • システム管理活動は1997年から行われている
    • -
    • コロナ前は教室でオフラインミーティングをしていた
    • -
    • 毎年入れ替わる学生の直接的なノウハウの引き継ぎがあまりない
    • -
    • ノウハウは2019年まではRedmineでそれ以降はgitlab+scrapbox
    • -
    • 5年に一度システムを更新しており学生が設計から行っている
    • -
    • 必要に応じてシステムを調べて作業していく
    • -
    • シス管自体は授業単位でも雇用でもない為常に学生は少ない
    • +
    • 授業・学外演習でのアプリケーション構築でのKVM貸し出し
    • +
    • イベント時に専用の無線LANの作成
    • +
    • イベントの告知に学科webにアナウンス
    -
    -

    システム管理活動

    +
    +

    過去(2009年)のシステム管理の取り組み

    +
      +
    • +

      情報工学系学科における教育用計算機システムの自主構築に関する取組み

      +
        +
      • 先行研究ではシステムリプレースを学生が中心となって構築した
      • +
      • 当時15名程の学生が参加していた
      • +
      +
    • +
    • +

      学科システムの更新の実践的教育への活用

      +
        +
      • 旧システムの問題点の検証
      • +
      • それらを改善したシステムの設計・構築
      • +
      +
    • +
    • +

      アンケートを用いた有効性の提示

      +
        +
      • 利用者に向けて新システムが有効的かのアンケート
      • +
      • 管理者である学生へ技術習得度、システム構築に関する工夫
      • +
      +
    • +
    +
    +
    +

    2009年以降のシステム管理チーム

    +
      +
    • 旧システムの問題点を改善したシステムアップデートは続いている +
        +
      • 直近では2020年に行われた
      • +
      +
    • +
    • 2012年よりシステム管理チームができ、2022年には演習科目のテーマに追加された
    • +
    • 演習環境の貸し出しなどはKVM、Podman、singularityになっている
    • +
    • 物理サーバーにGPUを搭載した
    • +
    +
    +
    +

    システムアップデート時の活動内容

    • 設計 @@ -108,106 +158,143 @@
    • 学内ネットワーク 有線・無線 UTM
    • ストレージサーバー Ceph
    • クラウドサーバー Sakura
    • -
    • 5年に一度のシステムアップデート
    • -
    - - -
    -
    -

    システム管理活動

    - -
      -
    • 構築 -
        -
      • Ubuntuホスティングサーバー×6
      • -
      • KVM,Podman,singlarity
      • -
      • PowerDNS,Akatsuki
      • -
      • webサーバー
      • -
      • gitlab
      • -
      • mattermost
    -
    -

    システム管理活動

    +
    +

    2020年度に構築された現在のサービス

      -
    • 運用 +
    • Ubuntuホスティングサーバー×6
    • +
    • KVM,Podman,singlarity
    • +
    • PowerDNS
    • +
    • Akatsuki(IP,ドメイン管理サービス)
    • +
    • webサーバー
    • +
    • gitlab
    • +
    • mattermost
    • +
    +
    +
    +

    システム管理活動

    +
      -
    • 週に一回のミーティング
    • -
    • 利用者からの問い合わせに対応
    • +
    • 週に一回のミーティング +
        +
      • zoomで遠隔で行っている
      • +
      • 作業ログやドキュメントはscrapboxを使用している
      • +
      +
    • +
    • 利用者からの問い合わせに対応 +
        +
      • 学生の学外公開サーバーの監査
      • +
      +
    • 障害発生時の修正
    • システムのバージョンアップデート
    • -
    • 学生の学外公開サーバーの監査
    • Hands onの開催
    • -
    • ドキュメントにまとめる
    • -
    - +
  • 新入生向けのインストール大会
  • -
    -

    演習科目

    +
    +

    システム管理チームの問題点

    +
      +
    • チームに所属して長期的に活動を行う学生は2~3名ほどに留まっている
    • +
    • システム管理に興味を持つ学生が少なく、そもそも存在を知らない学生もいる
    • +
    +
    +
    +

    演習科目へのシステム管理活動の追加

    • 知能情報分野の専門的な知識を習得することを目的としており、前期・後期それぞれで開講されている
    • システム管理の他にも毎年5~6個ほどのテーマが存在しており学生はこの中から選択する
    • 一学年定員60名なので1テーマあたり10名ほどの受講生がいる
    • +
    • テーマの一つにシステム管理活動を追加した
    -
    +

    演習実験でのシステム管理チームの取り組み

    • +

      週に一回二コマ

      +
        +
      • 主にzoomを用いて遠隔で授業を行っている
      • +
      +
    • +
    • サーバー室の見学

    • 学科システムの紹介

    • -

      オープンキャンパスの資料作成・発表(前期のみ)

      -
    • -
    • サーバー班、web班、セキュリティ班にグループ分け

      • サービスの不具合の修正やシステムのアップデート
      • +
      • 指導教員やシステム管理メンバーが一人付き生徒に教えている
      • +
      • 生徒一人が画面共有して教員やメンバーが指示を出したり意見を出したりしている
      • +
      +
    • +
    • +

      オープンキャンパスの資料作成・発表(前期のみ)

      + +
    • +
    +
    +
    +

    サーバー班

    +
      +
    • システムのバックアップの修正 +
        +
      • 基幹サーバー上のrsnapshotのログ確認・修正
      • +
      +
    • +
    • 貸し出しVMのテンプレートの修正 +
        +
      • 四つのサーバーで異なっていたテンプレートを共通化
    -
    -

    サーバー班

    -
      -
    • システムのバックアップの修正
    • -
    • 貸し出しVMのテンプレートの修正
    • -
    -
    -
    +

    web班

      -
    • 学科システムのHugo化
    • +
    • +

      ローカルPC上でHugoの構築,VMを使用してLAMP環境の構築

      +
    • +
    • +

      学科システムのHugo化

      +
        +
      • 以前はWordPressを使用していたがセキュリティの問題から静的ページ変更
      • +
      • 静的ページの管理のしづらさや共通部分が多い
      • +
      +
    -
    +

    セキュリティ班

    +
      -
    • Vulsの構築
    • +
    • Vulsの構築 +
        +
      • podmanでの構築
      • +
      • singlarityでの構築
      • +
      +
    -
    -

    問題点

    -
      -
    • 利用者である学生が主体的にシステム管理活動に参加する事に意味がある +
      +

      演習実験での問題点

        -
      • システム構築・運用の能力が身に付く
      • -
      • 利用者が実現したいシステムの構築が可能
      • -
      - -
    • しかし継続してシステム管理活動に参加する学生が少ない
    • +
    • 継続してシステム管理活動に参加する学生が少ない
    • システムが大規模かつ複雑で理解しくい
    • CLIでの操作に慣れていない学生が多い事から管理者権限が付与できなかった
    • +
    • 手を動かす学生が固定化されていた
    • -
      +

      チャットシステムを利用したシステム管理

      • mattermostのスラッシュコマンドを利用しシステムを管理する
      • @@ -216,10 +303,15 @@
      • 管理者権限を必要とする操作は制限するように設定した
      -
      +

      提案システムの実行例

      +
        +
      • ユーザーが実行したコマンドの結果のみ表示される
      • +
      • 実行ユーザーと実行コマンドを含めた結果を表示
        +
      • +
      -
      +

      システムの構成図

      • 基幹システム上にHTTPサーバーコンテナを構築した
      • @@ -227,112 +319,181 @@

      -
      -

      実装したコマンド

      +
      +

      認証の実装

        -
      • VMの監査
      • -
      • LDAPの編集
      • -
      • +
      • 学科のシステムはLDAP経由でアカウントを管理している
      • +
      • サーバー上の管理者権限もLDAPによって管理されている +
          +
        • 特定のDNにユーザー情報のuidを追加することで管理されている
        • +
        +
      • +
      • mattermostのuser_nameはLDAPのuidが登録される
      • +
      • mattermostのスラッシュコマンドは実行時に操作者のuser_nameが送信される
      • +
      • そのuser_name(uid)を使用し検索を行うことで管理者かわかる
      • +
      +
      +
      +

      実装したスラッシュコマンド

      +
        +
      • vmの監査
      • +
      • 管理者権限の追加・削除
      • +
      +
      +
      +

      従来の手法 vmの監査

      +
        +
      • 生徒側 +
          +
        • 学生が借りたVMサーバーにグローバルIPを割り振る際に監査がある
        • +
        • 学生はアクセス制限やセキュリティアップデートの自動化などを行う
        • +
        • 監査用アカウントを作成し管理者にアクセス情報と共に問い合わせする
        • +
        +
      • +
      +
      +
      +

      従来の手法 vmの監査

      +
        +
      • 管理者側 +
          +
        • アクセス制限の確認 +
            +
          • /etc/hosts.allow /etc/hosts.denyの確認
          • +
          +
        • +
        • 不審なユーザーがいないかの確認
        • +
        • ssh +
            +
          • rootでアクセス出来るか
          • +
          • パスワード認証出来るか
          • +
          • デフォルトポートから変更されているか
          • +
          +
        • +
        • セキュリティアップデートが自動化されているか
        • +
        +
      • +
      +
      +
      +

      実装したコマンド vmの監査

      + +
        +
      • 監査を受ける生徒が使用するコマンド +
          +
        • アクセス制限などの作業は従来と同じ
        • +
        • 監査用のアカウントを作成し、描きコマンドを実行して公開鍵を登録
        • +
        • /syskan vm key-gen $VMNAME $IPADD
          +
        • +
        +
      -
      -

      認証の実装

      +
      +

      実装したコマンド vmの監査

      +
        +
      • 管理チームが使用するコマンド +
          +
        • /syskan vm audit $VMNAME $USERNAME $IPADD
          +
        • +
        +
      • +
      -
      -

      チャットシステムを用いたシステム管理の有効性

      +
      +

      従来の手法 sudoersに追加・削除

      +
        +
      • ldapの操作 +
          +
        • 基幹サーバーにログインしsyskanユーザー変更
        • +
        • ldifファイルを作成
        • +
        • 以下のコマンドを打つ
        • +
        +
      • +
      +
      $ldapmodify -f iesudoers.ldif -x -H host -D binddn -W
      +
      -
      -

      まとめ

      +
      +

      実装したコマンド sudoersに追加・削除

      +
        +
      • sudoers権限を持つ学生から権限を削除するコマンド
      • +
      • /syskan ldap delete sudoers $UID
      • +
      • 特定の生徒のldap情報を取得するコマンド +
          +
        • /syskan ldap search $UID
        • +
        +
      • +
      • +
      +
      +
      +

      チャットシステムを用いたシステム管理の有効性

      +
        +
      • 複雑なオプションやサーバー上のpathを覚える必要がない
      • +
      • 頻繁に使用する処理をサーバーにアクセスすることなく行える
      • +
      -
      +
      +

      まとめ

      +
        +
      • 2022年度から科目演習のテーマの一つとしてシステム管理チームを追加した
      • +
      • 座学と実際の運用を用いて学生にシステム管理を体験させた
      • +
      • しかし、システム管理チームに参加する学生の少なさやCLIの難易度の高さと言った問題点が挙げられた
      • +
      • そこでチャットシステムを用いたシステム管理を提案した
      • +
      +
      +

      今後の課題

      +
        +
      • スラッシュコマンドを使用してもらう
      • +
      • スラッシュコマンドの実装 +
          +
        • 他にもシステムの状態を確認する処理や定期的に利用する処理の追加
        • +
        +
      • +
      • 管理メンバーの引き継ぎ +
          +
        • 学生メンバーの3人中2人が今年卒業、指導教員も来年で定年
        • +
        +
      • +
      • 時期システム更新 +
          +
        • 2025年にはシステム更新作業がある
        • +
        +
      • +

      スピーカーノート

      大学での学習の向上や研究の専門性を上げたい -その方法として、利用者でもある学生が自身でシステムを管理することで実践的なシステム構築、運用などの知見を習得できる -また、自身の研究や興味に関連するシステムを構築することでシステムの専門性が深化していくものと考える -これを組織内の開かれた環境で取り組むことで将来の学生の教育にもつながる -このような取り組みを続けることで大学での学習

      ここで琉球大学には〜〜のシステムがあるという紹介を行う

      コースのカリキュラムに必要な計算機リソースを提供する +

      スピーカーノート

      技術力、プログラミング能力や構築力 + グループや組織内での意思疎通や対人関係 + 与えられた課題だけでなく、問題点を洗い出し分析し解決する能力 + また、技術者としての倫理観も求められる能力

      ここで琉球大学には〜〜のシステムがあるという紹介を行う

      コースのカリキュラムに必要な計算機リソースを提供する - AI,ハードウェア,ソフトウェア,セキュリティを学習するカリキュラム 具体的なサービス(AI学習タスク,VM,開発実験用コンテナ) -- 学習環境も提供する(gitlab,mattermost,ie-web)

      - 週一回のオンラインミーティングと学生実験週一回

      - 1997年から実施

      - シス管は年間10万円のバイト代が出る

      ここでは満たすべき要件を書く +- 学習環境も提供する(gitlab,mattermost,ie-web)

      ## システム構成図 +![w:800](figs/system.svg) + +---

      - 旧システムの問題点と新システムの設計 +ネットワークの構成(サブネット化してなかった)、生徒への貸し出し環境の修正(一つのマシンを5~6人で共用していた為、管理者権限で操作するとそれぞれが影響を受けるような形になっていた) +- 新システムの実装

      - システム利用者へのアンケート +- 設計・構築に関わった学生の自己評価アンケート +- アンケートの内容は,技術修得度合,システム構築に対する工夫点,システムリプレース全体に関する評価,次回のシステムリプレースの改善などの項目を挙げた.

      ここでは満たすべき要件を書く 更新前のシステムにあった問題点の改善やその時の最新技術を取り入れるなど要望から設計を行い更新しています。 現行のサーバーは機械学習の演習のためGPUが搭載されたものを採用しました。 -以前のファイルシステムはGDS2を採用しておりロックマネージャサーバーが落ちるとファイルシステムにアクセスできなくなった問題がある +以前のファイルシステムはGFS2を採用しておりロックマネージャサーバーが落ちるとファイルシステムにアクセスできなくなった問題がある -冗長構成の為のクラウド

      どのように構築しているかをかく -サービスの大部分は5年に一度のシステム更新で構築を行います。

      普段の運用のやり方を紹介 -運用を通して

      ## 学生主体で管理するシステムの成果 +冗長構成の為のクラウド

      - 5年に一度のシステムアップデート

      どのように構築しているかをかく +サービスの大部分は5年に一度のシステム更新で構築を行います。

      - 構築

      普段の運用のやり方を紹介 +運用を通して

      - 運用

      ## 学生主体で管理するシステムの成果 - 年間2~3人ほど250名が利用するシステムの設計・構築・管理経験者を卒業させている - セキュリティの専門家,ベンチャーのシステム管理者など - 学生が欲しいシステムを自分たちで構築できている - 自分たちで管理しているのでセキュリティ意識も高い ----

      - コースに所属する学生は普段の授業連絡などで使用しており

      下図がMattermostからスラッシュコマンドを実行し各基幹サーバーにコマンドが実行され実行者に結果が表示されるまでの流れである

      定期的に実行する処理やシステムの調査などに使用する処理などに絞って実装を行なった

      ## 学科システム - -- 学科システムは約300人の学生と教員に対して様々なサービスを提供している -- 学内ネットワークや、貸出用の仮想マシン (Virutal Machine: VM) など、授業や研究を円滑に進める為のサービスを提供している -- 学科システムはシステム管理チームによって管理されている - - 有志の職員と学生を中心に構成されている. - - 教師1名、職員2名、学生11名 - - 2022年から演習科目の一つとしてシステム管理が追加された - ----

      --- - -## Bullet Points - -- Show all -- at once -- or one -- by one -* one -* one -* one - ---- - -## Tables - -| Header | Header | -| ------ | ------ | -| Text | Text | - ---- - -## CodeGear Transition - -- CodeGear receives DataGear -- CodeGear writes to the next DataGear - -![bg right:60% 80%](figs/test.svg) - ---- - -## Code - -raw_socket -```c -__code raw_socket_init(){ - int sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); - if(sock == -1){ - perror("Failed to open socket"); - exit(1); - } - uint8_t buf[1550]; - - goto raw_socket(sock, buf, sizeof(buf)); - } -``` - ---- - -## References - -- [Get Started](https://github.com/marp-team/marp) -- [Documentation](https://marpit.marp.app/) -- [CLI](https://github.com/marp-team/marp-cli)

      \ No newline at end of file diff -r cd781513b6b1 -r 9da7bbb22297 slide/template.md --- a/slide/template.md Mon Jan 01 14:11:41 2024 +0900 +++ b/slide/template.md Sun Jan 07 13:49:25 2024 +0900 @@ -18,7 +18,11 @@ --- ## 知能情報コースの卒業生に期待される能力 - + - 技術力 - コミュニケーション能力 - 問題解決能力 @@ -30,9 +34,17 @@ - 旧システムの問題点を解消したシステムの構築 - 要求に対応するシステム運用 +- 適切な環境やハイスペックマシンを使用する為の構築 --- +## システム管理活動を通してこれらの能力を身につける + +- 3年生を対象とした演習科目の中でシステム管理を体験させた + +- チャットツールを用いたシステム管理 +--- + ## 情報工学生が利用するシステム +- 学習環境も提供する(gitlab,mattermost,ie-web) +- 分散ストレージシステム,一つのノードを複数のノードに複製 +- --> - 学生の演習や研究活動に必要なリソースを提供している - 仮想環境(KVM,Podman,Singurality) - 有線・無線ネットワーク - コースのカリキュラムに必要なサービスも提供している - 授業ページを掲載する学科web - 授業連絡等で使用されるMattermost +- ファイルシステム + - ceph --- -## システム構成図 + ## サービスの利用例 -- 授業・学外演習でのアプリケーション構築 +- 授業・学外演習でのアプリケーション構築でのKVM貸し出し +- イベント時に専用の無線LANの作成 +- イベントの告知に学科webにアナウンス --- -## 学生主体のシステム管理チーム +## 過去(2009年)のシステム管理の取り組み -- スタッフと学生の混成メンバー(6人) - - 指導教員2名、技術職員1名、学生3名 -- 2022年度から3年生の学生実験(前後期)としても実施 - - 毎期約10名の学生が参加している - - +- [情報工学系学科における教育用計算機システムの自主構築に関する取組み](https://www.jstage.jst.go.jp/article/jsise/26/1/26_79/_pdf/-char/ja) + - 先行研究ではシステムリプレースを学生が中心となって構築した + - 当時15名程の学生が参加していた + +- 学科システムの更新の実践的教育への活用 + - 旧システムの問題点の検証 + - それらを改善したシステムの設計・構築 + +- アンケートを用いた有効性の提示 + - 利用者に向けて新システムが有効的かのアンケート + - 管理者である学生へ技術習得度、システム構築に関する工夫 + --- -## システム管理活動 +## 2009年以降のシステム管理チーム + +- 旧システムの問題点を改善したシステムアップデートは続いている + - 直近では2020年に行われた +- 2012年よりシステム管理チームができ、2022年には演習科目のテーマに追加された +- 演習環境の貸し出しなどはKVM、Podman、singularityになっている +- 物理サーバーにGPUを搭載した + +--- + +## システムアップデート時の活動内容 @@ -109,23 +148,24 @@ - 学内ネットワーク 有線・無線 UTM - ストレージサーバー Ceph - クラウドサーバー Sakura - - 5年に一度のシステムアップデート + --- -## システム管理活動 +## 2020年度に構築された現在のサービス -- 構築 - - Ubuntuホスティングサーバー×6 - - KVM,Podman,singlarity - - PowerDNS,Akatsuki - - webサーバー - - gitlab - - mattermost + +- Ubuntuホスティングサーバー×6 +- KVM,Podman,singlarity +- PowerDNS +- Akatsuki(IP,ドメイン管理サービス) +- webサーバー +- gitlab +- mattermost --- @@ -135,34 +175,16 @@ 運用を通して --> -- 運用 - - 週に一回のミーティング - - 利用者からの問い合わせに対応 - - 障害発生時の修正 - - システムのバージョンアップデート + +- 週に一回のミーティング + - zoomで遠隔で行っている + - 作業ログやドキュメントはscrapboxを使用している +- 利用者からの問い合わせに対応 - 学生の学外公開サーバーの監査 - - Hands onの開催 - - ドキュメントにまとめる - ---- - -## 過去のシステム管理の取り組み - -- [情報工学系学科における教育用計算機システムの自主構築に関する取組み](https://www.jstage.jst.go.jp/article/jsise/26/1/26_79/_pdf/-char/ja) - - - 学科システムの更新の実勢的教育への活用 - - - アンケートを用いた有効性の提示 - - ---- - -## 学科システムの更新の実勢的教育への活用 - -- 旧システムの問題点と新システムの設計 - * +- 障害発生時の修正 +- システムのバージョンアップデート +- Hands onの開催 +- 新入生向けのインストール大会 --- @@ -187,18 +209,25 @@ - 知能情報分野の専門的な知識を習得することを目的としており、前期・後期それぞれで開講されている - システム管理の他にも毎年5~6個ほどのテーマが存在しており学生はこの中から選択する - 一学年定員60名なので1テーマあたり10名ほどの受講生がいる +- テーマの一つにシステム管理活動を追加した --- ## 演習実験でのシステム管理チームの取り組み - 週に一回二コマ + - 主にzoomを用いて遠隔で授業を行っている - サーバー室の見学 - 学科システムの紹介 -- オープンキャンパスの資料作成・発表(前期のみ) - サーバー班、web班、セキュリティ班にグループ分け - サービスの不具合の修正やシステムのアップデート + - 指導教員やシステム管理メンバーが一人付き生徒に教えている + - 生徒一人が画面共有して教員やメンバーが指示を出したり意見を出したりしている +- オープンキャンパスの資料作成・発表(前期のみ) + - [2023オープンキャンパス](https://ie.u-ryukyu.ac.jp/syskan/activity/open-campus-2023/) + + --- @@ -213,24 +242,28 @@ ## web班 +- ローカルPC上でHugoの構築,VMを使用してLAMP環境の構築 + - 学科システムのHugo化 + - 以前はWordPressを使用していたがセキュリティの問題から静的ページ変更 + - 静的ページの管理のしづらさや共通部分が多い --- ## セキュリティ班 - + - Vulsの構築 + - podmanでの構築 + - singlarityでの構築 --- ## 演習実験での問題点 -- 利用者である学生が主体的にシステム管理活動に参加する事に意味がある - - システム構築・運用の能力が身に付く - - 利用者が実現したいシステムの構築が可能 -- しかし継続してシステム管理活動に参加する学生が少ない +- 継続してシステム管理活動に参加する学生が少ない - システムが大規模かつ複雑で理解しくい - CLIでの操作に慣れていない学生が多い事から管理者権限が付与できなかった +- 手を動かす学生が固定化されていた --- @@ -245,8 +278,9 @@ --- ## 提案システムの実行例 - - +- ユーザーが実行したコマンドの結果のみ表示される +- 実行ユーザーと実行コマンドを含めた結果を表示 +![w:800](figs/slashcommand-exp.png) --- @@ -254,35 +288,114 @@ - 基幹システム上にHTTPサーバーコンテナを構築した -![w:600](figs/chatsystem4.png) - ---- - -## 実装したコマンド - -- VMの監査 -- LDAPの編集 -- +![w:600 ](figs/chatsystem4.png) --- ## 認証の実装 + +- 学科のシステムはLDAP経由でアカウントを管理している +- サーバー上の管理者権限もLDAPによって管理されている + - 特定のDNにユーザー情報のuidを追加することで管理されている +- mattermostのuser_nameはLDAPのuidが登録される +- mattermostのスラッシュコマンドは実行時に操作者のuser_nameが送信される +- そのuser_name(uid)を使用し検索を行うことで管理者かわかる +--- +## 実装したスラッシュコマンド + +- vmの監査 +- 管理者権限の追加・削除 + +--- + +## 従来の手法 vmの監査 + +- 生徒側 + - 学生が借りたVMサーバーにグローバルIPを割り振る際に監査がある + - 学生はアクセス制限やセキュリティアップデートの自動化などを行う + - 監査用アカウントを作成し管理者にアクセス情報と共に問い合わせする + +--- + +## 従来の手法 vmの監査 + +- 管理者側 + - アクセス制限の確認 + - /etc/hosts.allow /etc/hosts.denyの確認 + - 不審なユーザーがいないかの確認 + - ssh + - rootでアクセス出来るか + - パスワード認証出来るか + - デフォルトポートから変更されているか + - セキュリティアップデートが自動化されているか + +--- + +## 実装したコマンド vmの監査 + + +- 監査を受ける生徒が使用するコマンド + - アクセス制限などの作業は従来と同じ + - 監査用のアカウントを作成し、描きコマンドを実行して公開鍵を登録 + - /syskan vm key-gen $VMNAME $IPADD + ![w:650 ](figs/key-gen.png) + +--- + +## 実装したコマンド vmの監査 + - 管理チームが使用するコマンド + - /syskan vm audit $VMNAME $USERNAME $IPADD + ![w:600 ](figs/vmaudit.png) + +--- + +## 従来の手法 sudoersに追加・削除 + +- ldapの操作 + - 基幹サーバーにログインしsyskanユーザー変更 + - ldifファイルを作成 + - 以下のコマンドを打つ + +``` +$ldapmodify -f iesudoers.ldif -x -H host -D binddn -W +``` + +--- + +## 実装したコマンド sudoersに追加・削除 + + - sudoers権限を持つ学生から権限を削除するコマンド + - /syskan ldap delete sudoers $UID +- 特定の生徒のldap情報を取得するコマンド + - /syskan ldap search $UID +- ![w:600 ](figs/ldapadddel.png) --- ## チャットシステムを用いたシステム管理の有効性 +- 複雑なオプションやサーバー上のpathを覚える必要がない +- 頻繁に使用する処理をサーバーにアクセスすることなく行える + --- ## まとめ +- 2022年度から科目演習のテーマの一つとしてシステム管理チームを追加した +- 座学と実際の運用を用いて学生にシステム管理を体験させた +- しかし、システム管理チームに参加する学生の少なさやCLIの難易度の高さと言った問題点が挙げられた +- そこでチャットシステムを用いたシステム管理を提案した --- ## 今後の課題 -- 指導教員の +- スラッシュコマンドを使用してもらう +- スラッシュコマンドの実装 + - 他にもシステムの状態を確認する処理や定期的に利用する処理の追加 +- 管理メンバーの引き継ぎ + - 学生メンバーの3人中2人が今年卒業、指導教員も来年で定年 - 時期システム更新 - 2025年にはシステム更新作業がある \ No newline at end of file