Skip to content

Latest commit

ย 

History

History
149 lines (108 loc) ยท 6.76 KB

debian-systemd.ko.md

File metadata and controls

149 lines (108 loc) ยท 6.76 KB

Debian systemd์™€ SSH ๊ตฌ์„ฑ

English ยท ๋ฌธ์„œ ํ™ˆ ยท ์‰ฌ์šด ์šฉ์–ด์ง‘

์ด ๋ฌธ์„œ๋Š” ์„ค์น˜๋œ Debian rootfs์— systemd์™€ OpenSSH๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , BFU(Before First Unlock)์—์„œ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

systemd๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

systemd๋Š” Debian์˜ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. SSH, D-Bus, Tailscale ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. DawnShell์€ ์ „์šฉ PID(Process Identifier) namespace ์•ˆ์—์„œ systemd๋ฅผ PID 1๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ฒ„ํŠผ์ด ํ•˜๋Š” ์ผ

Debian 13 systemd + SSH ๊ตฌ์„ฑ์€ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. rootfs์™€ ready marker๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. Debian ํŒจํ‚ค์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  3. systemd, D-Bus, OpenSSH๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. debian ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ํ˜„์žฌ ์•ฑ ๊ณต๊ฐœ ํ‚ค๋ฅผ authorized_keys์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
  6. ๋น„๋ฐ€๋ฒˆํ˜ธ SSH ์ธ์ฆ๊ณผ root SSH ๋กœ๊ทธ์ธ์„ ๋•๋‹ˆ๋‹ค.
  7. ๋ถ€ํŒ… ์„ฑ๊ณต์„ ๊ธฐ๋กํ•˜๋Š” proof service๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  8. rootfs ๋‚ด๋ถ€ ํŒŒ์ผ ๊ถŒํ•œ๊ณผ ์†Œ์œ ๊ถŒ์„ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์€ Android ์ž ๊ธˆ์„ ํ•ด์ œํ•œ AFU(After First Unlock)์—์„œ๋งŒ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐœ์ธ ํ‚ค๋Š” ๋กœ๊ทธ์— ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ํ™˜๊ฒฝ

๋Ÿฐ์ฒ˜๋Š” Debian์„ ์œ„ํ•ด ๋‹ค์Œ Linux namespace๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

  • mount namespace: Debian ์ „์šฉ ๋งˆ์šดํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • PID namespace: systemd๋ฅผ Debian PID 1๋กœ ๋ณด์ด๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • UTS namespace: ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ dawnshell์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • cgroup namespace: ์œ„์ž„๋œ ์ž์› ๊ด€๋ฆฌ ๊ณ„์ธต๋งŒ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.
  • network namespace: ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  Android ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

chroot(change root)๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด๋Š” /๋ฅผ Debian rootfs๋กœ ๋ฐ”๊พธ์ง€๋งŒ ๊ฐ€์ƒ ๋จธ์‹ ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฉ์–ด๋Š” ์‰ฌ์šด ์šฉ์–ด์ง‘์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

๊ธฐ๋ณธ ๋งˆ์šดํŠธ

Debian ์•ˆ์—๋Š” /proc, /sys, /dev, /dev/pts, /run์ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. Android ํ˜ธ์ŠคํŠธ /data ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. rootfs ๋‚ด๋ถ€์˜ /data๋Š” ํ•„์š”ํ•œ ์ตœ์†Œ ๊ฒฝ๋กœ๋งŒ ๋ณด์ด๋„๋ก ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ

Debian์€ Android NIC(Network Interface Controller)๋ฅผ ์ง์ ‘ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. Wi-Fi, ๋ชจ๋ฐ”์ผ ๋ฐ์ดํ„ฐ, USB Ethernet, VPN ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ Android์—์„œ ์ค€๋น„๋˜๋ฉด Debian๋„ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SSH ์„œ๋ฒ„๋Š” ์ฃผ์†Œ๊ฐ€ ์—†์–ด๋„ TCP 22์˜ ๋ชจ๋“  ์ฃผ์†Œ์—์„œ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. Android๊ฐ€ ๋‚˜์ค‘์— ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋ฉด systemd๋‚˜ SSH๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

cgroup

DawnShell์€ cgroup v2์™€ ์žฅ์น˜ BPF(Berkeley Packet Filter)๋ฅผ ๋จผ์ € ์‹œํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณตํ•˜๋ฉด ์ „์šฉ v2 ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด ์‹œํ—˜ ์ž์›์„ ์ •๋ฆฌํ•œ ๋’ค ๊ฒฉ๋ฆฌ๋œ cgroup v1 devices์™€ name=systemd ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ๋Š” Debian๊ณผ Docker์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ Android ์ „์—ญ ์žฅ์น˜ ์ •์ฑ…์„ ์ง์ ‘ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ PID ํ˜ธํ™˜ ๋Œ€์ฒด ๋ชจ๋“œ

์ „์ฒด ๊ธฐ๋Šฅ ๋ชจ๋“œ๋Š” ์ปค๋„์ด private PID ๋ฐ cgroup namespace๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /proc/self/ns/pid๊ฐ€ ์—†๋‹ค๋ฉด ๋ณดํ†ต ์ปค๋„์˜ CONFIG_PID_NS๊ฐ€ ๊บผ์ ธ ์žˆ์œผ๋ฉฐ, ์ด ์ƒํƒœ์—์„œ systemd๋ฅผ Debian PID 1๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. cgroup ์ข…๋ฅ˜๋ฅผ ๋ฐ”๊ฟ”๋„ ๋น ์ง„ ์ปค๋„ ๊ธฐ๋Šฅ์ด ์ƒ๊ธฐ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ PID ํ˜ธํ™˜ ๋Œ€์ฒด ๋ชจ๋“œ ํ—ˆ์šฉ์€ ๊ธฐ๋ณธ๊ฐ’์ด ๊บผ์ง„ ๋ณ„๋„ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์ผœ๋„ DawnShell์€ ์ „์ฒด ๊ธฐ๋Šฅ ๊ฒฝ๋กœ๋ฅผ ๋จผ์ € ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ PID/cgroup namespace๋ฅผ ์ค€๋น„ํ•  ์ˆ˜ ์—†์„ ๋•Œ๋งŒ mode=compat๋ฅผ ๊ธฐ๋กํ•˜๊ณ , private mount/UTS namespace ์•ˆ์—์„œ /usr/sbin/sshd -D๋ฅผ ์ง์ ‘ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. SSH listener๋Š” ๋ถ€ํŒ… ์‹œ IP ์ฃผ์†Œ๊ฐ€ ์•„์ง ์—†์–ด๋„ ๊ณ„์† ๋Œ€๊ธฐํ•˜๋ฏ€๋กœ Wi-Fi๋‚˜ USB Ethernet์ด ๋Šฆ๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด๋„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์ „์ฒด ๊ธฐ๋Šฅ ๋ชจ๋“œ ํ˜ธ์ŠคํŠธ PID ๋Œ€์ฒด ๋ชจ๋“œ
TCP 22 OpenSSH ssh.service sshd -D ์ง์ ‘ ์‹คํ–‰
mount์™€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ private private
ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก private PID namespace Android์™€ ๊ณต์œ 
systemd PID 1๊ณผ D-Bus ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
์œ„์ž„ cgroup๊ณผ Docker ์„ ํƒํ•œ backend ๊ฒ€์‚ฌ ์„ฑ๊ณต ์‹œ ์‚ฌ์šฉ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
๊ทธ ๋ฐ–์˜ ํ™œ์„ฑํ™”๋œ systemd ์„œ๋น„์Šค ์ •์ƒ ์‹œ์ž‘ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ

์ด ๊ธฐ๋Šฅ์€ ๊ฒฉ๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ์•ฝํ•œ systemd ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์ƒ SSH์šฉ ํ˜ธํ™˜ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. Debian ํ”„๋กœ์„ธ์Šค๊ฐ€ Android ํ˜ธ์ŠคํŠธ PID ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ปค๋„์„ ์žฌ๋นŒ๋“œํ•˜๊ธฐ ์–ด๋ ต๊ณ  rootfs๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”. ์„ค์ •์„ ์ €์žฅํ•˜๋ฉด ์‹คํ–‰ ์ค‘์ธ Debian์„ ํ•œ ๋ฒˆ ์žฌ์‹œ์ž‘ํ•ด ์„ ํƒํ•œ ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

SSH ์ •์ฑ…

OpenSSH๋Š” ๋‹ค์Œ ์ •์ฑ…์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Port 22
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no

SSH ๊ฐœ์ธ ํ‚ค๋Š” ์•ฑ CE(Credential Encrypted) ์ €์žฅ์†Œ์— ๋‚จ๊ณ  ๊ณต๊ฐœ ํ‚ค๋งŒ Debian์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋ฉด ๊ตฌ์„ฑ ๋ฒ„ํŠผ์„ ๋‹ค์‹œ ๋ˆŒ๋Ÿฌ ์ƒˆ ๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ข…๋ฃŒ์™€ ์žฌ์‹œ์ž‘

์ „์ฒด ๊ธฐ๋Šฅ ๋ชจ๋“œ์—์„œ ์ค‘์ง€๋Š” systemd์— ์ •์ƒ ์ข…๋ฃŒ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์ œํ•œ ์‹œ๊ฐ„๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ๋‚จ์€ ์ž์‹ ํ”„๋กœ์„ธ์Šค์™€ ๋งˆ์šดํŠธ, cgroup ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๋Œ€์ฒด ๋ชจ๋“œ์—์„œ๋Š” ์ถ”์  ์ค‘์ธ OpenSSH master๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  private mount/UTS ์‹คํ–‰ ๊ณต๊ฐ„์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ์—๋Š” systemd ์„œ๋น„์Šค ์ข…๋ฃŒ ๋‹จ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์žฌ์‹œ์ž‘์€ ํ˜„์žฌ ๋ชจ๋“œ์— ๋งž๋Š” ์ •๋ฆฌ๋ฅผ ๋งˆ์นœ ๋’ค ์ปค๋„ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•ด ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

USER_UNLOCKED๋Š” ์ข…๋ฃŒ ์‹ ํ˜ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž ๊ธˆ์„ ํ’€์–ด๋„ Debian๊ณผ SSH๋Š” ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ํ™•์ธ

์•ฑ์˜ ์ƒํƒœ๋Š” ๋‘ ๋ชจ๋“œ ๋ชจ๋‘ supervisor, ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ํŒŒ์ผ, TCP 22, mount ๋ฐ namespace identity๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ธฐ๋Šฅ ๋ชจ๋“œ์—์„œ๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • systemd๊ฐ€ Debian PID 1์ธ์ง€ ์—ฌ๋ถ€
  • D-Bus์™€ ๊ธฐ๋ณธ target
  • ssh.service
  • cgroup health

ํ˜ธํ™˜ ๋Œ€์ฒด ๋ชจ๋“œ์˜ health ๊ฒฐ๊ณผ์—๋Š” mode=compat, compat_ready=true๊ฐ€ ๋ช…์‹œ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์„œ๋ฒ„ ์ˆ˜๋ช… ์ฃผ๊ธฐ์™€ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๋กœ๊ทธ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Android ์ „์ฒด ์žฌ๋ถ€ํŒ…

Debian root ์…ธ์—์„œ systemctl reboot๋ฅผ ์‹คํ–‰ํ•ด๋„ Android ์ „์ฒด๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Android ์ „์ฒด ์žฌ๋ถ€ํŒ…์€ DawnShell์ด ์ œ๊ณตํ•˜๋Š” ๋ช…์‹œ์  bridge๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

reboot --check
reboot now

reboot now๋Š” ์ฆ‰์‹œ ๊ธฐ๊ธฐ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๋ฏ€๋กœ ์ €์žฅ ์ค‘์ธ ์ž‘์—…์„ ๋จผ์ € ๋๋‚ด ์ฃผ์„ธ์š”. ์ด ๊ด€๋ฆฌํ˜• Android ์žฌ๋ถ€ํŒ… bridge๋Š” ์ „์ฒด systemd ๋ชจ๋“œ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฉฐ SSH ์ „์šฉ ํ˜ธํ™˜ ๋Œ€์ฒด ๋ชจ๋“œ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.