Electron: SUID ์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฐพ์•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 04์›” 25์ผ  ยท  153์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: electron/electron

๋น„ํ–‰ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • [x] ๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ธฐ์—ฌ ์ง€์นจ ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
  • [x] ๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค€์ˆ˜ํ•˜๋Š” ํ–‰๋™ ๊ฐ•๋ น ์„ ๋”ฐ๋ฅผ ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
  • [x] ๋ฌธ์ œ ์ถ”์ ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ์ œ์ถœํ•˜๋ ค๋Š” ๋ฌธ์ œ์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์„ธ๋ถ€์ •๋ณด

  • ์ „์ž ๋ฒ„์ „:

    • 5.0.0

  • ์šด์˜ ์ฒด์ œ:

    • ์•„์น˜ ๋ฆฌ๋ˆ…์Šค x64

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์•Œ๋ ค์ง„ ์ž‘๋™ ์ „์ž ๋ฒ„์ „: :

    • 4.1.5

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

์‹คํ–‰ node_modules/.bin/electron --version ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค v5.0.0 .

๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๋ช…๋ น์ด ์ด ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด --version ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

$ node_modules/.bin/electron --version
[2720:0425/142001.775056:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /home/christianbundy/src/ssbc/patchwork/node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

์ถ”๊ฐ€ ์ •๋ณด

$ stat /home/christianbundy/src/ssbc/patchwork/node_modules/electron/dist/chrome-sandbox
  Size: 5185424     Blocks: 10128      IO Block: 4096   regular file
Device: 802h/2050d  Inode: 1465270     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/christianbundy)   Gid: ( 1000/christianbundy)
Access: 2019-04-25 14:15:10.609279524 -0700
Modify: 2019-04-25 14:15:10.659278929 -0700
Change: 2019-04-25 14:15:10.659278929 -0700
 Birth: 2019-04-25 14:15:10.609279524 -0700

๋‚ด๊ฐ€ chown ๋ฐ chmod ํŒŒ์ผ์ด๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‚ด ์ง๊ด€์€ npm install electron@latest ์ด ๋ช…๋ น ์—†์ด๋„ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋œ ๋™์ž‘์ž…๋‹ˆ๊นŒ?

5-0-x discussion platforlinux

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

CONFIG_USER_NS=y ๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ sysctl kernel.unprivileged_userns_clone=1

๋ชจ๋“  153 ๋Œ“๊ธ€

์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ฃจํŠธ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๊ณ  npm install ๋™์•ˆ ๋ฃจํŠธ ์•”ํ˜ธ๋ฅผ ๋ฌป๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ Arch๋Š” ๊ถŒํ•œ ์—†๋Š” CLONE_NEWUSER ์ปค๋„ ์ง€์›์„ ๊ตฌ์„ฑํ•˜๊ณ  Chromium(๋ฐ Electron)์€ ์ด์ „ setuid ์ƒŒ๋“œ๋ฐ•์Šค์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Linux์— ๋ฐฐํฌ๋˜๋Š” ์•ฑ์€ ์ด๋ฅผ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์— ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/electron-userland/electron-installer-debian/pull/184 ๋ฐ https://github.com/electron-userland/electron-installer-redhat/pull/112 ๋ฅผ ์ฐธ์กฐ ํ•˜์„ธ์š” .

๊ฐœ๋ฐœ ์ค‘์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ง€์นจ๊ณผ ํ•จ๊ป˜ npm install ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ—คํ—ค ์ •๋ง ๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ถŒํ•œ์ด ์—†๋Š” CLONE_NEWUSER๊ฐ€ CONFIG_USER_NS=y ์™”์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜„์žฌ ๊ตฌ์„ฑ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ๋˜๋Š” ์ด๊ฒƒ์ด Arch์—์„œ ์˜ˆ์ƒ๋˜๋Š” ์ถœ๋ ฅ์ด๋ผ๋ฉด ๊ธฐ๊บผ์ด ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค -- ์ตœ์ฒจ๋‹จ ๋ฐฐํฌํŒ์„ ์‹คํ–‰ํ•  ๋•Œ ์˜ˆ์ƒ๋˜๋Š” ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. npm์—์„œ ๋ฐ”๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” PKGBUILD ์—์„œ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ๊ฑด๋ฐฐ!

CONFIG_USER_NS=y ๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ sysctl kernel.unprivileged_userns_clone=1

๋ชจ๋“  Linux ๋ฐฐํฌํŒ์ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@kitingChris setuid ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ „์ž ์•ฑ์„ ๊ฐœ๋ฐœ/์ถœ์‹œํ•  ๋•Œ ๊ฐœ๋ฐœ์ž/ํŒจํ‚ค์ง• ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์œ„์— ๋งํฌ๋œ @nornagon ๊ณผ ๊ฐ™์ด ์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ์˜ ๊ถŒํ•œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  Linux ๋ฐฐํฌํŒ์ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์›๋ณธ ๋ฉ”์‹œ์ง€ ๋ณด๊ธฐ:

ํŒŒ์ผ์„ chown ๋ฐ chmodํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ https://github.com/electron/electron/issues/16631#issuecomment -476082063์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋”ฐ๋ผ์„œ suid ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • sudo chown root chrome-sandbox
  • chmod 4755 chrome-sandbox

appimage/snap ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•„์ง ๊ณต๊ฐœํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋” ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค. --no-sandbox argumentmnt๋กœ appimage๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ํ•ดํ‚น์ž…๋‹ˆ๋‹ค.

@nornagon

์ ์ ˆํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ฃจํŠธ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๊ณ  npm ์„ค์น˜ ์ค‘์— ๋ฃจํŠธ ์•”ํ˜ธ๋ฅผ ๋ฌป๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

chmod 4755 node_modules/electron/dist/chrome-sandbox ์‹คํ–‰์—๋Š” ๋ฃจํŠธ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ chrome-sandbox ํฌํ•จํ•œ ๋ชจ๋“  ํŒŒ์ผ์„ ์„ค์น˜ํ•  ๋•Œ deb/pacman/etc ํŒจํ‚ค์ง€์— ์•ฑ์„ ๋ž˜ํ•‘ํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ์†Œ์œ . ๋”ฐ๋ผ์„œ ์„ค์น˜ ๊ณผ์ •์—์„œ ์ „์ž๊ฐ€ ์ž๋™์œผ๋กœ chmod 4755 node_modules/electron/dist/chrome-sandbox ์ˆ˜ํ–‰ํ•˜๋ฉด ์—ฌ๊ธฐ์— ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ˆ˜๋™์œผ๋กœ ์ด ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

CONFIG_USER_NS=y๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ sysctl kernel.unprivileged_userns_clone=1์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

sudo sysctl kernel.unprivileged_userns_clone=1 ์ด ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ฉฐ ๊ด€๋ จ ์ฃผ์„ ์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@vladimiry ๋จผ์ € chownํ•œ ๋‹ค์Œ chmod๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@burningTyger ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค . ๋ฐฉ๊ธˆ ์›๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

@nornagon CI์— ๋Œ€ํ•ด chmod 4755 out/Release/chrome-sandbox ํ•˜๋ฉด ํ•ด๋‹น ๊ถŒํ•œ์ด zip ๋กœ ์œ ์ง€๋˜๊ฑฐ๋‚˜ DL์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด electron-download ์—์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ณ€๊ฒฝํ•ด์•ผ ํ•  ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋‚˜์œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์—ฌ๊ธฐ์— ๋™์ผํ•ฉ๋‹ˆ๋‹ค... :(

@MarshallOfSound zip์€ ๊ถŒํ•œ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ๋ฌธ์ œ๋Š” chmod ๊ถŒํ•œ์ด ์•„๋‹ˆ๋ผ ์†Œ์œ ์ž์ž…๋‹ˆ๋‹ค. setuid ์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ๋Š” ๋ฃจํŠธ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— suid _to root_์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ๊ถŒํ•œ์„ ๋จผ์ € ์–ป์ง€ ์•Š๊ณ  ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋Š” Linux์—์„œ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Linux์—๊ฒŒ๋Š” ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๋Š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Electron์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. setuid ์ƒŒ๋“œ๋ฐ•์Šค ๋Œ€์‹  ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปค๋„์—์„œ ๊ถŒํ•œ ์—†๋Š” CLONE_USERNS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ์ƒŒ๋“œ๋ฐ•์Šค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ _ํŒจํ‚ค์ง€๋˜์ง€ ์•Š์€ ์•ฑ์„ ๋ถ€ํŒ…ํ•  ๋•Œ๋งŒ_ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค. Electron์ด ํŒจํ‚ค์ง€ ์•ฑ์„ ๋ถ€ํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ๋ถ€ํŒ…์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋“  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒŒ๋“œ๋ฐ•์‹ฑ ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฉด ์ƒŒ๋“œ๋ฐ•์‹ฑ ์—†์ด ๋ถ€ํŒ…ํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.
  4. Linux์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” (2) ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ณ  ์žˆ๋‹ค. ๋ฐฐํฌ๋œ ์•ฑ์˜ ๋ณด์•ˆ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋ƒ…/ํ”Œ๋žซํŒฉ์˜ ์ž‘๋™ ๋ฐฉ์‹์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ƒ…/ํ”Œ๋žซํŒฉ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Mac App Store ๋ฒ„์ „์˜ Electron์„ ๊ตฌ์ถ•ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ด๋‹น ์ƒํ™ฉ์—์„œ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ด๋ฏธ ์•ฑ์„ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์ด ๋” ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

  1. ํŒจํ‚ค์ง€๋˜์ง€ ์•Š์€ ์•ฑ์„ ๋ถ€ํŒ…ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒŒ๋“œ๋ฐ•์‹ฑ ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค. Electron์ด ํŒจํ‚ค์ง€ ์•ฑ์„ ๋ถ€ํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ๋ถ€ํŒ…์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์–ด๋–ป๊ฒŒ ๋“  ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒŒ๋“œ๋ฐ•์‹ฑ ์—†์ด ํŒจํ‚ค์ง•๋˜์ง€ ์•Š์€ ์•ฑ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒŒ๋“œ๋ฐ•์‹ฑ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํŒจํ‚ค์ง•๋œ ์•ฑ์ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด remote ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์•ฑ์„ AppImage / Snap / Flatpak ํŒจํ‚ค์ง€๋กœ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒฝ์šฐ.

  1. ๋ชจ๋“  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒŒ๋“œ๋ฐ•์‹ฑ ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฉด ์ƒŒ๋“œ๋ฐ•์‹ฑ ์—†์ด ๋ถ€ํŒ…ํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒŒ๋“œ๋ฐ•์Šค๋กœ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ๋œ ํŒจํ‚ค์ง€ ์•ฑ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

  1. Linux์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์•ฑ์ด ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Linux์—์„œ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ(ํ˜„์žฌ ์ƒํ™ฉ, ๊ฐ•์ œ ์ƒŒ๋“œ๋ฐ•์‹ฑ).

(1)๋„ ์ข‹์ง€๋งŒ (2)๋ฅผ ์กฐ๊ธˆ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด๋„ ์•ฑ์— ๋…ธ์ถœ๋˜๋Š” API๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”ํ•  ์œ ์ผํ•œ ๊ฒƒ์€ OS ์ˆ˜์ค€ ์ƒŒ๋“œ๋ฐ•์Šค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์•ฑ์„ ๋กœ๋“œํ•˜์ง€๋งŒ OS์— ์˜ํ•ด ๋ณดํ˜ธ๋˜์ง€ ์•Š์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์•ฑ์„ ๋กœ๋“œํ•˜์ง€๋งŒ OS์— ์˜ํ•ด ๋ณดํ˜ธ๋˜์ง€ ์•Š์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋‚˜์—๊ฒŒ๋„ ์ข‹๊ฒŒ ๋“ค๋ฆฐ๋‹ค. ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” 2๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์„ ํƒ์  ๋ณด์•ˆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๋ณด์•ˆ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด์ œ "๋ฐ”๋ณด ์‚ฌ์šฉ์ž" ์‹ ๋ฐœ๋กœ ๋“ค์–ด์„œ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ Electron์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ๋ณด์•ˆ ์กฐ์น˜๋ผ๋ฉด ๊ฒฝ๊ณ ์™€ ๋‚ด๊ฐ€ ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์ข‹์€ ์„ค๋ช…์„ ์ฃผ์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‚˜์—๊ฒŒ ๋‚˜์œ "์ž‘๋™ํ•˜์ง€ ์•Š๋Š”" ๋ง›์„ ์ฃผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด ๋•Œ๋ฌธ์— ๋‚˜๋Š” 1. (์ง€๊ธˆ์ฒ˜๋Ÿผ ๊ฐ•์ œ ์ข…๋ฃŒ) ๋˜๋Š” 4๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

:x: chown root:root chrome-sandbox && chmod 4755 chrome-sandbox ์€(๋Š”) ์ผ๋ถ€ ์œ„ํ—˜ ์‹ ํ˜ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์„ ์•„์ฃผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด: chrome-sandbox ์— SUID ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ _๋ชจ๋“  ์‚ฌ์šฉ์ž_๊ฐ€ _๋ฃจํŠธ_๋กœ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, chrome-sandbox ์•…์˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฑฐ๋‚˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์•…์„ฑ์ด ๋  ๊ฒฝ์šฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฃจํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. chrome-sandbox ๋Š” ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

npm install ์— ๋Œ€ํ•ด ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. sudo (์‚ฌ์šฉ์ž๊ฐ€ ์•”ํ˜ธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•จ)๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์นจ์ž…์ ์ด๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณด์•ˆ ๊ฒฐ๊ณผ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

chown root:root chrome-sandbox && chmod 4755 chrome-sandbox๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์œ„ํ—˜ ์‹ ํ˜ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์ฒด sudo sysctl kernel.unprivileged_userns_clone=1 ๋กœ User Namespace ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Ubuntu์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€๋งŒ Arch์—์„œ๋Š” ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Œ).

๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด ์•„์ฃผ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด: chrome-sandbox ์— SUID ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ _๋ชจ๋“  ์‚ฌ์šฉ์ž_๊ฐ€ _๋ฃจํŠธ_๋กœ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, chrome-sandbox ์•…์˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฑฐ๋‚˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์•…์˜์ ์ด๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฃจํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. chrome-sandbox ๋Š” ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” Chrome๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ฑฑ์ •๋œ๋‹ค๋ฉด Chrome๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :)

์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ "์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ" ์—†์ด ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฒ˜์Œ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆ๋งŒ์„ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‚
๋‚ด๊ฐ€ ์˜ˆ์ƒ ์ด ์ƒŒ๋“œ ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งŒ, ์—ฌ์ „ํžˆ ์–ป์„ The SUID sandbox helper binary was found, but is not configured correctly ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ „์ž 4.x๋กœ ๋กค๋ฐฑํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค ๐Ÿคจ

์—๋Ÿฌ ๋ฉ”์‹œ์ง€

Snapcraft ๊ฒ€ํ†  ๋ฐ suid

chrome-sandbox ์— suid ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ์Šค๋ƒ…์„ ์—…๋กœ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ snapcraft์˜ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค์—์„œ suid ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

The store was unable to accept this snap.
  - checksums do not match. Please ensure the snap is created with either 'snapcraft pack <DIR>' (using snapcraft >= 2.38) or 'mksquashfs <dir> <snap> -noappend -comp xz -all-root -no-xattrs -no-fragments'. If using electron-builder, please upgrade to latest stable (>= 20.14.7). See https://forum.snapcraft.io/t/automated-reviews-and-snapcraft-2-38/4982/17 for details.
  - found errors in file output: unusual mode 'rwsr-xr-x' for entry './chrome-sandbox'

@thomasnordquist ๋Š” OS ์ˆ˜์ค€ ์ƒŒ๋“œ๋ฐ•์‹ฑ --no-sandbox ์„ ์•ฑ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, app.commandLine.appendSwitch ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Snap ํŒจํ‚ค์ง€์™€ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์€ ํ˜ผํ•ฉ ๋ชจ๋“œ์—์„œ ๋นŒ๋“œํ•œ ์•ฑ์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค . Electron v5๋Š” AppImage ๋ฐ Snap์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„์ง ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ƒŒ๋“œ๋ฐ•์‹ฑ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์™„์ „ํžˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ธ์  ๊ฐ€๋Š” ๋ถ„๋ช…ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Snapcraft๊ฐ€ suid ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋งˆ๋„ ์œ ์ผํ•œ ์˜ต์…˜์€ Snapcraft์—์„œ Electron์˜ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  Snapcraft๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Snapcraft๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง•ํ•  ๋•Œ ์ถ”๊ฐ€ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด --no-sandbox ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ Snapcraft/Flatpak์—์„œ ์‹คํ–‰์„ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ํŠน์ • ๊ฐ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ Snap ๊ด€๋ จ ๋ฌธ์„œ https://docs.snapcraft.io/browser-support-interface

@posix4e ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ SUID ์ƒŒ๋“œ๋ฐ•์Šค/ํด๋ฐฑ ๋ชจ๋“œ ๋ชจ๋‘์—์„œ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌ๋œ Snap ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด

๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด ์•„์ฃผ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด: chrome-sandbox ์— SUID ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ _๋ชจ๋“  ์‚ฌ์šฉ์ž_๊ฐ€ _๋ฃจํŠธ_๋กœ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, chrome-sandbox ์•…์˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฑฐ๋‚˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์•…์˜์ ์ด๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฃจํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. chrome-sandbox ๋Š” ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” Chrome๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ฑฑ์ •๋œ๋‹ค๋ฉด Chrome๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :)

Chrome์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ SUID๊ฐ€ ์„ค์ •๋œ root:root ๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฑฑ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ธฐ๋ก์„ ์œ„ํ•œ ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. https://github.com/chromium/chromium/tree/master/sandbox/linux/suid

ํ•˜์ง€๋งŒ npm install ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋” ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

  1. ์—ฌ๋Ÿฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ฆ‰์„์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.
  2. root:root ๋ฐ SUID ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด sudo chown root:root && sudo chmod 4755 ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ตœ์ดˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด ์Šคํƒ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

npm ์„ค์น˜์—์„œ sudo chown root:root && sudo chmod 475 ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฉฐ npm์€ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. npm์˜ ํ›„ํฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ๋ฃจํŠธ๋กœ๋„ ํ›„ํฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒจํ‚ค์ง€ ๋ฐ ์ค‘์ฒฉ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Š” ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

npm ์„ค์น˜์—์„œ sudo chown root:root && sudo chmod 475๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ ์˜ต์…˜์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

npm ์„ค์น˜ ์ค‘์— ๋ฃจํŠธ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜์—ดํ•˜์ง€ ์•Š์€ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๊ทธ ๊ฐ€์น˜๋ฅผ ์œ„ํ•ด electron-installer-debian 1.2.0, electron-installer-redhat 1.1.0 ๋ฐ electron-installer-snap 3.2.0์ด SUID ์ƒŒ๋“œ๋ฐ•์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Electron Forge v5 ๋ฐ v6 ๋ฒ ํƒ€๋„ ์ „์ด์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฒ”์œ„ ๋‚ด ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด npm update ๋˜๋Š” yarn upgrade ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ).

๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๊ด€๋ จ ์ฝ”๋“œ ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, Snaps์—๋Š” ๋” ๋งŽ์€ ๊ฒƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ƒŒ๋“œ๋ฐ•์Šค ์ง€์› ์ถ”๊ฐ€). ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ จ PR์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฐฉ๊ธˆ ์ด๊ฒƒ์„ ๋ˆŒ๋ €์Šต๋‹ˆ๋‹ค. chown / chmod๊ฐ€ ์ž‘๋™ํ•˜์ง€๋งŒ Docker ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ทจํ•ด์•ผ ํ•  ์œ ์ผํ•œ ์กฐ์น˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ํ•˜๋ฉด ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

์ด์— ๋Œ€ํ•œ ์ˆ˜์ •์€ docker run ๋ช…๋ น์— --privileged ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ฃผ๋กœ CI์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@JCMais Electron์ด suid ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ด์•ผ ํ•˜์ง€๋งŒ ๋„์ปค ๋‚ด์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ --disable-namespace-sandbox suid ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --privileged (๋˜๋Š” --cap-add SYS_ADMIN ๋˜๋Š” CLONE_NEWUSER๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • seccomp ํ”„๋กœํ•„)๋กœ docker๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์ƒŒ๋“œ๋ฐ•์Šค ๋‚ด์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ setuid ์ƒŒ๋“œ๋ฐ•์Šค ๋˜๋Š” ๋„์šฐ๋ฏธ ์‹คํ–‰ ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .

@thomasnordquist ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €๋Š” ํ˜„์žฌ ์‚ฌ์ „ ๋กœ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Snap/AppImage ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. --no-sandbox ์ธ์ˆ˜๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€/์›๋ž˜ ์ „์ž ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์›๋ž˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ช…๋ช…๋œ ์‚ฌ์ „ ๋กœ๋“œ์™€ ์œ ์‚ฌํ•œ sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ „์ž ๋นŒ๋”์˜ after-pack ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@nornagon ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์ž์— ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? --disable-namespace-sandbox ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ณ„์† ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

:~$ electron --disable-namespace-sandbox
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

์ด๊ฒƒ์ด ๋‚˜๋ฅผ ์ˆœ์‹๊ฐ„์— ๋ฌด๋ ฅํ™”์‹œ์ผฐ๊ณ  ์šฐ๋ฆฌ์˜ ๋ชจ๋“  Linux ์‚ฌ์šฉ์ž๋Š” ๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ด์ „ ๋ฒ„์ „์— ๊ณ ์ •๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์— ์ „์ ์œผ๋กœ ๋™์˜ํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์„ ๋„๋Š” ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์—†์ด ๋ฐฐ์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ทธ๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ ์—†์ด ๋ฐฐ์†ก๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์—์„œ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ --no-sandbox๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์šฐ๋ฐœ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

electron-installer-snap ์ƒŒ๋“œ๋ฐ•์Šค ์ง€์›์„ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋ฅผ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”.

electron-installer-snap์ด ์ƒŒ๋“œ๋ฐ•์Šค ์ง€์›์„ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์—์„œ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋˜ํ•œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด Snap ํŒจํ‚ค์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ํ™•์ธ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธ์ •์ /๋ถ€์ •์  ํ”ผ๋“œ๋ฐฑ ๋ชจ๋‘ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@vladimiry ๋‚˜๋Š” ๊ณ„์†ํ•ด์„œ ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

OS ํŒจ์น˜, sysctl ๋˜๋Š” ์žฌ๋ถ€ํŒ…๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --no-sandbox๊ฐ€ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋‚ด๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€ Snap์„ ์žฌ์ƒ์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ Electron ์•ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. electron-quick-start ํฌํฌ๋ฅผ ์‚ฌ์šฉ

"์ž‘๋™ํ•˜์ง€ ์•Š์Œ"์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒจํ‚ค์ง•ํ•˜๊ธฐ ์œ„ํ•ด electron-installer-snap ์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •ํ™•ํžˆ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@burtonator , ํ…Œ์ŠคํŠธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, --no-sandbox cmd ์ธ์ˆ˜๋กœ ์›๋ž˜ ๋ฐ”์ด๋„ˆ๋ฆฌ/์ „์ž๋ฅผ ์‹œ์ž‘ํ•˜๋Š” Snap/AppImage ๋นŒ๋“œ ๋กœ๋”์™€ ๊ฐ™์€ bash/sh ์Šคํฌ๋ฆฝํŠธ์— ํŒจํ‚ค์ง•๋œ ๊ฒƒ์ด ํ˜„์žฌ๋กœ์„œ๋Š” ์œ ์ผํ•˜๊ฒŒ ํ™•์ธ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@malept ํ•ญ๋ชฉ ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ „์— sudo sysctl kernel.unprivileged_userns_clone=0 ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค OS ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@vladimiry ์˜ˆ, ๋‚ด ๋…ธํŠธ๋ถ์—๋Š” ์ด๋ฏธ ํ•ด๋‹น ์‚ฌ์šฉ์ž ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด @thomasnordquist ์˜ ์†”๋ฃจ์…˜ ๋˜๋Š” ์ด์— ๋Œ€ํ•œ ๋‚ด ์ ์‘ ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. Linux์—์„œ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@fabiospampinato ๊ท€ํ•˜์˜ ์ ์‘์€ ๋ชจ๋“  Linux ํŒจํ‚ค์ง€ ์œ ํ˜•์— ๋Œ€ํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ DEB ๋ฐ Pacman ํŒจํ‚ค์ง€๋Š” SUID ์ƒŒ๋“œ๋ฐ•์Šค(์ปจํ…Œ์ด๋„ˆ์™€ ์œ ์‚ฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํŒจํ‚ค์ง€)์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. SUID ๊ถŒํ•œ ๋น„ํŠธ ๋ฅผ chrome-sandbox ๋กœ ์„ค์ •ํ•˜๊ธฐ ๊ด€๋ จ ์ฝ”๋“œ ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๋Š” Snap/AppImage ํŒจํ‚ค์ง€๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

CONFIG_USER_NS=y๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ sysctl kernel.unprivileged_userns_clone=1์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

sudo sysctl kernel.unprivileged_userns_clone=1 ์ด ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ฉฐ ๊ด€๋ จ ์ฃผ์„ ์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ ์นœ๊ตฌ, ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! @๋ธ”๋ผ๋””๋ฏธ๋ฆฌ

์ง€๊ธˆ 5.0.2์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ?

@p3x-robot ๋ณ€๊ฒฝ ๋กœ๊ทธ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ํ™•์ธํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

@rybaczewa ์‘๋‹ต ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. v4๋„ ๊ณ„์† ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํฐ ๋ฌธ์ œ์ด๋ฏ€๋กœ v5๊ฐ€ ์ž‘๋™ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ciao

v5๊ฐ€ ์ž‘๋™ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

v5๊ฐ€ ์ž‘๋™ ์ค‘์ž…๋‹ˆ๋‹ค

@ p3x -robot

์ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด sudo sysctl kernel.unprivileged_userns_clone=1 ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์„ค๋ช…๋œ ๋Œ€๋กœ chrome_sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@vladimiry @MarshallOfSound๋Š” ์™œ์ด ๊ณ ์ •๋˜์–ด ๋ง์„? Snap์—์„œ ๋‚ด ์•ฑ P3X Redis์™€ P3X Onenote๋ฅผ ๋ชจ๋‘ sudo sysctl kernel.unprivileged_userns_clone=1 ํ•˜๊ฑฐ๋‚˜ chrome_sandbox v5.0.x๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. v4.xx๋กœ๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ sudo ๋ฅผ) ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์•ฑ์„ ์ œ๊ฑฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค..
v5 ๋ฒ„์ „ ๋˜๋Š” v6 ๋˜๋Š” v7์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์€ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค .
image

@p3x-robot snap ์œ„์— ํ‘œ์‹œ๋œ ์ง€์›์€ ์Šค๋ƒ…์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. electron-installer-snap ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ํ•ด๋‹น ๋ชจ๋“ˆ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜์‹ญ์‹œ์˜ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ electron-installer-snap repo ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์ƒŒ๋“œ๋ฐ•์‹ฑ์— ๋Œ€ํ•œ snapcraft ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ˜๋ณตํ•ด์„œ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ, ์ œ๊ฐ€ ํ˜„์žฌ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ˆ˜์ •ํ•  ๋ฒ„๊ทธ๊ฐ€ ์—†์œผ๋ฉฐ Electron์˜ ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด chrome_sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํŒจํ‚ค์ง•ํ•  ๋•Œ ์ง๋ฉดํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

app.enableSandbox()
app.commandLine.appendSwitch('no-sandbox')

์‚ฐ์ถœ:

patrikx3<strong i="9">@bitang</strong>:~/Projects/patrikx3/redis-ui-workspace/redis-ui$ /snap/bin/p3x-redis-ui 
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
[12999:0525/085646.618618:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /snap/p3x-redis-ui/5/chrome-sandbox is owned by root and has mode 4755.
Trace/breakpoint trap (core dumped)
patrikx3<strong i="10">@bitang</strong>:~/Projects/patrikx3/redis-ui-workspace/redis-ui$ 

image

๋‚˜๋Š” ์ด๊ฒƒ์„ app.enableSandbox() ๋กœ ์‹œ๋„ํ•˜์ง€๋งŒ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

Uncaught ReferenceError: require is not defined
    at onload.js:1

์„ ์„ ์ œ๊ฑฐํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@MarshallOfSound ๋‚˜๋Š” electron-builder

์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋„์šฐ๋ฏธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/patrikx3/redis-ui/blob/master/src/build/after-pack.js
electron-builder ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
image

์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋„์šฐ๋ฏธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์€ ์ด๋ฏธ ์ด ๋ฌธ์ œ ํ† ๋ก ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์–ธ๊ธ‰๋˜์—ˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์ „์ž v5๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ์ „์— ์ œ๊ฐ€ ์“ด ์ด์œ ์ž…๋‹ˆ๋‹ค.

@vladimiry ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ typescript ๋Œ€์‹  javascript ๊ธฐ๋ณธ ์†”๋ฃจ์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค...

์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ํŒฉ ํ•ดํ‚น ํ›„ ์ด๊ฒƒ์„ ํ•  ๋•Œ ์ „์ž์˜ ํŒจ๋„ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‘ ๋ฒˆ์งธ ์•„์ด์ฝ˜์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ƒŒ๋“œ ๋ฐ•์Šค๊ฐ€์—†๋Š” ํ”Œ๋ž˜๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜?

--no-sandbox ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
image

@fabiospampinato ๊ท€ํ•˜์˜ ์ ์‘์€ ๋ชจ๋“  Linux ํŒจํ‚ค์ง€ ์œ ํ˜•์— ๋Œ€ํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ DEB ๋ฐ Pacman ํŒจํ‚ค์ง€๋Š” SUID ์ƒŒ๋“œ๋ฐ•์Šค(์ปจํ…Œ์ด๋„ˆ์™€ ์œ ์‚ฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํŒจํ‚ค์ง€)์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. SUID ๊ถŒํ•œ ๋น„ํŠธ ๋ฅผ chrome-sandbox ๋กœ ์„ค์ •ํ•˜๊ธฐ ๊ด€๋ จ ์ฝ”๋“œ ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๋Š” Snap/AppImage ํŒจํ‚ค์ง€๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐœ ๋Œ€์‹  ํ•˜๋‚˜์˜ ์•„์ด์ฝ˜์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@p3x-robot ํ”„๋ฆฌ๋กœ๋”์™€ ๊ฐ™์€ bash/sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ  Snap ์ปจํ…Œ์ด๋„ˆ ์•ฑ์— ํŒจํ‚ค์ง•๋œ --no-sandbox ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • unsquashfs your-snap-file.snap ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋จผ์ € ์Šค๋ƒ…์˜ ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค.
  • ๊ฑฐ๊ธฐ์— ํ•„์š”ํ•œ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ./squashfs-root/command.sh ๋ฅผ ํŽธ์ง‘ํ•˜์‹ญ์‹œ์˜ค.
  • snapcraft pack ./squashfs-root ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ./squashfs-root ํด๋”๋ฅผ ๋‹ค์‹œ ์Šค๋ƒ… ํŒจํ‚ค์ง€๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋„ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์œ ์‚ฌํ•œ ์žฌํŒจํ‚ค์ง• ์ž‘์—…์ด AppImage ํŒจํ‚ค์ง€์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ unpack/pack ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์„ค๋ช…๋œ ๋ฆฌํŒจํ‚ค์ง• ์ž‘์—…์€ afterAllArtifactBuild ์ „์ž ๋นŒ๋”์˜ ํ›„ํฌ์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@vladimiry ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. afterAllArtifactBuild์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ ์ž…๋‹ˆ๋‹ค. ์••์ถ•์„ ํ’€์ง€ ์•Š๊ณ  command.sh๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ๋‚ด์ผ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ•˜๋‚˜๋Š” afterAllArtifactBuild์— ๋Œ€ํ•ด ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.

@p3x-robot afterAllArtifactBuild ํ›„ํฌ๋Š” ์‹ค์ œ๋กœ ์˜ˆ์ƒ๋Œ€๋กœ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” Snap ๋˜๋Š” ๊ธฐํƒ€ ํŒจํ‚ค์ง€ ์œ ํ˜•์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์—์„œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์ฐธ์กฐ snapFile ๋Š” ์—ฌ๊ธฐ์˜ ๊ฒฐ๊ณผ ํŒŒ์ผ์ด๋ฏ€๋กœ ์••์ถ•์„ ํ’€๊ณ / unsquashfs ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  ๋‹ค์‹œ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค/ snapcraft pack . ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ Hunspell ์‚ฌ์ „์„ Snap์˜ ./usr/share/hunspell ํด๋”์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

@vladimiry ๋‚˜๋Š” ์ž‘๋™ํ•˜๋Š” Electron v4๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ๊ณ ์น  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@p3x-robot ์ €๋Š” ์•„์ง๋„ ๊ณ ์น  ๊ฒƒ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@vladimiry ํ™•์‹คํžˆ ๊ณ ์น  ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. :)

Electron v5.0.2๊ฐ€ ์ƒŒ๋“œ๋ฐ•์Šค ๋ฌธ์ œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

v.5.0.0๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. :smile:

์ด๊ฒƒ์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Debian(9)์˜ AppImages์— ๋Œ€ํ•ด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

The setuid sandbox is not running as root. 

๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ •์ •ํ•ด ์ฃผ์ง€๋งŒ (์ฃผ๋กœ ์ด ํ† ๋ก ์—์„œ) ์ด๊ฒƒ์ด Debian์—์„œ ๊ธฐ๋ณธ์  ์œผ๋กœ

๋”ฐ๋ผ์„œ ์ด ์ œ์•ˆ์— ๋Œ€ํ•ด:

  1. Electron์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. setuid ์ƒŒ๋“œ๋ฐ•์Šค ๋Œ€์‹  ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปค๋„์—์„œ ๊ถŒํ•œ ์—†๋Š” CLONE_USERNS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜๊ณ (์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํžŒํŠธ์™€ ํ•จ๊ป˜) .deb ํŒจํ‚ค์ง€๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๊ธฐ ์ „์— ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์••์ถ•์„ ํ’€๊ณ  ๋‹ค์‹œ ์••์ถ•ํ•˜์ง€ ์•Š๊ณ  AppImage์˜ AppRun์— ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์••์ถ•์„ ํ’€๊ณ  ๋‹ค์‹œ ์••์ถ•ํ•˜์ง€ ์•Š๊ณ  AppImage์˜ AppRun์— ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@gcascio ์• ํ”„ํ„ฐ ํŒฉ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๋”์™€ ์œ ์‚ฌํ•œ sh ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ์Šค๋ ˆ๋“œ์—

๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ afterpack ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ƒ์„ฑ๋œ AppRun์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์ ์–ด๋„ appOutDir ์—์„œ๋Š” ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์• ํ”„ํ„ฐํŒฉ์ด ํ˜ธ์ถœ๋˜๋ฉด ์ƒ์„ฑ๋œ AppRun์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋”์™€ ๊ฐ™์€ sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž‘์„ฑํ–ˆ์ง€๋งŒ AppRun ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒจ์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. AppRun ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒจ์น˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•˜์ง€ ์•Š๊ณ ๋Š” ํŒจ์น˜ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งž์•„์š” ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์‹œ ํฌ์žฅํ•ด์„œ ๊ฐ€์•ผ๊ฒ ๋„ค์š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์‹œ ํฌ์žฅํ•ด์„œ ๊ฐ€์•ผ๊ฒ ๋„ค์š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@gcascio ํ…œํ”Œ๋ฆฟ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ.

ia ๋™์ผํ•œ "SUID ์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค" ์˜ค๋ฅ˜์ด์ง€๋งŒ ์„ค์น˜ ํ›„ ์Šค๋ƒ… ํŒŒ์ผ์— ์žˆ์Œ
์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@vladimiry ์ €๋Š” ๋ฐ๋น„์•ˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” http://gitpod.io ๋ผ๋Š” ์˜จ๋ผ์ธ IDE Docker์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. sudo ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— chrome-sandbox ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ผ๋ฐ˜์ ์ธ ํ†ค์€ ์ด๊ฒƒ์ด Chrome ๋ฌธ์ œ์ด์ง€ Electron ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Electron์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์€ ์ผ์ด ์•„๋‹๊นŒ์š”?

์ด ์‚ฌ์ดํŠธ https://www.gitpod.io/blog/gitpodify/ ์—์„œ ์ปจํ…Œ์ด๋„ˆ์—์„œ Puppeteer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});

์ƒŒ๋“œ๋ฐ•์Šค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Electron์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ด์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด bash ํŒŒ์ผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ƒŒ๋“œ๋ฐ•์Šค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Electron์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ด์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด bash ํŒŒ์ผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ž ์•ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ์— --no-sandbox ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ ํŒจํ‚ค์ง€์— ๋”ฐ๋ผ SUID ๊ถŒํ•œ ๋น„ํŠธ(4755)๋ฅผ chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ(deb, pacman ๋“ฑ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ)๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ --no-sandbox ์ธ์ˆ˜๋ฅผ ๋กœ๋” sh/bash ์Šคํฌ๋ฆฝํŠธ์— ํ•˜๋“œ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Snap ๋ฐ AppImage์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ). ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ํ˜„์žฌ ํ•˜๋Š” ์ผ์ด๋ฏ€๋กœ ์•ฑ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(sudo ์•ก์„ธ์Šค ํ•„์š” ์—†์Œ).

์ตœ๊ทผ ์ „์ž ๋นŒ๋” ๋ฆด๋ฆฌ์Šค์—๋Š” ์ด๋ฏธ --no-sandbox ์ธ์ˆ˜๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์ง€๋งŒ Snap ํŒจํ‚ค์ง€์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

@vladimiry electron --no-sandbox ๋•๋ถ„์— ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. SNAP๋„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ์ „์ž ๋นŒ๋”๊ฐ€ ์žˆ์ง€๋งŒ AppImage๊ฐ€ ์—ฌ์ „ํžˆ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

์ „์ž 6์ด ์ƒŒ๋“œ๋ฐ•์Šค ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ v4์— ์žˆ์Šต๋‹ˆ๋‹ค. 5 ๋˜๋Š” 6๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Electron v5๋Š” Linux์—์„œ ํ˜ผํ•ฉ ๋ชจ๋“œ ์ƒŒ๋“œ๋ฐ•์‹ฑ(์ฆ‰, ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒŒ๋“œ๋ฐ•์‹ฑ๋˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒŒ๋“œ๋ฐ•์‹ฑ๋˜์ง€ ์•Š์Œ)์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์ง€๋งŒ GPU ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด์ œ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • Linux์˜ Chromium ์ƒŒ๋“œ๋ฐ•์Šค๋Š” CLONE_NEWUSER ๋ผ๋Š” OS ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปค๋„์€ ๋งŽ์€ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋œ ์ด ๊ธฐ๋Šฅ์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ [lwn, 2016]
  • CLONE_NEWUSER ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ Chromium์€ setuid๊ฐ€ root์ธ ๋„์šฐ๋ฏธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์ƒŒ๋“œ๋ฐ•์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ( 4755 _root๊ฐ€ ์†Œ์œ ) ์ƒŒ๋“œ๋ฐ•์Šค๋Š” ๋ถ€ํŒ…์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • ๋„์šฐ๋ฏธ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ถŒํ•œ ์„ค์ •์€ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(์˜ˆ: ๋ฃจํŠธ)๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. npm install ๋™์•ˆ ๋ฃจํŠธ ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— npm install ์— ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Electron v5 ๋ฆด๋ฆฌ์Šค ํŒจํ‚ค์ง€์—๋Š” ๋„์šฐ๋ฏธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ๊ณผ ์†Œ์œ ๊ถŒ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง• ๋ฐ ๋ฐฐํฌ ๋„๊ตฌ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ปค๋„์—์„œ CLONE_NEWUSER ์— ๋Œ€ํ•œ ๊ถŒํ•œ ์—†๋Š” ์•ก์„ธ์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปค๋„์€ sysctl kernel.unprivileged_userns_clone=1 ๋ณ€๊ฒฝ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  2. --no-sandbox ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค. ์ฃผ ํ”„๋กœ์„ธ์Šค JS๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— GPU ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ JS์—์„œ ์ด ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์กฐ๊ฑด์ด ๊ฐ์ง€๋˜๋ฉด Electron์—์„œ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ถ„์‚ฐ ํŒจํ‚ค์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋„๊ตฌ(์ตœ์†Œํ•œ electron-builder, electron-installer-snap, electron-installer-debian ๋ฐ electron-installer-redhat)๋Š” ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ง€์›ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž์˜ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋„๊ตฌ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ณ  ์ด ์˜๊ฒฌ์— ๋งํฌํ•˜์‹ญ์‹œ์˜ค.

์ด์ „ ๋‹จ๋ฝ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋‹ฌ๋ฆฌ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํ”„๋กœ๋•์…˜์˜ Electron์ด ์ž‘๋™ํ•˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•œ๋‹ค๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„์‚ฐ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ npm install ๋ฅผ ํ†ตํ•ด Electron์„ ์„ค์น˜ํ•  ๋•Œ ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์•„๋‹Œ ๋ชจ๋“œ๋กœ ์ž๋™ ์ €ํ•˜๋˜๋Š” ์˜ต์…˜์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด #19550์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

@p3x-robot ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 2์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์˜ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @vladimiry ์—์„œ ์˜๊ฐ์„ ์–ป์€ @nornagon์ด ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@gcascio ํ•˜์ง€๋งŒ ์Šค๋ƒ… ํ•ต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ „์ž ๋นŒ๋”์—์„œ ์Šค๋ƒ…์ด ์ž‘๋™ํ•˜๋ฏ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@gcascio ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค, ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํšจ๊ณผ๊ฐ€์žˆ๋‹ค!

@gcascio no workie, 2๊ฐœ์˜ ์•„์ด์ฝ˜์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์ „์ž v4.2.8๋กœ ๋˜๋Œ์•„๊ฐ”์Šต๋‹ˆ๋‹ค... :(

@p3x-robot ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ ์‹œ๊ฐ„์„ ์ฐพ๋Š” ๋Œ€๋กœ ์ฆ‰์‹œ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@nornagon ๊ทธ๋ž˜์„œ Debian์—์„œ Electron 6์„ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์—†๊ณ  ํฌ๋กฌ ํ”„๋กœ์„ธ์Šค ๋ฃจํŠธ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋ฐฉ๋ฒ•๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณต๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ปค๋„์—์„œ CLONE_NEWUSER์— ๋Œ€ํ•œ ๊ถŒํ•œ ์—†๋Š” ์•ก์„ธ์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปค๋„์€ sysctl kernel.unprivileged_userns_clone=1๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๋ฐฉ๋ฒ•์€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

--no-sandbox๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ ํ”„๋กœ์„ธ์Šค JS๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— GPU ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ JS์—์„œ ์ด ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--sandbox ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์Šค ๊ธฐ๋Šฅ์„ ๋„๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ Electron์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ 99%๋ฅผ ๋ง์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ณต๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--no-sandbox ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ๋”์™€ ์œ ์‚ฌํ•œ ์Šคํฌ๋ฆฝํŠธ/ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ตœ์ข… ์‚ฌ์šฉ์ž ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ๋” ์™ธ์—๋„ user namespace ์ง€์›์„ ๋จผ์ € ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ --no-sandbox ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ setuid ๋ฃจํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” @pronebird ๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด Electron์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค: _๋‹น์‹ ์€_ Electron ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์„œ๋ช…). ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์›น์—์„œ URL๋กœ ์ด๋™ํ•˜์—ฌ ์˜๋„์ ์œผ๋กœ ๊ฐ€๋Šฅ) ์•ฑ์€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด๋„ ์‚ฌ์šฉ์ž์˜ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์•„ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ์‹คํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Chrome์ด ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ์ƒŒ๋“œ๋ฐ•์‹ฑ ์‹œ์Šคํ…œ์˜ ๋ฒ„๊ทธ๋ฅผ ์•…์šฉํ•˜๋Š” ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๊ฒƒ๋ณด๋‹ค ์•ฑ์˜ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” JS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ฐฉ์–ด์— ํ›จ์”ฌ ๋” ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ํ›„์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด _๋งค์šฐ ๋นจ๋ฆฌ_ ์ˆ˜์ •๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.) chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ฐ์‚ฌํ•˜๋ ค๋ฉด https://chromium.googlesource์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

Electron ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด snapcraft ๋˜๋Š” flatpak, ํŒจํ‚ค์ง€์—๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— Electron์˜ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@nornagon

chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ setuid ๋ฃจํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด Electron์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค: Electron ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ท€ํ•˜์ด๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์„œ๋ช…). ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์›น์—์„œ URL๋กœ ์ด๋™ํ•˜์—ฌ ์˜๋„์ ์œผ๋กœ ๊ฐ€๋Šฅ) ์•ฑ์€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด๋„ ์‚ฌ์šฉ์ž์˜ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์•„ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ์‹คํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Chrome์ด ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ์ƒŒ๋“œ๋ฐ•์‹ฑ ์‹œ์Šคํ…œ์˜ ๋ฒ„๊ทธ๋ฅผ ์•…์šฉํ•˜๋Š” ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๊ฒƒ๋ณด๋‹ค ์•ฑ์˜ ์ƒŒ๋“œ๋ฐ•์Šค ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” JS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ฐฉ์–ด์— ํ›จ์”ฌ ๋” ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ํ›„์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ๋งค์šฐ ๋นจ๋ฆฌ ์ˆ˜์ •๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.)

๋ฌผ๋ก , ํ•˜์ง€๋งŒ ์›๊ฒฉ ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๋Š” ์•ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๊ฒƒ์ด Electron์˜ ๊ฒฝ์šฐ์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์›น ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์›น์—์„œ JSON์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Safari๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์›น ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์›น์‚ฌ์ดํŠธ๋ฅผ ํฐ ๊ฐญ์œผ๋กœ ๊ฐ์‹ธ๋˜ ์‹œ๋Œ€๋Š” ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„์š”. ์˜ค๋Š˜ ์šฐ๋ฆฌ ์•ฑ์— ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ  ๋ฐฐํฌํŒ์—์„œ chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ 5๋ฉ”๊ฐ€์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ electron-builder ๋Š” ์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ฐ์‚ฌํ•˜๋ ค๋ฉด https://chromium.googlesource.com/chromium/src/+/refs/heads/master/sandbox/linux/suid/sandbox์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๊ฐ์‚ฌ ํ•ด์š”. ์‹ค์ œ๋กœ ์œ„ํ˜‘ ๋ชจ๋ธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ Google์„ ์‹คํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

์™„์ „ํžˆ ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „์ž ๋นŒ๋“œ๊ฐ€ npm์„ ํ†ตํ•ด ๋ฐฐ์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์†Œ์Šค๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Electron์šฉ ์ปค์Šคํ…€ ๋นŒ๋“œ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์†Œ์Šค๋ฅผ ์ง์ ‘ ๊ฐ์‚ฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—„์ฒญ๋‚œ ๋…ธ๋ ฅ์ด ๋  ๊ฒƒ์ด๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@pronebird ์ƒŒ๋“œ๋ฐ•์Šค ๋…ผ์˜์— ๋„ˆ๋ฌด ๊ด€์—ฌํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์ œ ์ž…์žฅ์€ ํ˜„์žฌ์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™„์ „ํžˆ ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „์ž ๋นŒ๋“œ๊ฐ€ npm์„ ํ†ตํ•ด ๋ฐฐ์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์†Œ์Šค๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ทผ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ž ๋นŒ๋“œ๋Š” npm์„ ํ†ตํ•ด ๋ฐฐ์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. npm์˜ electron ํŒจํ‚ค์ง€๋Š” ์‹ค์ œ๋กœ ์•ฝ 2๊ฐœ์˜ ํŒŒ์ผ๊ณผ ~40์ค„์˜ JS์ž…๋‹ˆ๋‹ค. ์‹ค์ œ Electron ๋นŒ๋“œ๋Š” S3๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋ฉฐ S3์—๋„ ์ฒดํฌ์„ฌ์ด ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์šด๋กœ๋“œ ์ค‘์ธ ๋นŒ๋“œ๊ฐ€ ์‹ค์ œ๋กœ Electron์ด ๋ฐฐ์†กํ•œ ๋นŒ๋“œ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MarshallOfSound

์ด๊ฒƒ์€ ๊ทผ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ž ๋นŒ๋“œ๋Š” npm์„ ํ†ตํ•ด ๋ฐฐ์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. npm์˜ ์ „์ž ํŒจํ‚ค์ง€๋Š” ์‹ค์ œ๋กœ ์•ฝ 2๊ฐœ์˜ ํŒŒ์ผ๊ณผ ~40์ค„์˜ JS์ž…๋‹ˆ๋‹ค. ์‹ค์ œ Electron ๋นŒ๋“œ๋Š” S3๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋ฉฐ S3์—๋„ ์ฒดํฌ์„ฌ์ด ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์šด๋กœ๋“œ ์ค‘์ธ ๋นŒ๋“œ๊ฐ€ ์‹ค์ œ๋กœ Electron์ด ๋ฐฐ์†กํ•œ ๋นŒ๋“œ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ง์€ ๋นŒ๋“œ๊ฐ€ npm install ๋‹จ๊ณ„์—์„œ ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ npm์—์„œ ํ˜ธ์ŠคํŒ…๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. S3์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•ด ๋ณด์ง€๋งŒ ์ฒดํฌ์„ฌ์€ ๋™์ผํ•œ S3์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋ฉฐ, ์ด๋Š” ๊ทธ๋Ÿฌํ•œ ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ๋“ฑ๊ธ‰์„ ๋‚ฎ์ถ”๊ณ  ํ•œ์ชฝ ๋‹ค๋ฆฌ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ํ•ต์‹ฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ฒดํฌ์„ฌ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ด์ œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๋‚ด ์ชฝ์˜ ์œ„ํ—˜ ๋ฐ ์†์ƒ ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ์—†์Œ = ์ •๋ง ๋‚˜์œ ์ผ์ด ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

@pronebird chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ™•์‹คํžˆ 5MB๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด #20049๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Chromium์˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ app.commandLine.appendSwitch ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ๋ช…๋ น์ค„์—์„œ ์ง์ ‘ --no-sandbox ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ ์—†์ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #20049๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ์ œ๊ฑฐ์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ๊ฐœ์„ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 200KB์˜ ์ถ”๊ฐ€ ์šฉ๋Ÿ‰์ด 5MB๋ณด๋‹ค ํ›จ์”ฌ ๋” ํ•ฉ๋ฆฌ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด node_modules/ ํด๋”์— ์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์— suid ๋ฃจํŠธ ๋น„ํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์˜ˆ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

@gardner ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ์— ์žˆ์„ ๋•Œ ์ผ์ข…์˜ ์‰ฌ์šด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ธ --no-sandbox arg๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VSCode๋Š” ์ตœ๊ทผ Electron 6์œผ๋กœ ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ --no-sandbox ์˜ต์…˜์ด ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด VSCode๊ฐ€ ๋” ์ด์ƒ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ณด๊ณ ๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋ฐฉํ–ฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฐธ์กฐ: https://github.com/microsoft/vscode/issues/81056

snap์€ ์ด์ œ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. appimage์˜ ๊ฒฝ์šฐ ํ•˜๋“œ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/electron-userland/electron-builder/issues/3872#issuecomment -517875676

๋‚˜๋จธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๊ณ  NPM, AppImage ๋ฐ SNAP๋งŒ ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค...

๊ธฐ๋ณธ์ ์œผ๋กœ ๋Ÿฐ์ฒ˜ ์Šคํฌ๋ฆฝํŠธ์— ์ธ์ˆ˜( --no-sandbox )๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ชจ๋“  ์œ ํ˜•์˜ ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Electron 6์—๋Š” ์†”๋ฃจ์…˜์ด ์—†์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ • ๋˜๋Š” ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค...

๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด. ์ „์ž cli ๋„๊ตฌ ๋‚ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…๋ น์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo chown root pathToChromeSandboxDynamicallyGenearted && sudo chmod 4755 pathToChromeSandboxDynamicallyGenearted

์ „์ž --ConfigSandbox์™€ ๊ฐ™์€ ๋ช…๋ น.
์‚ฌ์šฉ์ž๋Š” ์ด๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์ด ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ณ  ์‹ถ์€์ง€ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. y ๋˜๋Š” n. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ํ•œ ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ํฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ด๋ฉฐ ์ œ๋•Œ ์Šน๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณต๊ธ‰์—…์ฒด๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•จ๊ป˜ ๊ฐ€์‹ญ์‹œ์˜ค. ์ธํ„ฐ๋„ท ์ „์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋Œ€์‹ . ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ดˆ๋ณด์ž๋“ค์—๊ฒŒ ํ›จ์”ฌ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์ง€๋งŒ ์ „์ž 7.0.0์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •์œผ๋กœ ์ด์–ด์ง„ ์ปค๋ฐ‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? v7.0.0์—์„œ๋„ ์—ฌ์ „ํžˆ ์ง€์†๋˜๋ฏ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•ฑ ํŒจํ‚ค์ง•์˜ ๋ฌธ์ œ์ง€๋งŒ Electron์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•„, ์•Œ์•˜์–ด. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ๋…ผ์˜๋œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

sudo sysctl kernel.unprivileged_userns_clone=1

WSL ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ (WSL์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์Œ) WSL 1์€ ์‹ค์ œ Linux ์ปค๋„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WSL2 ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ฐธ์กฐ: https://askubuntu.com/questions/1145525/how-to-create-proc-sys-kernel-unprivileged-userns-clone-file

CONFIG_USER_NS=y๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ sysctl kernel.unprivileged_userns_clone=1์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

sudo sysctl kernel.unprivileged_userns_clone=1 ์ด ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ฉฐ ๊ด€๋ จ ์ฃผ์„ ์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, manjaro์™€ i3wm์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋” ์ด์ƒ ๋ฃจํŠธ ์•ก์„ธ์Šค ์—†์ด Electron ์•ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ๋น„์•ˆ์—๋งŒ ํ•ด๋‹น๋œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋ฉ”์ธ๋ผ์ธ ์ปค๋„์ด ๊ถŒํ•œ์ด ์—†๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋Œ€๋‹ดํ•จ์„ ์šฉ์„œํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ๋ฏธ์นœ ์ง“์ž…๋‹ˆ๋‹ค. Electron์€ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ Node.js API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Electron ์•ฑ์—์„œ Chromium์˜ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉ/ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ๋ฌด์˜๋ฏธํ•˜๋ฉฐ, ์ด ๋ฌธ์ œ๋ฅผ ์ง€์ ํ•˜๋Š” GitHub์˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋˜ํ•œ ๋งค์šฐ ๋น„์ƒ์‚ฐ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.

Electron์€ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ Node.js API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

nodeIntegration ์˜ต์…˜์€ v5๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ๋น„์•ˆ์—๋งŒ ํ•ด๋‹น๋œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋ฉ”์ธ๋ผ์ธ ์ปค๋„์ด ๊ถŒํ•œ์ด ์—†๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ๋น„์•ˆ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋‚ด ์ปดํ“จํ„ฐ์— ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์šด์ด ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ž ์•ฑ(AppImage๋กœ ๋˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Œ) ์—†์ด

a) sudo , ๋˜๋Š”
b) ๊ถŒํ•œ์ด ์—†๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋„๋ก sudo ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์„ ์„ค๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@black-puppydog ๊ธ€์Ž„์š”. ์†Œ์Šค์—์„œ ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ --no-sandbox ์ธ์ˆ˜๋ฅผ ์ „์ž์— ์ „๋‹ฌํ•˜๋„๋ก ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ํšจ๊ณผ๋กœ AppImage๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์••์ถ•์„ ํ’€๊ณ  ๋‹ค์‹œ ํฌ์žฅํ•˜์—ฌ). ํ•˜์ง€๋งŒ ์ง์ ‘ ์‹œ๋„ํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ถ€ AppImage ์ œ์ž‘์ž๊ฐ€ ๋นŒ๋“œ์— ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŠน์ • ์ด๋ฏธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹น์‹ ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ธ๋ผ์ธ ์ปค๋„์—๋Š” ํ•ญ์ƒ ๋น„ํŠน๊ถŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์ด ๋ฐ๋น„์•ˆ์—์„œ๋งŒ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

@black-puppydog ๋‚ด ๊ธฐ์–ต์— ๋”ฐ๋ฅด๋ฉด, ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์— ๋ฐ๋น„์•ˆ์„ ์ฒ˜์Œ ์„ค์น˜ํ•  ๋•Œ ๋ฃจํŠธ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ, Debian(๋˜๋Š” Debian์˜ ์ปค๋„ ํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ)์—์„œ๋Š” ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( sudo ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด). ๋˜๋Š” --no-sandbox Electron ์•ฑ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@ndorf ๋ฉ”์ธ๋ผ์ธ Linux์—์„œ ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๊ธฐ๋Šฅ์„ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋Ÿฐํƒ€์ž„์— ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๊ถŒํ•œ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ๋งŒ ์ œํ•œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๊ถŒํ•œ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ์ œํ•œ๋˜๋„๋ก ์ปค๋„์„ ํŒจ์น˜ํ•˜์ง€๋งŒ /proc/sys ์•„๋ž˜์˜ ์„ค์ •์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Debian์ด ์ด๋ฅผ ์ œํ•œํ•˜๋Š” ์ด์œ ๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์˜ค๋žœ ์ทจ์•ฝ์ ์˜ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์œ„ํ—˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ๊ถŒํ•œ์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ์ œํ•œ๋œ ๋งŽ์€ ์ปค๋„ ๊ธฐ๋Šฅ(UID 0, ๊ธฐ๋Šฅ, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ, ์žฅ์น˜ inode ์ƒ์„ฑ ๋“ฑ)์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด์—†๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋Ÿฌํ•œ ์ผ์„ ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  ์ปค๋„ ์ฝ”๋“œ๋Š” ๊ถŒํ•œ์ด์—†๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ด๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ง€๊ธˆ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  Linux ๋ฐฐํฌํŒ์ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์›๋ณธ ๋ฉ”์‹œ์ง€ ๋ณด๊ธฐ:

ํŒŒ์ผ์„ chown ๋ฐ chmodํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ #16631 (์ฃผ์„)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค chrome-sandbox ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

* `sudo chown root chrome-sandbox`

* `chmod 4755 chrome-sandbox`

appimage/snap ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•„์ง ๊ณต๊ฐœํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋” ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค. --no-sandbox argumentsmnt๋กœ appimage๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ํ•ดํ‚น์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง•๋˜์ง€ ์•Š์€ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. chrome-sandbox ์˜ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•œ ํ›„ ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๊นŒ?

@shrinidhi111 4755๋Š” ์ ์–ด๋„ pacman/deb ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง•ํ•  ๋•Œ ๋ณด์กด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋Š” ํŠน์ • ๊ฑฐ๋ฆฌ ์ˆ˜์ค€์—์„œ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค( ์˜ˆ: . ๋ฃจํŠธ ์†Œ์œ ์ž์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ Linux์˜ ์ €์žฅ์†Œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ด€๋ จ ํŒŒ์ผ์ด ๋ฃจํŠธ ์†Œ์œ ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. AppImage ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ์ „์ž ๋นŒ๋” ๊ฐ€ ์•„์ง ์ƒ์ž์—์„œ ๊บผ๋‚ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ AppRun ์Šคํฌ๋ฆฝํŠธ์— --no-sandbox arg๋ฅผ ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•˜๊ณ  ํ•˜๋“œ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. Snap ํŒจํ‚ค์ง€๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ --no-sandbox arg(๊ด€๋ จ ์ˆ˜์ • ์‚ฌํ•ญ์ด ~6๊ฐœ์›” ์ „์— ์ถ”๊ฐ€๋จ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ž ๋นŒ๋”์— ์˜ํ•ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

@shrinidhi111 4755๋Š” ์ ์–ด๋„ pacman/dev ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง•ํ•  ๋•Œ ๋ณด์กด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋Š” ํŠน์ • ๊ฑฐ๋ฆฌ ์ˆ˜์ค€์—์„œ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค( ์˜ˆ: . ๋ฃจํŠธ ์†Œ์œ ์ž์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ Linux์˜ ์ €์žฅ์†Œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ด€๋ จ ํŒŒ์ผ์ด ๋ฃจํŠธ ์†Œ์œ ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. AppImage ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ์ „์ž ๋นŒ๋” ๊ฐ€ ์•„์ง ์ƒ์ž์—์„œ ๊บผ๋‚ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ AppRun ์Šคํฌ๋ฆฝํŠธ์— --no-sandbox arg๋ฅผ ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•˜๊ณ  ํ•˜๋“œ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. Snap ํŒจํ‚ค์ง€๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ --no-sandbox arg(๊ด€๋ จ ์ˆ˜์ • ์‚ฌํ•ญ์ด ~6๊ฐœ์›” ์ „์— ์ถ”๊ฐ€๋จ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ž ๋นŒ๋”์— ์˜ํ•ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์Šค๋ƒ… ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์•„์ด๋””์–ด์˜€์œผ๋ฉฐ ๋งŽ์€ ์ž‘์—…์„ ์ ˆ์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ์•„์ง๋„ ๋ฏธํ•ด๊ฒฐ

์Šค๋ƒ…์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. appimage์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์ž์ฒด ๋นŒ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๊ธธ๋ฉฐ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ƒํ™ฉ ์š”์•ฝ์ด ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ๊ทธ๋Ÿฌํ•œ ์š”์•ฝ์€ ์˜ค๋ฅ˜์—์„œ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/electron/electron/issues/17972#issuecomment -495767027 ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ณ  ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ๋งŒ ์ „์ž ๊ธฐ๋Šฅ์„ ์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์ž˜๋ชป๋œ ๊ถŒํ•œ ์„ค์ •์„ ๊ฐ์ง€ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋Š” ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฃจํŠธ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ž๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ์—ˆ์œผ๋ฉด ํ•˜๊ณ , ํ‰์†Œ๋ณด๋‹ค ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ์œ„ํ—˜ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฃจํŠธ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ž๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ

--no-sandbox CLI ์ธ์ˆ˜.

vladimiry, ์˜ˆ๋ฅผ ๋“ค์–ด ํ„ฐ๋ฏธ๋„ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์€ ์ตœ์ข… ์‚ฌ์šฉ์ž ๋˜๋Š” ์ „์ž๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ„ฐ๋ฏธ๋„ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์€ ์ตœ์ข… ์‚ฌ์šฉ์ž ๋˜๋Š” ์ „์ž๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น --no-sandbox ๋ฅผ ์•ฑ ๋ฐ”๋กœ ๊ฐ€๊ธฐ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  Linux ํŒจํ‚ค์ง€๋Š” kernel.unprivileged_userns_clone ์‹œ์Šคํ…œ ๊ฐ’์— ๊ด€๊ณ„์—†์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํŒจํ‚ค์ง•ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์ž์ด๊ณ  ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ๊ฒฝ๊ณ ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ฐฐ์šฐ์ง€ ์•Š์„๊นŒ์š”? ๋˜ํ•œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ์œ„ํ—˜ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ด€๊ณ„์ž์—๊ฒŒ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ์กด ์†”๋ฃจ์…˜์ด ์ œ์ž๋ฆฌ์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋„ ๊ฑฑ์ •์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์€ WSL ๋•Œ๋ฌธ์— ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

WSL(์ œ ๊ฒฝ์šฐ์—๋Š” WSL2)์—์„œ electron ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋™์•ˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
X11 ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ „์ž๋Š” X11์„ ํ†ตํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

WSL ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๋”๋ผ๋„ Windows์šฉ ์ „์ž๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์™ธ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ „์ž ์ œ๊ฑฐ npm uninstall electron
  • npm ๊ตฌ์„ฑ ํ”Œ๋žซํผ ๋ณ€๊ฒฝ export npm_config_platform=win32
  • ์ „์ž ์„ค์น˜ npm install electron
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ unset npm_config_platform ์„ค์ • ํ•ด์ œ

์ด ์ œ์•ˆ sysctl kernel.unprivileged_userns_clone=1

WSL(Windows 10), WSL์— ์„ค์น˜๋œ Ubuntu 18.04์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
sudo sysctl kernel.unprivileged_userns_clone=1 ์ด(๊ฐ€) ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

sudo sysctl kernel.unprivileged_userns_clone=1
sysctl: cannot stat /proc/sys/kernel/unprivileged_userns_clone: No such file or directory

chown ๋ฐ chmod๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

@MarshallOfSound zip์€ ๊ถŒํ•œ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ๋ฌธ์ œ๋Š” chmod ๊ถŒํ•œ์ด ์•„๋‹ˆ๋ผ ์†Œ์œ ์ž์ž…๋‹ˆ๋‹ค. setuid ์ƒŒ๋“œ๋ฐ•์Šค ๋„์šฐ๋ฏธ๋Š” ๋ฃจํŠธ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— suid _to root_์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ๊ถŒํ•œ์„ ๋จผ์ € ์–ป์ง€ ์•Š๊ณ  ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋Š” Linux์—์„œ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Linux์—๊ฒŒ๋Š” ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

zip _does_๋Š” ์œ ๋‹‰์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ(๋˜๋Š” ์ ์–ด๋„ ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•œ Linux ๋ณ€ํ˜•)์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. https://serverfault.com/a/585889/17620 ์ฐธ์กฐ

๊ถŒํ•œ ๋น„ํŠธ๋Š” zip์˜ ์ค‘์•™ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ํ—ค๋” ์ ‘๋ฏธ์‚ฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ ‘๋ฏธ์‚ฌ์˜ externalFileAttributes ํ•„๋“œ๋Š” ๊ฐ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋น„ํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cc @MarshallOfSound

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค !

[gxz<strong i="6">@localhost</strong> build]$ ./Electron-0.1.1.AppImage 
[23154:0521/155029.728314:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.mount-E0wZecV/chrome-sandbox is owned by root and has mode 4755.
Trace/breakpoint trap(ๅๆ ธ)
[gxz<strong i="7">@localhost</strong> build]$ sudo ./Electron-0.1.1.AppImage 
[sudo] gxz ็š„ๅฏ†็ ๏ผš
[23191:0521/155048.067790:FATAL:electron_main_delegate.cc(211)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Trace/breakpoint trap
[gxz<strong i="8">@localhost</strong> build]$ 

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰, ์˜ค๋ฅ˜: FATAL:setuid_sandbox_host.cc(157)] .root๋กœ ์‹คํ–‰, ์˜ค๋ฅ˜: FATAL:electron_main_delegate.cc(211)]

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ yum ํ›„์— ์Šค๋ƒ…์„ ์„ค์น˜ํ•  ๋•Œ, ๋ฃจํŠธ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.ใ€‚

sudo chown root chrome-sandbox
sudo chmod 4755 chrome-sandbox

์ด๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@cuixiping ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :+1:

๋‚˜๋Š” ํ–ˆ๋‹ค

$ find . -name chrome-sandbox
./node_modules/electron/dist/chrome-sandbox

$ sudo chown root ./node_modules/electron/dist/chrome-sandbox

$ sudo chmod 4755 ./node_modules/electron/dist/chrome-sandbox

Deepin์—์„œ ์ „์ž๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด ์ฝ”๋“œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
electron . --no-sandbox

๋‹น์‹ ์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

@fabiospampinato ๊ท€ํ•˜์˜ ์ ์‘์€ ๋ชจ๋“  Linux ํŒจํ‚ค์ง€ ์œ ํ˜•์— ๋Œ€ํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ DEB ๋ฐ Pacman ํŒจํ‚ค์ง€๋Š” SUID ์ƒŒ๋“œ๋ฐ•์Šค(์ปจํ…Œ์ด๋„ˆ์™€ ์œ ์‚ฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํŒจํ‚ค์ง€)์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. SUID ๊ถŒํ•œ ๋น„ํŠธ ๋ฅผ chrome-sandbox ๋กœ ์„ค์ •ํ•˜๊ธฐ ๊ด€๋ จ ์ฝ”๋“œ ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๋Š” Snap/AppImage ํŒจํ‚ค์ง€๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @vladimiry
์—ฌ๊ธฐ์— ์ฒจ๋ถ€ํ•œ ๋งํฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„์™€์ค„ ์ˆ˜ ์žˆ๋‹ˆ?
๋˜ํ•œ ์ „์ž ๋นŒ๋” ์• ํ”„ํ„ฐ ํŒฉ ์Šคํฌ๋ฆฝํŠธ์—์„œ --no-sandbox๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”

@tushar-compro, ์—ฌ๊ธฐ https://github.com/vladimiry/ElectronMail/tree/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/hooks/afterPack์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ถ€ ํŒจํ‚ค์ง€ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ์• ํ”„ํ„ฐํŒฉ ์Šคํฌ๋ฆฝํŠธ์—์„œ 4755๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์—ฌ์ „ํžˆ appimage+snap ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ electron-builder๋Š” ์ด๋ฏธ --no-sandbox arg๋ฅผ snap์— ํฌํ•จํ–ˆ์ง€๋งŒ ์•„์ง appimage https://github.com/electron-userland/electron-builder/pull/4496 ์—๋Š” ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค https://github.com/electron-userland/electron-builder/blob/fc85a42a26df863b5bade4b769182b299ff24e0a/packages/app-builder-lib/templates/linux/after-install.tpl #L7. ๋”ฐ๋ผ์„œ ์ตœ์‹  ์ „์ž ๋นŒ๋” ๋ฒ„์ „์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@๋ธ”๋ผ๋””๋ฏธ๋ฆฌ
๋ฐ”๋กœ ๋‹น์‹ ์ด ๋ชฉํ‘œ๋ฅผ์œ„ํ•œ 4755 ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ์˜ appimage์„ ์„ค์ •ํ•˜๊ณ  ์Šค๋ƒ… ๊ฒƒ์„ ์ดํ•ด I๋ฅผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/hooks/afterPack/index.ts#L17

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ๋น„์•ˆ ๋ฐฐํฌํŒ์—์„œ .appimage ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ๋น„์•ˆ ๋ฐฐํฌํŒ์—์„œ .appimage ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด appimage๋Š” ์—ฌ์ „ํžˆ ํŠน๋ณ„ํ•œ ๋Œ€์šฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•˜๊ณ  --no-sandbox ๋ฅผ ./AppRun ์Šคํฌ๋ฆฝํŠธ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. https://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/build-appimage.ts ์—์„œ DISABLE_SANDBOX_ARGS_LINE ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค .

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ๋น„์•ˆ ๋ฐฐํฌํŒ์—์„œ .appimage ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด appimage๋Š” ์—ฌ์ „ํžˆ ํŠน๋ณ„ํ•œ ๋Œ€์šฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•˜๊ณ  --no-sandbox ๋ฅผ ./AppRun ์Šคํฌ๋ฆฝํŠธ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. https://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/build-appimage.ts ์—์„œ DISABLE_SANDBOX_ARGS_LINE ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค .

์ตœ์‹  ์ „์ž ๋นŒ๋”๋Š” snap๊ณผ appimage ๋ชจ๋‘์—์„œ ์ž๋™์œผ๋กœ no sanbox ์ธ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@๋ธ”๋ผ๋””๋ฏธ๋ฆฌ
๊ทธ๋ž˜์„œ, ๋‹น์‹ ์ด ํ•œ 4755 ๋น„ํŠธ ์„ค์ •์ด appimage ๋ฐ snap ์ด์™ธ์˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„์œ„ํ•œ ๊ฒƒ์ž„์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  appimage์˜ ๊ฒฝ์šฐ no-sandbox๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@p3x-๋กœ๋ด‡
์˜ˆ. ๋‹น์‹ ์€ ๋ถ€๋ถ„์ ์œผ๋กœ ๋งž์Šต๋‹ˆ๋‹ค.

  1. ์ตœ์‹  ์ „์ž ๋นŒ๋”๋Š” ์Šค๋ƒ…์šฉ์œผ๋กœ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์ง€๋งŒ ์•ฑ ์ด๋ฏธ์ง€์šฉ์€ ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ appimage์— 4755 ๋น„ํŠธ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์ „์ž ๋ฒ„์ „ 20.xx๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 22.xx๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋…ธ๋ ฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ํ”ผํ•˜๋ ค๊ณ ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. v22๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์ตœํ›„์˜ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

์ตœ์‹  ์ „์ž ๋นŒ๋”๋Š” snap๊ณผ appimage ๋ชจ๋‘์—์„œ ์ž๋™์œผ๋กœ no sanbox ์ธ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์ฝ”๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ appimage ๋ณ„๊ณผ ์œ ์‚ฌํ•œ ์Šค ๋‹ˆํŽซ ์ด (์—ฌ์ „ํžˆ ์—ด๋ ค https://github.com/electron-userland/electron-builder/pull/4496) ์Šค๋ƒ… ์ ์šฉ ํ•˜๋‚˜. ์–ด์จŒ๋“  ์ œ ๊ฒฝ์šฐ์—๋Š” sanbox ๊ด€๋ จ ์ด์™ธ์˜ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์žฌํฌ์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๋‹น์‹ ์ด ํ•œ 4755 ๋น„ํŠธ ์„ค์ •์ด appimage ๋ฐ snap ์ด์™ธ์˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„์œ„ํ•œ ๊ฒƒ์ž„์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  appimage์˜ ๊ฒฝ์šฐ no-sandbox๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์˜ณ์€. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„๋Œ€ ์ „์ž ๋นŒ๋”๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ 4755๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— snap/appimage์— ๋Œ€ํ•ด ์„ค์ •๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์Šค๋ƒ…์€ ๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด ์ „์ž ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์„ค์ •๋œ 4755๋น„ํŠธ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@๋ธ”๋ผ๋””๋ฏธ๋ฆฌ
๋‚ด ์•ฑ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ๋น„์•ˆ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— no-sandbox๋ฅผ ์„ค์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๊ฒฝ์šฐ์— ๋‚ด๊ฐ€ ๋‹ค์‹œ ํฌ์žฅํ•  ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ „์ž ๋นŒ๋”์˜ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์žฌํฌ์žฅ๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ 4755๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ๋ชจ๋‘ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด๋Š ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ 4755๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ๋ชจ๋‘ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด 4755๋ฅผ appimage๋กœ ์„ค์ •ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • --no-sandbox ๋ช…๋ น์ค„ ์ธ์ˆ˜๋กœ appimage ํŒŒ์ผ ์‹œ์ž‘
  • --no-sandbox appimage ํŒŒ์ผ์— ์žˆ๋Š” ./AppRun ์Šคํฌ๋ฆฝํŠธ์— ํฌํ•จ์‹œํ‚ค์‹ญ์‹œ์˜ค(๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•จ).

๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋ฌธ์„œ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ 4755๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ๋ชจ๋‘ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด 4755๋ฅผ appimage๋กœ ์„ค์ •ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • --no-sandbox ๋ช…๋ น์ค„ ์ธ์ˆ˜๋กœ ์‹œ์ž‘
  • --no-sandbox appiamge ํŒŒ์ผ์— ์žˆ๋Š” ./AppRun ์Šคํฌ๋ฆฝํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•จ).

๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋ฌธ์„œ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ „์ž ๋นŒ๋”๋Š” ์ตœ๊ทผ์— --no-sandbox ์— ./AppRun ์ž„๋ฒ ๋”ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „์—๋Š” ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๋ƒฅ ๊ธฐ๋ณธ ์ „์ž ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@๋ธ”๋ผ๋””๋ฏธ๋ฆฌ
์˜ˆ. 4755๋งŒ ์„ค์ •ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 4755์—์„œ๋Š” chrome-sandbox์˜ ์†Œ์œ ์ž๋ฅผ root๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๋งŽ์€ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์Œ์„ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@p3x-๋กœ๋ด‡
์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งํฌ(์ „์ž ๋นŒ๋” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ)๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/patrikx3/onenote

@๋ธ”๋ผ๋””๋ฏธ๋ฆฌ
์˜ˆ. 4755๋งŒ ์„ค์ •ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 4755์—์„œ๋Š” chrome-sandbox์˜ ์†Œ์œ ์ž๋ฅผ root๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๋งŽ์€ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์Œ์„ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@p3x-๋กœ๋ด‡
์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งํฌ(์ „์ž ๋นŒ๋” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ)๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/patrikx3/onenote

์ „์ž ๋นŒ๋” ์ตœ์‹  ๋ฒ„์ „์€ ./AppRun์— --no-sandbox๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์—๋Š” ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ธฐ๋ณธ ์ „์ž ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ตœ์‹  ์ „์ž ๋นŒ๋” ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ./AppRun sh ์Šคํฌ๋ฆฝํŠธ์— --no-sandbox๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฑ ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์•Œ๋ ค์ง„ [759164:1013/160044.572604:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found ๊ฐ™์€ ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—์„œ kernel.unprivileged_userns_clone ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด sudo sysctl kernel.unprivileged_userns_clone=0 ์™€ ๊ฐ™์ด ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  appimage ํŒŒ์ผ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์ „์ž ๋นŒ๋” ์ตœ์‹  ๋ฒ„์ „์€ ./AppRun์— --no-sandbox๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์—๋Š” ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ธฐ๋ณธ ์ „์ž ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ตœ์‹  ์ „์ž ๋นŒ๋” ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ./AppRun sh ์Šคํฌ๋ฆฝํŠธ์— --no-sandbox๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฑ ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์•Œ๋ ค์ง„ [759164:1013/160044.572604:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found ๊ฐ™์€ ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—์„œ kernel.unprivileged_userns_clone ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด sudo sysctl kernel.unprivileged_userns_clone=0 ์™€ ๊ฐ™์ด ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  appimage ํŒŒ์ผ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์ด์ƒํ•˜๊ฒŒ๋„ ์ตœ์‹  ์ „์ž ๋นŒ๋”๋กœ 10k ์Šค๋ƒ… ์„ค์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™•์‹คํžˆ ์ „์ž ๋นŒ๋”๋Š” ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค ...

10k ์Šค๋ƒ…์ด ์žˆ์Šต๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ์Šค๋ƒ…์ด ์•„๋‹ˆ๋ผ ์•ฑ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  Snap์—๋Š” ์œ„์—์„œ ์ฐธ์กฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ arg๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/electron-userland/electron-builder/blob/df5d050e47f2030e48e65c0e3b542c3aec61e9de/packages/app-builder-lib/src/targets/s1p.7ts -L202.

10k ์Šค๋ƒ…์ด ์žˆ์Šต๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ์Šค๋ƒ…์ด ์•„๋‹ˆ๋ผ ์•ฑ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  Snap์—๋Š” ์œ„์—์„œ ์ฐธ์กฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ arg๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/electron-userland/electron-builder/blob/df5d050e47f2030e48e65c0e3b542c3aec61e9de/packages/app-builder-lib/src/targets/s1p.7ts -L202.

๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ์ธ์ง€ ๊ทธ๊ฒƒ์ด appimage์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žฌํŒจํ‚ค์ง€ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒŒ๋“œ๋ฐ•์Šค ์—†์Œ์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋ˆ„๋ฝ๋œ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ๋นŒ๋“œ์˜ ๋˜๋Œ๋ฆฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์žฅ. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด corifeus-builder์—์„œ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/patrikx3/corifeus-builder/blob/master/src/utils/appimage/after-all-artifact-build.js

์•ˆ๋…•ํ•˜์„ธ์š” @nornagon ์ด ๋ฌธ์ œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ”ํ•œ ๋น ๋ฅธ ์‹œ์ž‘ ์ž์Šต์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒฉ๋ ค ๋•๋ถ„์— FR #26478์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

@gabefair ํ•ฉ๋ฆฌ์ ์ธ ์ œ์•ˆ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. PR ์˜คํ”ˆ์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰