ํœด๋Œ€์šฉ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด systemd-homed ๋„์ž…

๋ ˆ๋‚˜ํŠธ ํฌํ„ฐ๋ง ๋„์ž… ๋œ (PDF) All Systems Go 2019 ์ปจํผ๋Ÿฐ์Šค์—์„œ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž systemd์˜ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ - ์‹œ์Šคํ…œ ํ™ˆ, ์‚ฌ์šฉ์ž ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ด์‹ โ€‹โ€‹๊ฐ€๋Šฅํ•˜๊ณ  ์‹œ์Šคํ…œ ์„ค์ •๊ณผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์‹๋ณ„์ž ๋™๊ธฐํ™” ๋ฐ ๊ธฐ๋ฐ€์„ฑ์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์ด ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„์— ์ „์†ก๋  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ž๊ธ‰์ž์กฑ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ํ™˜๊ฒฝ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋œ ๋งˆ์šดํŠธ๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…์€ /etc/passwd ๋ฐ /etc/shadow ๋Œ€์‹  ์‹œ์Šคํ…œ ์„ค์ •์ด ์•„๋‹Œ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„ JSON ํ˜•์‹์œผ๋กœ ~/.identity ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์—๋Š” ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ, ์•”ํ˜ธํ™” ํ‚ค, ํ• ๋‹น๋Ÿ‰, ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž‘์—…์— ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์€ ์™ธ๋ถ€ Yubikey ํ† ํฐ์— ์ €์žฅ๋œ ๋””์ง€ํ„ธ ์„œ๋ช…์œผ๋กœ ์ธ์ฆ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” SSH ํ‚ค, ์ƒ์ฒด ์ธ์‹ ์ธ์ฆ ๋ฐ์ดํ„ฐ, ์ด๋ฏธ์ง€, ์ด๋ฉ”์ผ, ์ฃผ์†Œ, ์‹œ๊ฐ„๋Œ€, ์–ธ์–ด, ํ”„๋กœ์„ธ์Šค ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ, ์ถ”๊ฐ€ ๋งˆ์šดํŠธ ํ”Œ๋ž˜๊ทธ(nodev, noexec, nosuid), ์‚ฌ์šฉ๋œ ์‚ฌ์šฉ์ž IMAP/SMTP ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. , ์ž๋…€ ๋ณดํ˜ธ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”, ๋ฐฑ์—… ์˜ต์…˜ ๋“ฑ์— ๋Œ€ํ•œ ์ •๋ณด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์š”์ฒญํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ API๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋ฅด๋งํฌ.

UID/GID ํ• ๋‹น ๋ฐ ์ฒ˜๋ฆฌ๋Š” ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ฐ ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ๋™์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ(์˜ˆ: ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ)๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๊ณ„์ •์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๋ชจ๋“  ์ปดํ“จํ„ฐ์—์„œ ์ž‘์—… ํ™˜๊ฒฝ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์ด ์žˆ์Œ). ์‚ฌ์šฉ์ž์˜ ํ•ฉ์„ฑ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค).

๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•ด LUKS2 ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋˜์—ˆ์ง€๋งŒ systemd-homed๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ๋””๋ ‰ํ„ฐ๋ฆฌ, Btrfs, Fscrypt ๋ฐ CIFS ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํœด๋Œ€์šฉ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” homectl ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ๋Š” ๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ž‘์—…์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

  • systemd-homed.service - ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  JSON ๋ ˆ์ฝ”๋“œ๋ฅผ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฏธ์ง€์— ์ง์ ‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • pam_systemd - ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ JSON ํ”„๋กœํ•„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ™œ์„ฑํ™”๋œ ์„ธ์…˜์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์ด๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค(์ธ์ฆ ์ˆ˜ํ–‰, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ตฌ์„ฑ ๋“ฑ).
  • systemd-logind.service - ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ JSON ํ”„๋กœํ•„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ์„ค์ •์„ ์ ์šฉํ•˜๊ณ  ์ œํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • nss-systemd - glibc์šฉ NSS ๋ชจ๋“ˆ์€ JSON ํ”„๋กœํ•„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ž˜์‹ NSS ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•ฉ์„ฑํ•˜์—ฌ UNIX ์‚ฌ์šฉ์ž ์ฒ˜๋ฆฌ API(/etc/password)์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • PID 1 - ๋™์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ (๋‹จ์œ„๋กœ DynamicUser ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ถ”ํ•˜์—ฌ ํ•ฉ์„ฑ) ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • systemd-userdbd.service - UNIX/glibc NSS ๊ณ„์ •์„ JSON ๋ ˆ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ ์ฟผ๋ฆฌ ๋ฐ ๋ฐ˜๋ณต์„ ์œ„ํ•œ ํ†ตํ•ฉ Varlink API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆํ•œ ์‹œ์Šคํ…œ์˜ ์žฅ์ ์€ /etc ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ๋งˆ์šดํŠธํ•  ๋•Œ ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ , ์‹œ์Šคํ…œ ๊ฐ„ ์‹๋ณ„์ž(UID/GID)๋ฅผ ๋™๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ , ํŠน์ • ์ปดํ“จํ„ฐ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ๋…๋ฆฝ์„ฑ, ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ฐจ๋‹จ ๋“ฑ์ด ์žˆ๋‹ค. ์ ˆ์ „ ๋ชจ๋“œ์—์„œ๋Š” ์•”ํ˜ธํ™” ๋ฐ ์ตœ์‹  ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Systemd-homed๋Š” ๋ฆด๋ฆฌ์Šค 244 ๋˜๋Š” 245์˜ systemd ์ฃผ๋ฅ˜์— ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

JSON ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์˜ˆ:

"autoLogin": ์‚ฌ์‹ค,
"๋ฐ”์ธ๋”ฉ": {
ยซ15e19cd24e004b949ddaac60c74aa165ยป : {
"fileSystemType": "ext4"
ยซfileSystemUUIDยป : ยซ758e88c8-5851-4a2a-b98f-e7474279c111ยป,
"gid": 60232,
"ํ™ˆ๋””๋ ‰ํ† ๋ฆฌ": "/ํ™ˆ/ํ…Œ์ŠคํŠธ",
"imagePath": "/home/test.home",
"luksCipher": "aes",
"luksCipherMode": "xts-plain64",
ยซluksUUIDยป : ยซe63581ba-79fa-4226-b9de-1888393f7573ยป,
"luksVolumeKeySize" : 32,
ยซpartitionUUIDยป : ยซ41f9ce04-c927-4b74-a981-c669f93eb4dcยป,
"storage": "๋ฃจํฌ",
"uid" : 60233
}
},
"disposition": "์ผ๋ฐ˜",
"enforcePasswordPolicy": ๊ฑฐ์ง“,
"lastChangeUSec": 1565951024279735,
"์˜ ๋ฉค๋ฒ„์ด๋‹ค" : [
"๋ฐ”ํ€ด"
],
"ํŠน๊ถŒ": {
"ํ•ด์‹œ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ": [
ยซ$6$WHBKvAFFT9jKPA4k$OPY4D5โ€ฆ/ยป
] },
"์„œ๋ช…" : [
{
"๋ฐ์ดํ„ฐ": "LU/HeVrPZSzi3M3J...==",
"key": "โ€”โ€”๊ณต๊ฐœ ํ‚ค ์‹œ์ž‘โ€”โ€”\nMCowBQADK2VwAyโ€ฆ=\nโ€”โ€”๊ณต๊ฐœ ํ‚ค ๋โ€”โ€”\n"
}
],
"์‚ฌ์šฉ์ž ์ด๋ฆ„": "ํ…Œ์ŠคํŠธ",
"์ƒํƒœ" : {
ยซ15e19cf24e004b949dfaac60c74aa165ยป : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec": 1566309342341723,
"rateLimitCount" : 1,
"์ƒํƒœ": "๋น„ํ™œ์„ฑ",
"์„œ๋น„์Šค": "io.systemd.Home",
"๋””์Šคํฌ ํฌ๊ธฐ": 161218667776,
"๋””์Šคํฌ์ฒœ์žฅ": 191371729408,
"๋””์Šคํฌ์ธต": 5242780,
"signedLocally": ์‚ฌ์‹ค
}
}

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€