Operation Security - Joungkyun/JSBoard GitHub Wiki

JSBoard λ³΄μ•ˆ μ„€μ •

##1. Upload Directory μ œν•œ

보톡 CGI 방식을 ν†΅ν•œ upload 에 κ΄€λ ¨ν•˜μ—¬ λ³΄μ•ˆλ¬Έμ œκ°€ 많이 λ°œμƒμ„ ν•˜κ³  μžˆλ‹€. ν•˜μ§€λ§Œ λ‹¨μˆœνžˆ CGI 의 μ½”λ“œλ§Œ μ˜μ‘΄ν•˜μ—¬ λ³΄μ•ˆλ¬Έμ œλ₯Ό λ°©μ§€ ν•œλ‹€λŠ” 것은 무리라고 생각이 λ˜μ–΄ apache의 μ„€μ • file μ—μ„œ μ›μ²œμ μœΌλ‘œ μ—…λ‘œλ“œ file 에 λŒ€ν•΄μ„œ 싀행이 λ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 섀정을 적용 μ‹œμΌœ λ³΄μ•˜λ‹€. ν˜„μž¬ ν•„μžμ˜ 개인 μ„œλ²„μ™€ kldp serverμ—μ„œ 적용이 λ˜μ–΄ 있으며 특히 ν˜ΈμŠ€νŒ…μ„œλ²„μ™€ 같이 μ—¬λŸ¬ 계정듀이 μ‚¬μš©μ„ ν•˜λŠ” κ²½μš°μ— JSBoard λ₯Ό μ‚¬μš©ν• μˆ˜λ„ 있기 λ•Œλ¬Έμ— 이 μ…‹νŒ…μ„ ν•΄ λ†“λŠ” 것을 ꢌμž₯ν•œλ‹€.

섀정은 λ‹€μŒκ³Ό 같이 ν• μˆ˜ μžˆλ‹€.

<DirectoryMatch "^/.*/jsboard/data">
  AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins
  AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins 

  ErrorDocument 403 http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403 

  <Files ~ ".*\.ph$">
    Order allow,deny
    Deny from all
  </Files>
</DirectoryMatch> 

이 μ„€μ •μ˜ μ˜λ―ΈλŠ” jsboard/dataλΌλŠ” 디렉토리 μ•„λž˜μ— μžˆλŠ” μ–΄λ– ν•œ 경둜의 dataλΌλŠ” μ΄λ¦„μ˜ λ””λ ‰ν† λ¦¬μ—μ„œ .phps .php .ph .php3 .cgi .vbs .ins .sh .pl .htm .html .shtml 의 ν™•μž₯자λ₯Ό κ°€μ§€κ³  있으면 source λ₯Ό 좜λ ₯ν•˜λΌλŠ” 의미이며 주의 할것은 여기에 νŒ¨μŠ€μ›Œλ“œ 같은 것이 λ“€μ–΄κ°€ μžˆλŠ” source λ₯Ό 올렀 λ†“μœΌλ©΄ μ•ˆλœλ‹€λŠ” 것을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€. μœ„μ˜ κ²½λ‘œλŠ” κ²Œμ‹œνŒ 디렉토리 이름을 μ–΄λ–»κ²Œ ν•˜λŠλƒμ— 따라 μˆ˜μ •μ„ ν•΄ μ€˜μ•Ό ν•œλ‹€.

λ˜ν•œ data λΌλŠ” μ΄λ¦„μ˜ 디렉토리 μ•„λž˜λ‘œ .ph둜 직접 μ ‘κ·Όν•  κ²½μš°μ—λŠ” http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403 νŽ˜μ΄μ§€λ₯Ό 좜λ ₯ ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

이 섀정은 root 의 κΆŒν•œλ§Œ κ°€μ§€κ³  있으면 λˆ„κ΅¬λ‚˜ λ‹€ 섀정을 ν•΄ μ£ΌλŠ” 것이 μ’‹μœΌλ©° λ§Œμ•½ 계정 μœ μ €λ“€μ΄λΌκ³  해도 μ„œλ²„ κ΄€λ¦¬μžμ—κ²Œ 이 섀정을 ν•΄ 달라고 ν•˜λŠ” 것이 μ’‹λ‹€. 이 섀정을 μ•ˆν•΄μ„œ 쒋을것이 ν•˜λ‚˜λ„ μ—†μ„ν…Œλ‹ˆ μ•„λ§ˆ λ‹€ 해쀄 것이닀.

##2. DB μ•”ν˜Έ 관리

계정 μœ μ €λ“€μ˜ κ²½μš°μ—λŠ” db 의 password λ₯Ό κ°€μ§€κ³  μžˆλŠ” file을 λ³΄ν˜Έν•˜κΈ° μœ„ν•œ 것을 μ„€λͺ…ν•œλ‹€. 즉 λ‹€λ₯Έ μœ μ €κ°€ db 의 νŒ¨μŠ€μ›Œλ“œλ₯Ό 볼수 없도둝 ν•˜κΈ° μœ„ν•œ κ²ƒμœΌλ‘œ 이 뢀뢄은 root(μ„œλ²„ κ΄€λ¦¬μž) κ°€ ν•΄ μ£Όμ–΄μ•Ό ν•  뢀뢄이닀. λ§Œμ•½ 이것이 λΆˆκ°€λŠ₯ ν•˜λ‹€λ©΄ 이 νŒŒμΌλ“€μ˜ κΆŒν•œμ„ 606 으둜 κ·Έλƒ₯ 두면 λœλ‹€. 즉,

  • jsbaord/config/global.php,
  • jsboard/config/spma_list.php,

에 λŒ€ν•œ group μ†Œμœ κΆŒμ„ nobody 둜 μ§€μ •ν•΄ 달라고 ν•΄μ•Ό ν•œλ‹€ (Debian μ‚¬μš©μž 라면 www-data 둜 ν•΄μ•Ό ν•  것이고, Redhat/CentOS/Fedora 의 κ²½μš°μ—λŠ” apache 이닀. λ‹€λ₯Έ OSλŠ” λͺ¨λ₯΄κ² λ‹€. httpd.conf 의 Group μ§€μ‹œμžμ— μ„€μ •λ˜μ–΄ μžˆλŠ” 값을 확인을 ν•΄μ„œ ν•΄ 달라고 ν•œλ‹€) 즉

[root@host jsboard]$ chgrp nobody config/global.php (rootκ°€ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” λͺ…λ Ή)
[root@host jsabord]$ chgrp nobody config/spam_list.txt (rootκ°€ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” λͺ…λ Ή)

λͺ…령을 μ‹€ν–‰ν•΄ 달라고 ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό μ‹œν–‰ν•˜λ©΄ μ•„λž˜μ™€ 같이 μ†Œμœ κΆŒμ„ κ°€μ§€κ²Œ λœλ‹€. 이것은 account λ₯Ό μ‹€ν–‰ν•œ 후에 ν–‰ν•  일듀이닀. (Debian의 κ²½μš°μ—λŠ” nobodyκ°€ μ•„λ‹ˆλΌ www-dataκ°€ λ˜μ–΄μ•Ό ν•œλ‹€. Redhat/CentOS/Fedora 의 κ²½μš°μ—λŠ” apache 일 μˆ˜λ„ μžˆλ‹€.)

-rw-rw----    accountname    nobody     config/global.php
-rw-rw----    accountname    nobody     config/spam_list.txt

λ§Œμ•½ root κ°€ 이λ₯Ό μ‘ν•˜μ§€ μ•Šκ±°λ‚˜ λ˜λŠ” λΆˆμ„±μ‹€ν•œ root 라면 λ‹€μŒκ³Ό 같이

[root@host jsabord]$ chmod 606 config/global.php
[root@host jsboard]$ chmod 606 config/spam_list.txt

을 μ‹€ν–‰ν•˜κ³ , νΌλ―Έμ…˜μ€ λ‹€μŒκ³Ό 같이 λœλ‹€.

-rw----rw-    accountname    accountname    config/global.php
-rw----rw-    accountname    accountname    config/spam_list.txt

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ ν–ˆμ„ 경우 μš΄μ˜μ€ κ°€λŠ₯ν•˜λ‚˜ λ³΄μ•ˆμƒ μ’‹μ§€λŠ” μ•Šλ‹€. 그리고 주의 할것은 account user 의 κΆŒν•œμœΌλ‘œ μ„€μΉ˜ μ‹œμ—λŠ” λ³΄μ•ˆμ˜ λ¬Έμ œμ„±μ΄ λŒ€λ‘λ  수 μžˆμœΌλ‹ˆ home directory의 κΆŒν•œμ„ κΌ­ 711둜 ν•΄μ•Όν•œλ‹€.

⚠️ **GitHub.com Fallback** ⚠️