์ฒ์ Linux๋ฅผ ์ ํ๋ฉด ls -l ์ถ๋ ฅ์ด ์ด๋ ๊ฒ ์๊ฒผ๋ค.
-rwxr-xr-- 1 alice devteam 4096 Apr 3 10:00 deploy.sh
drwxr-s--- 2 root devteam 4096 Apr 3 10:00 secrets/
-rwsr-xr-x 1 root root 8192 Apr 3 10:00 /usr/bin/passwdrwx๋ ๋์ถฉ ์๊ฒ ๋๋ฐ, s๋ ๋ญ๊ณ -r--์ด ์ ๋์ค๋์ง, ์ซ์๋ก 755๋ผ๊ณ ์ฐ๋ฉด ๋ญ์ง โ ์ด๊ฒ ํ ๋ฒ์ ์ ๋ฆฌ๊ฐ ์ ๋๋ ๋ถ๋ค์ด ๋ง๋ค. ์ด ๊ธ์์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ์ ๋ฆฌํ๋ค.
Linux ๊ถํ์ด ์ ์ค์ํ๊ฐ
Linux๋ ๋ค์ค ์ฌ์ฉ์(multi-user) ์์คํ
์ด๋ค. ์๋ฒ ํ ๋์ ์ฌ๋ฌ ์ฌ๋์ด ์ ์ํ๊ณ , ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋์๊ฐ๋ค. ํ์ผ ๊ถํ์ด ์์ผ๋ฉด ๋๊ตฐ๊ฐ ์ค์๋ก โ ํน์ ์
์์ ์ผ๋ก โ /etc/passwd๋ฅผ ๋ฎ์ด์ฐ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๋ค.
๋ณด์ ๊ด์ ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. **์ต์ ๊ถํ ์์น(Principle of Least Privilege)**์ "๊ผญ ํ์ํ ๊ถํ๋ง ์ค์ผ ํ๋ค"๋ ๊ฐ๋ ์ธ๋ฐ, ์ด๊ฑธ ์ค์ ๋ก ๊ตฌํํ๋ ์๋จ์ด ํ์ผ ๊ถํ์ด๋ค.
๊ธฐ๋ณธ ๊ตฌ์กฐ: ls -l ์ฝ๊ธฐ
-rwxr-xr-- 1 alice devteam 4096 Apr 3 10:00 deploy.sh
โโโโโโโโโ
โโโโโโโโโโโ other: r--
โโโโโโโโโโโ group: r-x
โโโโโโโโโโโ owner: rwx
โโโโโโโโโโโ ํ์ผ ํ์
โโโโโโโโโโโ (์์)์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ํ์ผ ํ์ ์ด๋ค.
| ๋ฌธ์ | ์๋ฏธ |
|---|---|
- |
์ผ๋ฐ ํ์ผ |
d |
๋๋ ํ ๋ฆฌ |
l |
์ฌ๋ณผ๋ฆญ ๋งํฌ |
c |
๋ฌธ์ ์ฅ์น ํ์ผ (character device) |
b |
๋ธ๋ก ์ฅ์น ํ์ผ (block device) |
p |
ํ์ดํ |
s |
์์ผ |
๊ทธ ๋ค๋ owner / group / other ์์ผ๋ก 3์์ฉ rwx ์กฐํฉ์ด๋ค.
| ๋ฌธ์ | ํ์ผ์์ ์๋ฏธ | ๋๋ ํ ๋ฆฌ์์ ์๋ฏธ |
|---|---|---|
r |
์ฝ๊ธฐ (๋ด์ฉ ๋ณด๊ธฐ) | ๋ชฉ๋ก ์กฐํ (ls) |
w |
์ฐ๊ธฐ (์์ /์ญ์ ) | ํ์ผ ์์ฑ/์ญ์ |
x |
์คํ | ์ ๊ทผ (cd) |
- |
๊ถํ ์์ | ๊ถํ ์์ |
๋๋ ํ ๋ฆฌ์์
x(execute) ๊ถํ์ด ์์ผ๋ฉดcd๋ ๋ชป ํ๊ณ ๊ทธ ์์ ์๋ ํ์ผ ๊ฒฝ๋ก๋ ์ ๊ทผ ๋ถ๊ฐ๋ค.r๋ง ์์ด๋ ๋ชฉ๋ก์ ๋ณด์ด์ง๋ง ํ์ผ์ ๋ชป ์ฝ๋๋ค. ์ด ์ฐจ์ด๊ฐ ํท๊ฐ๋ฆฌ๋ ํฌ์ธํธ๋ค.
์ซ์ ํ๊ธฐ๋ฒ (Octal)
๊ฐ ๊ถํ์ ๋นํธ๋ก ํํ๋๋ค.
r = 4 (100)
w = 2 (010)
x = 1 (001)
- = 0 (000)rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
-rwxr-xr-- โ owner=7, group=5, other=4 โ 754
์์ฃผ ์ฐ๋ ์กฐํฉ:
| ์ซ์ | ๊ธฐํธ | ์ฃผ๋ก ์ฐ๋ ๊ณณ |
|---|---|---|
755 |
rwxr-xr-x |
์คํ ํ์ผ, ๊ณต๊ฐ ๋๋ ํ ๋ฆฌ |
644 |
rw-r--r-- |
์ผ๋ฐ ํ์ผ, ์ค์ ํ์ผ |
600 |
rw------- |
๊ฐ์ธ ํค ํ์ผ (~/.ssh/id_rsa) |
700 |
rwx------ |
๊ฐ์ธ ์คํฌ๋ฆฝํธ |
777 |
rwxrwxrwx |
์์ ๋๋ ํ ๋ฆฌ (๋ณด์ ์ฃผ์) |
chmod โ ๊ถํ ๋ณ๊ฒฝ
์ซ์ ๋ฐฉ์
chmod 755 deploy.sh # -rwxr-xr-x
chmod 600 ~/.ssh/id_rsa # -rw-------
chmod -R 644 ./logs/ # ๋๋ ํ ๋ฆฌ ํ์ ์ ์ฒด ์ฌ๊ท ์ ์ฉ๊ธฐํธ ๋ฐฉ์
[๋์][์ฐ์ฐ์][๊ถํ] ํํ๋ค.
- ๋์:
u(owner),g(group),o(other),a(all) - ์ฐ์ฐ์:
+(์ถ๊ฐ),-(์ ๊ฑฐ),=(์ง์ )
chmod u+x script.sh # owner์ ์คํ ๊ถํ ์ถ๊ฐ
chmod go-w sensitive.txt # group, other์์ ์ฐ๊ธฐ ์ ๊ฑฐ
chmod a=r readme.txt # ๋ชจ๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ง์
chmod u=rwx,go=r-x app # owner๋ rwx, group/other๋ r-xchown / chgrp โ ์์ ์ ๋ณ๊ฒฝ
chown alice deploy.sh # owner๋ฅผ alice๋ก
chown alice:devteam deploy.sh # owner + group ๋์ ๋ณ๊ฒฝ
chown :devteam deploy.sh # group๋ง ๋ณ๊ฒฝ
chgrp devteam deploy.sh # group๋ง ๋ณ๊ฒฝ (chgrp)
chown -R www-data:www-data /var/www/html # ์ฌ๊ท ์ ์ฉ
chown์ ๋ณดํต root ๊ถํ์ด ํ์ํ๋ค. ์ผ๋ฐ ์ฌ์ฉ์๋ ์๊ธฐ ํ์ผ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋๊ธฐ์ง ๋ชปํ๋ค (๋ณด์์ ์๋๋ ์ค๊ณ).
umask โ ๊ธฐ๋ณธ ๊ถํ์ ๋น๋ฐ
ํ์ผ์ ์๋ก ๋ง๋ค๋ฉด ๊ถํ์ด ์๋์ผ๋ก ๊ฒฐ์ ๋๋ค. ๊ทธ ๊ธฐ์ค์ด umask๋ค.
๊ธฐ๋ณธ ์ต๋ ๊ถํ์์ umask๋ฅผ "๋นผ๋" ๋ฐฉ์์ด๋ค.
ํ์ผ ๊ธฐ๋ณธ ์ต๋: 666 (rw-rw-rw-)
๋๋ ํ ๋ฆฌ ๊ธฐ๋ณธ ์ต๋: 777 (rwxrwxrwx)
umask = 022
ํ์ผ: 666 - 022 = 644 (rw-r--r--)
๋๋ ํ ๋ฆฌ: 777 - 022 = 755 (rwxr-xr-x)ํ์ฌ umask ํ์ธ:
umask # 0022
umask -S # u=rwx,g=rx,o=rx (๊ธฐํธ ๋ฐฉ์)๋ณ๊ฒฝ:
umask 027 # ์ ํ์ผ์ 640, ๋๋ ํ ๋ฆฌ๋ 750ํน์ ๊ถํ ๋นํธ: SUID, SGID, Sticky bit
์ผ๋ฐ rwx ์ธ์ 3๊ฐ์ง ํน์ ๋นํธ๊ฐ ์๋ค. ์ฒ์ ๋ณด๋ฉด ๋นํฉ์ค๋ฌ์ด๋ฐ, ๊ฐ๊ฐ ๋ชฉ์ ์ด ๋ช
ํํ๋ค.
SUID (Set User ID) โ ์คํ ์ ์์ ์ ๊ถํ
-rwsr-xr-x 1 root root /usr/bin/passwd
^
s = SUIDpasswd ๋ช
๋ น์ด๋ /etc/shadow๋ฅผ ์์ ํด์ผ ํ๋ค. ์ด ํ์ผ์ root๋ง ์ธ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ผ๋ฐ ์ฌ์ฉ์๋ passwd๋ก ์๊ธฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
๋น๊ฒฐ์ SUID๋ค. SUID๊ฐ ์ค์ ๋ ์คํ ํ์ผ์ ์คํํ๋ ๋์ ํ์ผ ์์ ์(root)์ ๊ถํ์ผ๋ก ๋์ํ๋ค. ์คํ์๊ฐ ๋๊ตฌ๋ ์๊ด์์ด.
chmod u+s /path/to/file # SUID ์ค์
chmod 4755 /path/to/file # ์ซ์ ๋ฐฉ์ (์์ 4)๋ณด์ ์ฃผ์: SUID root ํ์ผ์ด ์ทจ์ฝํ๋ฉด ๊ถํ ์์น(privilege escalation) ๊ณต๊ฒฉ์ ๋์์ด ๋๋ค. CTF ๋ฌธ์ ์์ SUID ํ์ผ ์ฐพ๊ธฐ(
find / -perm -4000)๋ ๋จ๊ณจ ๋ฌธ์ ๋ค.
SGID (Set Group ID) โ ๊ทธ๋ฃน ๊ถํ ์์
ํ์ผ์ ์ค์ ์ SUID์ ์ ์ฌํ๊ฒ ๋์ํ์ง๋ง, ๊ทธ๋ฃน ๊ธฐ์ค์ด๋ค.
drwxr-sr-x 2 root devteam secrets/
^
s = SGID (๋๋ ํ ๋ฆฌ์ ์ค์ )๋๋ ํ ๋ฆฌ์ SGID๊ฐ ์ค์ ๋๋ฉด, ๊ทธ ์์ ์๋ก ๋ง๋๋ ํ์ผ/๋๋ ํ ๋ฆฌ๊ฐ ์๋์ผ๋ก ํด๋น ๋๋ ํ ๋ฆฌ์ ๊ทธ๋ฃน์ ์์ํ๋ค.
ํ ๊ณต์ ํด๋์ ์์ฃผ ์ด๋ค. devteam ๊ทธ๋ฃน ๋ฉค๋ฒ๋ผ๋ฉด ๋๊ฐ ํ์ผ์ ๋ง๋ค์ด๋ ์๋์ผ๋ก devteam ๊ทธ๋ฃน ์์ ๊ฐ ๋๋ค.
chmod g+s /shared/project # SGID ์ค์
chmod 2755 /shared/project # ์ซ์ ๋ฐฉ์ (์์ 2)Sticky bit โ ์ญ์ ๋ณดํธ
drwxrwxrwt 1 root root /tmp
^
t = sticky bit/tmp๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ํ์ผ์ ๋ง๋ค ์ ์๋ค. ๊ทธ๋ฐ๋ฐ w ๊ถํ์ด ์๋ค๋ ๊ฑด ๋ค๋ฅธ ์ฌ๋ ํ์ผ๋ ์ง์ธ ์ ์๋ค๋ ๋ป์ด๋ค.
Sticky bit๊ฐ ์ค์ ๋ ๋๋ ํ ๋ฆฌ์์๋ ํ์ผ ์์ ์ ๋๋ root๋ง ๊ทธ ํ์ผ์ ์ญ์ ํ ์ ์๋ค. ๋จ์ด ๋ง๋ ํ์ผ์ ์ง์ฐ์ง ๋ชปํ๋ค.
chmod +t /shared/uploads # sticky bit ์ค์
chmod 1777 /shared/uploads # ์ซ์ ๋ฐฉ์ (์์ 1)ํน์ ๋นํธ ํ๋์ ๋ณด๊ธฐ
| ๋นํธ | ๊ธฐํธ | ์ซ์ | ํ์ผ์์ | ๋๋ ํ ๋ฆฌ์์ |
|---|---|---|---|---|
| SUID | s (u ์๋ฆฌ) |
4000 | ์์ ์ ๊ถํ์ผ๋ก ์คํ | ์๋ฏธ ์์ |
| SGID | s (g ์๋ฆฌ) |
2000 | ๊ทธ๋ฃน ๊ถํ์ผ๋ก ์คํ | ์ ํ์ผ์ด ๊ทธ๋ฃน ์์ |
| Sticky | t (o ์๋ฆฌ) |
1000 | ์๋ฏธ ์์ | ์์ ์๋ง ์ญ์ ๊ฐ๋ฅ |
์ค์ ์์
SSH ๊ฐ์ธ ํค ๊ถํ ์ค์
SSH ์ ์ ์ ๊ฐ์ธ ํค ๊ถํ์ด ๋๋ฌด ๋์ผ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋จ๊ณ ์ ์์ด ์ ๋๋ค.
# ์๋ชป๋ ์
-rw-rw-r-- 1 alice alice ~/.ssh/id_rsa
# WARNING: UNPROTECTED PRIVATE KEY FILE!
# ์ฌ๋ฐ๋ฅธ ์ค์
chmod 600 ~/.ssh/id_rsa # -rw-------
chmod 700 ~/.ssh/ # drwx------
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys์น ์๋ฒ ํ์ผ ๊ถํ
# Nginx/Apache ๊ธฐ์ค
chown -R www-data:www-data /var/www/html
# ์ ์ ํ์ผ
find /var/www/html -type f -exec chmod 644 {} \;
# ๋๋ ํ ๋ฆฌ
find /var/www/html -type d -exec chmod 755 {} \;
# ์
๋ก๋ ๋๋ ํ ๋ฆฌ (์ฐ๊ธฐ ํ์ฉ, ์คํ ๊ธ์ง)
chmod 775 /var/www/html/uploads
chmod -R a-x /var/www/html/uploads # ์
๋ก๋๋ ํ์ผ์ ์คํ ๊ถํ ์์ ๊ธฐSUID ํ์ผ ์ฐพ๊ธฐ (๋ณด์ ๊ฐ์ฌ)
# ์์คํ
์ ์ฒด SUID ํ์ผ ๋ชฉ๋ก
find / -perm -4000 -type f 2>/dev/null
# ์ผ๋ฐ์ ์ผ๋ก ์์ด์ผ ํ๋ ๊ฒ๋ค:
# /usr/bin/passwd
# /usr/bin/sudo
# /usr/bin/su
# ์ด์ธ ์์ฌ์ค๋ฌ์ด SUID ํ์ผ์ด ์๋ค๋ฉด ํ์ธ ํ์ํ ๊ณต์ ๋๋ ํ ๋ฆฌ ์ค์
# 1. ๊ทธ๋ฃน ์์ฑ ๋ฐ ๋ฉค๋ฒ ์ถ๊ฐ
groupadd devteam
usermod -aG devteam alice
usermod -aG devteam bob
# 2. ๊ณต์ ๋๋ ํ ๋ฆฌ ์์ฑ
mkdir /shared/project
chown root:devteam /shared/project
# 3. ๊ทธ๋ฃน ์ฐ๊ธฐ + SGID + sticky bit
chmod 2775 /shared/project # rwxrwsr-x
chmod +t /shared/project # ์ญ์ ๋ณดํธ ์ถ๊ฐ โ rwxrws--t (3775)
# ๊ฒฐ๊ณผ: devteam ๋ฉค๋ฒ๋ ํ์ผ ์์ฑ/์์ ๊ฐ๋ฅ,
# ์๊ธฐ๊ฐ ๋ง๋ ํ์ผ๋ง ์ญ์ ๊ฐ๋ฅ,
# ์ ํ์ผ์ ์๋์ผ๋ก devteam ๊ทธ๋ฃน ์์ ์์ฃผ ํ๋ ์ค์
์ค์ 1: chmod 777 ๋จ๋ฐ
๊ฐ๋ฐ ์ค ๊ถํ ์ค๋ฅ๊ฐ ๋๋ฉด chmod 777๋ก ํด๊ฒฐํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ผ๋จ ๋์๊ฐ์ง๋ง ๋๊ตฌ๋ ์ฝ๊ณ ์ฐ๊ณ ์คํํ ์ ์๋ ํ์ผ์ด ๋๋ค. ์๋ฒ์์๋ ์ ๋ ๊ธ๋ฌผ์ด๋ค.
์ค์ 2: ์ฌ๊ท chmod์์ ํ์ผ/๋๋ ํ ๋ฆฌ ๊ตฌ๋ถ ์ ํจ
# ์๋ชป๋ ์ - ํ์ผ์๋ ์คํ ๊ถํ์ด ๋ถ๋๋ค
chmod -R 755 /var/www/html
# ์ฌ๋ฐ๋ฅธ ์
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;์ค์ 3: ๋๋ ํ ๋ฆฌ x ๊ถํ ์ ๊ฑฐ
chmod -x /some/dir # ์ด๋ฌ๋ฉด cd๋ ๋ชป ํ๊ณ ์์ ์๋ ํ์ผ๋ ๋ชป ์ฝ๋๋ค์ ๋ฆฌ
Linux ํ์ผ ๊ถํ์ ์ฒ์์ ๋ณต์กํด ๋ณด์ด์ง๋ง ๊ตฌ์กฐ๊ฐ ๋ช ํํ๋ค.
- ๊ธฐ๋ณธ ๊ตฌ์กฐ: ํ์ผ ํ์
1์ + owner/group/other ๊ฐ 3์ (
rwx) - ์ซ์ ํ๊ธฐ: r=4, w=2, x=1 ํฉ์ฐ (755, 644, 600)
- umask: ์ ํ์ผ ๊ธฐ๋ณธ ๊ถํ์ ์ ํ๋ ๋ง์คํฌ (๋ณดํต 022)
- ํน์ ๋นํธ: SUID(4000) / SGID(2000) / Sticky(1000) โ ๋ชฉ์ ์ด ๊ฐ๊ฐ ๋ค๋ฆ
๋ณด์ ๊ด์ ์์๋ ์ต์ ๊ถํ ์์น์ ํญ์ ๊ธฐ์ตํ์. ํ์ํ ๊ฒ๋ง ์ด๊ณ , SUID ํ์ผ ๋ชฉ๋ก์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐ์ฌํ๊ณ , chmod 777์ ์์๋ ์ง์ํ๋ ๊ฒ์ด ์ต๊ด์ด ๋์ด์ผ ํ๋ค.
์ฐธ๊ณ
- Linux man pages: chmod(1)
- Linux man pages: chown(1)
- The Linux Documentation Project: File Permissions
- OWASP: Least Privilege
- Red Hat Enterprise Linux 9 Security Hardening Guide
