๐ก ๋ณธ ๋ฌธ์๋ 'chmod ํ์ผ ๊ถํ ๋ฐ ํน์ ๊ถํ ์ค์ '์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
Linux OS์์๋ ํ์ผ ๋ฐ ํด๋์ ์ ๊ทผ ๊ถํ์ด ์กด์ฌํฉ๋๋ค. ์ด๋ก ์ธํด ํน์ ํ์ผ์ ์ ๊ทผํ ๋ 'permissionError', 'Permission denied'์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๋ ํ์ผ์ ์ ๊ทผ ๊ถํ ์ค์ ์ ๋ํด ์๊ณ ์๋ค๋ฉด ๋ง์ ๋์์ด ๋ ๊ฒ ๊ฐ์ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Linux์์ ๊ถํ์ด๋?
1.1 ํด๋ ์ ๊ทผ ๊ถํ ํ์ธํ๊ธฐ
'ls -al', 'll' ์ ๋ช ๋ น์ด์ ๊ฒฝ๋ก๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๊ฒฝ๋ก์ ์์นํ ํ์ผ๋ค์ ์ ๊ทผ ๊ถํ(e.g. drwxr-xr-x)์ ํ์ธํ ์ ์์ต๋๋ค.
$ ll /
total 2097252
drwxr-xr-x 21 root root 4096 8์ 31 13:50 ./
drwxr-xr-x 21 root root 4096 8์ 31 13:50 ../
lrwxrwxrwx 1 root root 7 7์ 26 2022 bin -> usr/bin/
drwxr-xr-x 4 root root 4096 1์ 17 06:40 boot/
drwxr-xr-x 3 root root 4096 8์ 31 13:50 build/
drwxrwxr-x 2 root root 4096 7์ 26 2022 cdrom/
drwxr-xr-x 19 root root 4600 1์ 25 12:39 dev/
drwxr-xr-x 146 root root 12288 1์ 26 09:04 etc/
drwxr-xr-x 9 root root 4096 1์ 25 16:44 home/
lrwxrwxrwx 1 root root 7 7์ 26 2022 lib -> usr/lib/
...
drwxrwxrwt 38 root root 12288 1์ 26 12:00 tmp/
drwxr-xr-x 14 root root 4096 2์ 4 2021 usr/
drwxr-xr-x 14 root root 4096 2์ 4 2021 var/
๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ๋ฉด ํด๋๋ง๋ค ๋ค์ํ ์ ๊ทผ๊ถํ์ ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์๋์์ ์ด๋ฌํ ์ ๊ทผ ๊ถํ์ด ๋ฌด์จ์๋ฏธ๋ฅผ ๊ฐ๋์ง ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1.2 ํด๋ ์ ๊ทผ ๊ถํ ๋ถ์ํ๊ธฐ
drwxrwxrwx ๊ถํ์ d/rwx/rwx/rwx ์ ๊ฐ์ด ๋๋์ด ํด์ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ d ๋ directory์ ์ฝ์๋ก ํด๋น ํ์ผ ์์ฒด๊ฐ ํด๋์์ ๋ํ๋ ๋๋ค.
์ดํ rwx ๋ฑ์ ๋ฌธ์์ด์ด 3๋ฒ ๋ฐ๋ณต๋๋๋ฐ, ์ํ๋ฒณ ๊ฐ๊ฐ์ read(r), write(w), execute(x)๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ํ 3๋ฒ ๋ฐ๋ณต๋๋ ์ด์ ๋ ์์๋๋ก ์ ์ ๊ถํ(user), ๊ทธ๋ฃน๊ถํ(group), ๊ทธ์ธ ๊ถํ(other)๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ drwxrwxrwx์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- d=> directory(ํด๋)์ด๋ฉฐ
- ์์ ์ ์ ๊ฐ ์ฝ๊ณ (r), ์ฐ๊ณ (w), ์คํ(x)์ ํ ์ ์๊ณ
- ์ ์ ๊ฐ ์ํ ๊ทธ๋ฃน์ด ์ฝ๊ณ (r), ์ฐ๊ณ (w), ์คํ(x)์ ํ ์ ์๊ณ
- ์์ ํ ์ ์ ์ด์ธ์ ์ ์ ๊ฐ ์ฝ๊ณ (r), ์ฐ๊ณ (w), ์คํ(x)์ ํ ์ ์์
์ถ๊ฐ๋ก ๊ฐ bit ์๋ฆฌ์๋ฅผ ๊ณ์ฐํ์ฌ r ๊ถํ(4) w ๊ถํ(2) x ๊ถํ(1) = ์ดํฉ 7๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ถํ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ถํ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์๋์์ ์ธ๊ธํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
2. ํ์ผ ๊ถํ ์ค์
2.1 ์ผ๋ฐ์ ์ธ ํ์ผ ๊ถํ ์ค์
์ผ๋ฐ์ ์ผ๋ก ๊ถํ ์ค์ ๋ฐฉ๋ฒ์ chmod๋ฅผ ์ด์ฉํ์ฌ ์ง์ ํ ์ ์์ต๋๋ค.
$ chmod 777 /test
test ํด๋์ rwxrwxrwx ๊ถํ ๋ถ์ฌ
$ chmod +r /test
test ํด๋์ r๊ถํ ๋ถ์ฌ
$ chmod -x /test
test ํด๋์ x๊ถํ ํ์
๊ทธ๋ฐ๋ฐ ์ด๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ํน์ดํ ๊ถํ์ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ ll / | grep tmp
drwxrwxrwt 38 root root 12288 1์ 26 12:12 tmp/
์์์ ๋ณด์ด๋ ๊ถํ์ ๋ง์ง๋ง bit๋ t๋ก ์์์ ์ธ๊ธํ rwx์ ํด๋นํ์ง ์์ต๋๋ค. ์ด๋ฅผ sticky bit๋ผ ํ๋ฉฐ ์ด์ ๋น์ทํ ์ ํ์ ๊ถํ์ ํน์ ๊ถํ์ด๋ผ ํฉ๋๋ค.
2.2 ํน์ ๊ถํ ์ค์
๊ธฐ์กด ๊ถํ์ user, group, other ์ด๋ ๊ฒ ์ธ๊ฐ์ง๋ก ๋๋์ด์ ธ ์์ฃ ? ์ด๋ ๊ฒ ๋๋ ๊ถํ ์ค ํน์ ํ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ๋ฉด ํน์ํ ๊ถํ์ด ๋ง๋ค์ด์ง๋๋ฐ ํน์๊ถํ์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
2.2.1 SETUID
์ผ์์ ์ธ ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์์ ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ํ์ผ์ ์ผ๋ฐ ์ ์ ๋ก ์ ๊ทผ์ด ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค. user ์ ์ ๊ทผ๊ถํ x ์๋ฆฌ์ s ๊ฐ ๋์ ๋ค์ด๊ฐ๋ฉด setuid์ด๋ฉฐ, ๋๋ฌธ์ S๊ฐ ๋ค์ด๊ฐ๋ฉด ์ผ๋ฐ ๊ถํ์ -(์ ๊ทผ ๊ถํ ์์)๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. ๊ถํ ์ค์ ์ ์์ด์ ๋งจ ์์ ์ซ์ 4๋ฅผ ๋ถ์ด๋ฉด ์ค์ ๋ฉ๋๋ค.
- e.g. rws rwx rwx (4777)
2.2.2 SETGID
์ผ์์ ์ธ ๊ทธ๋ฃน ๊ถํ์ผ๋ก ์์ ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ํ์ผ์ ์ผ๋ฐ ์ ์ ๋ก ์ ๊ทผ์ด ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค. group ์ ์ ๊ทผ๊ถํ x ์๋ฆฌ์ s ๊ฐ ๋์ ๋ค์ด๊ฐ๋ฉด setgid์ด๋ฉฐ, ๋๋ฌธ์ S๊ฐ ๋ค์ด๊ฐ๋ฉด ์ผ๋ฐ ๊ถํ์ -(์ ๊ทผ ๊ถํ ์์)๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. ๊ถํ ์ค์ ์ ์์ด์ ๋งจ ์์ ์ซ์ 2๋ฅผ ๋ถ์ด๋ฉด ์ค์ ๋ฉ๋๋ค.
- e.g. rwx rws rwx (2777)
2.2.3 STICKY BIT(t)
sticky bit(t) ๋ ๋ ์ด์ธ์ ์ ์ ํน์ ๊ทธ๋ฃน์ ๊ถํ์ด ๋ถ์ฌ๋์ ๋, ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ bit์ ๋๋ค.
777๊ถํ์ ํด๋์ ๋ชจ๋ ์ฌ์ฉ์๋ค์ด ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋ชจ๋ฅด๊ณ ์ง์ฐ๊ฒ ๋๋ ์ผ์ด ๋ฐ์ํ ์ ์๋ค. ์ด์ ๊ฐ์ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด sticky bit ๊ฐ๋ ์ด ์๊ฒจ๋ฌ์ต๋๋ค.
sticky bit๋ฅผ ๋๋ ํฐ๋ฆฌ์ ์ค์ ํ๋ฉด ๋๋ ํฐ๋ฆฌ ๋ด์ ํ์ผ์ root์ ํ์ผ์์ ์(์์ ํด๋์ w๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์)๋ง ์ญ์ ๊ฐ๋ฅํ์ฌ, ํ์ผ์ ๋ณดํธํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ๋๋ ํฐ๋ฆฌ์๋ง ์ค์ ๊ฐ๋ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ /tmp /var/tmp ๋ฑ์ด sticky bit ๊ถํ์ผ๋ก ์ง์ ํฉ๋๋ค.
- e.g. rwx rwx rwt (1777)
2.3 ๊ถํ ๋ถ์ฌ ์์
$ chmod 1777 /test
$ chmod +t /test
์ด๋ ๊ฒ ๊ถํ์ ๋ถ์ฌํ๋ฉด ์๋์ ๊ฐ์ด sticky bit๊ฐ ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ ls -ld /tmp
drwxrwxrwt 21 root root 12288 Apr 28 16:18 /tmp
์ถ๊ฐ๋ก, linux ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ์ค sticky bit๊ฐ ์ ์ฉ๋ ํด๋๋ /tmp ์ /var/tmp ์ ๋๋ค.
์ฐธ๊ณ
- [Blog] linux ํน์๊ถํ: https://websecurity.tistory.com/14
- [Blog] ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ์ค์ ๋ฐ ๊ธฐ๋ฅ: https://novice-data.tistory.com/32
- [Blog] UNIX / Linux : What is the correct permission of /tmp and /var/tmp directories: https://www.thegeekdiary.com/unix-linux-what-is-the-correct-permission-of-tmp-and-vartmp-directories/