KR_Linux_Admin - somaz94/DevOps-Engineer GitHub Wiki

๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ๊ด€๋ฆฌ (Q3-Q6)

Q3: Linux ํŒŒ์ผ ๊ถŒํ•œ๊ณผ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

์งˆ๋ฌธ: Linux์˜ ํŒŒ์ผ ๊ถŒํ•œ ์‹œ์Šคํ…œ(rwx)์„ ์„ค๋ช…ํ•˜๊ณ , chmod, chown, /etc/passwd, /etc/shadow, /etc/skel์˜ ์—ญํ• ์„ ์„ค๋ช…ํ•˜์„ธ์š”.

๋‹ต๋ณ€:

ํŒŒ์ผ ๊ถŒํ•œ ๊ตฌ์กฐ

ls -l /etc/hosts
-rw-r--r-- 1 root root 220 Nov 6 10:00 /etc/hosts
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ”‚ โ”‚    โ”‚    โ”‚   โ”‚          โ””โ”€ ํŒŒ์ผ๋ช…
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ”‚ โ”‚    โ”‚    โ”‚   โ””โ”€ ์ˆ˜์ • ์‹œ๊ฐ„
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ”‚ โ”‚    โ”‚    โ””โ”€ ํŒŒ์ผ ํฌ๊ธฐ
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ”‚ โ”‚    โ””โ”€ ๊ทธ๋ฃน
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ”‚ โ””โ”€ ์†Œ์œ ์ž
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚  โ””โ”€ ๋งํฌ ์ˆ˜
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ””โ”€ ๊ธฐํƒ€ ์‚ฌ์šฉ์ž ๊ถŒํ•œ (r--)
โ”‚โ”‚โ”‚โ”‚โ”‚โ”‚โ””โ”€ ๊ทธ๋ฃน ๊ถŒํ•œ (r--)
โ”‚โ”‚โ”‚โ””โ”€ ์†Œ์œ ์ž ๊ถŒํ•œ (rw-)
โ”‚โ”‚โ””โ”€ ํŠน์ˆ˜ ๊ถŒํ•œ (setuid, setgid, sticky bit)
โ”‚โ””โ”€ ํŒŒ์ผ ํƒ€์ž… (- = ์ผ๋ฐ˜ ํŒŒ์ผ, d = ๋””๋ ‰ํ„ฐ๋ฆฌ, l = ์‹ฌ๋ณผ๋ฆญ ๋งํฌ)

chmod (๊ถŒํ•œ ๋ณ€๊ฒฝ)

# Symbolic ๋ฐฉ์‹
chmod u+x file.sh       # ์†Œ์œ ์ž์—๊ฒŒ ์‹คํ–‰ ๊ถŒํ•œ ์ถ”๊ฐ€
chmod g-w file.txt      # ๊ทธ๋ฃน ์“ฐ๊ธฐ ๊ถŒํ•œ ์ œ๊ฑฐ
chmod o=r file.txt      # ๊ธฐํƒ€ ์‚ฌ์šฉ์ž๋Š” ์ฝ๊ธฐ๋งŒ

# Numeric ๋ฐฉ์‹ (8์ง„์ˆ˜)
chmod 755 file.sh       # rwxr-xr-x
chmod 644 file.txt      # rw-r--r--
chmod 600 ~/.ssh/id_rsa # rw-------

# ๊ถŒํ•œ ์ˆซ์ž ๊ณ„์‚ฐ
# r = 4, w = 2, x = 1
# 755 = rwxr-xr-x = (4+2+1)(4+0+1)(4+0+1)

/etc/passwd ๊ตฌ์กฐ

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
somaz:x:1000:1000:Somaz User:/home/somaz:/bin/bash
 โ”‚   โ”‚ โ”‚   โ”‚   โ”‚         โ”‚            โ””โ”€ ๊ธฐ๋ณธ ์…ธ
 โ”‚   โ”‚ โ”‚   โ”‚   โ”‚         โ””โ”€ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ
 โ”‚   โ”‚ โ”‚   โ”‚   โ””โ”€ GECOS (์‚ฌ์šฉ์ž ์„ค๋ช…)
 โ”‚   โ”‚ โ”‚   โ””โ”€ GID (๊ทธ๋ฃน ID)
 โ”‚   โ”‚ โ””โ”€ UID (์‚ฌ์šฉ์ž ID, root=0)
 โ”‚   โ””โ”€ ๋น„๋ฐ€๋ฒˆํ˜ธ (x = /etc/shadow์— ์ €์žฅ)
 โ””โ”€ ์‚ฌ์šฉ์ž๋ช…

/etc/shadow (๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ)

sudo cat /etc/shadow
root:$6$xyz...:19000:0:99999:7:::
 โ”‚    โ”‚        โ”‚     โ”‚  โ”‚    โ”‚
 โ”‚    โ”‚        โ”‚     โ”‚  โ”‚    โ””โ”€ ๊ฒฝ๊ณ  ๊ธฐ๊ฐ„
 โ”‚    โ”‚        โ”‚     โ”‚  โ””โ”€ ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ธฐ๊ฐ„
 โ”‚    โ”‚        โ”‚     โ””โ”€ ์ตœ์†Œ ์‚ฌ์šฉ ๊ธฐ๊ฐ„
 โ”‚    โ”‚        โ””โ”€ ๋งˆ์ง€๋ง‰ ๋ณ€๊ฒฝ์ผ
 โ”‚    โ””โ”€ ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ($6$ = SHA-512)
 โ””โ”€ ์‚ฌ์šฉ์ž๋ช…

/etc/skel (์‚ฌ์šฉ์ž ํ…œํ”Œ๋ฆฟ)

# /etc/skel ๋‚ด์šฉ
ls -la /etc/skel/
.bash_logout
.bashrc
.profile

# ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ์‹œ ์ž๋™ ๋ณต์‚ฌ
sudo useradd -m newuser
# โ†’ /home/newuser/์— /etc/skel/ ๋‚ด์šฉ ๋ณต์‚ฌ๋จ

Q4: systemd ์„œ๋น„์Šค ๊ด€๋ฆฌ

์งˆ๋ฌธ: systemd์˜ ์ฃผ์š” ๊ฐœ๋…๊ณผ ์„œ๋น„์Šค ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์„ธ์š”. Unit ํŒŒ์ผ ์ž‘์„ฑ ๋ฐฉ๋ฒ•๊ณผ ์ฃผ์š” ๋ช…๋ น์–ด๋ฅผ ํฌํ•จํ•˜์„ธ์š”.

๋‹ต๋ณ€:

systemd ๊ธฐ๋ณธ ๊ฐœ๋…

systemd๋Š” ์ตœ์‹  Linux ๋ฐฐํฌํŒ์˜ init ์‹œ์Šคํ…œ ๋ฐ ์„œ๋น„์Šค ๋งค๋‹ˆ์ €์ž…๋‹ˆ๋‹ค.

์ฃผ์š” Unit ํƒ€์ž…:

  • Service: ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค (.service)
  • Socket: IPC ์†Œ์ผ“ (.socket)
  • Target: ์—ฌ๋Ÿฌ Unit ๊ทธ๋ฃน (.target)
  • Mount: ํŒŒ์ผ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ (.mount)
  • Timer: ํฌ๋ก  ์ž‘์—… ๋Œ€์ฒด (.timer)

systemctl ๋ช…๋ น์–ด

# ์„œ๋น„์Šค ์‹œ์ž‘/์ค‘์ง€/์žฌ์‹œ์ž‘
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx    # ์„ค์ •๋งŒ ์žฌ๋กœ๋“œ

# ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ์„ค์ •
sudo systemctl enable nginx
sudo systemctl disable nginx

# ์ƒํƒœ ํ™•์ธ
systemctl status nginx
systemctl is-active nginx      # active/inactive
systemctl is-enabled nginx     # enabled/disabled

# ์ „์ฒด ์„œ๋น„์Šค ๋ชฉ๋ก
systemctl list-units --type=service
systemctl list-unit-files --type=service

Service Unit ํŒŒ์ผ ์ž‘์„ฑ

# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ํ™œ์„ฑํ™”

# Unit ํŒŒ์ผ ๋ฆฌ๋กœ๋“œ
sudo systemctl daemon-reload

# ์„œ๋น„์Šค ์‹œ์ž‘ ๋ฐ ํ™œ์„ฑํ™”
sudo systemctl enable --now myapp.service

# ๋กœ๊ทธ ํ™•์ธ
journalctl -u myapp.service
journalctl -u myapp.service -f  # ์‹ค์‹œ๊ฐ„
journalctl -u myapp.service --since today

Q5: ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ ๋ช…๋ น์–ด

์งˆ๋ฌธ: Linux์˜ ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ ๋ช…๋ น์–ด(ip, ss, route)๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์‹ค๋ฌด ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œ์‹œํ•˜์„ธ์š”.

๋‹ต๋ณ€:

ip ๋ช…๋ น์–ด (iproute2)

# ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์ธ
ip link show
ip addr show
ip addr show eth0

# IP ์ฃผ์†Œ ์ถ”๊ฐ€/์‚ญ์ œ
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip addr del 192.168.1.100/24 dev eth0

# ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
sudo ip link set eth0 up
sudo ip link set eth0 down

# ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”
ip route show
sudo ip route add default via 192.168.1.1
sudo ip route add 10.0.0.0/8 via 192.168.1.254

# ARP ํ…Œ์ด๋ธ”
ip neigh show

ss ๋ช…๋ น์–ด (Socket Statistics)

# TCP ์—ฐ๊ฒฐ ํ™•์ธ
ss -tunap
# -t: TCP
# -u: UDP
# -n: ์ˆซ์ž๋กœ ํ‘œ์‹œ
# -a: ๋ชจ๋“  ์†Œ์ผ“
# -p: ํ”„๋กœ์„ธ์Šค ์ •๋ณด

# ํŠน์ • ํฌํŠธ ํ™•์ธ
ss -tunap | grep :80
ss -tulpn | grep :22

# ์—ฐ๊ฒฐ ํ†ต๊ณ„
ss -s

๋„คํŠธ์›Œํฌ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

# ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ
ping -c 4 8.8.8.8
ping6 -c 4 2001:4860:4860::8888

# ๊ฒฝ๋กœ ์ถ”์ 
traceroute google.com
mtr google.com  # ์‹ค์‹œ๊ฐ„ traceroute

# DNS ์กฐํšŒ
dig google.com
nslookup google.com
host google.com

# ํฌํŠธ ์Šค์บ”
nc -zv 192.168.1.1 22
nmap -p 22,80,443 192.168.1.1

Q6: ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

์งˆ๋ฌธ: Linux์˜ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋ช…๋ น์–ด(ps, top, htop, kill)๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ์กฐ์ • ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์„ธ์š”.

๋‹ต๋ณ€:

ps ๋ช…๋ น์–ด

# ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
ps aux
ps -ef

# ํŠน์ • ํ”„๋กœ์„ธ์Šค ๊ฒ€์ƒ‰
ps aux | grep nginx
pgrep -a nginx

# ํ”„๋กœ์„ธ์Šค ํŠธ๋ฆฌ
ps auxf
pstree -p

top / htop

# top ์ฃผ์š” ํ‚ค
# P: CPU ์‚ฌ์šฉ๋ฅ  ์ •๋ ฌ
# M: ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ์ •๋ ฌ
# k: ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
# r: nice ๊ฐ’ ๋ณ€๊ฒฝ
# q: ์ข…๋ฃŒ

# htop (๋” ๊ฐ•๋ ฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค)
sudo apt install htop
htop

kill ์‹œ๊ทธ๋„

# ์ฃผ์š” ์‹œ๊ทธ๋„
kill -l  # ๋ชจ๋“  ์‹œ๊ทธ๋„ ๋ชฉ๋ก

# SIGTERM (15): ์ •์ƒ ์ข…๋ฃŒ ์š”์ฒญ
kill 1234
kill -15 1234
kill -TERM 1234

# SIGKILL (9): ๊ฐ•์ œ ์ข…๋ฃŒ
kill -9 1234
kill -KILL 1234

# SIGHUP (1): ์žฌ์‹œ์ž‘/์„ค์ • ๋ฆฌ๋กœ๋“œ
kill -HUP 1234

# ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„์œผ๋กœ ์ข…๋ฃŒ
pkill nginx
killall nginx

ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„

# nice ๊ฐ’: -20 ~ 19 (๋‚ฎ์„์ˆ˜๋ก ๋†’์€ ์šฐ์„ ์ˆœ์œ„)
# ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž: 0 ~ 19๋งŒ ๊ฐ€๋Šฅ

# nice๋กœ ์‹œ์ž‘
nice -n 10 ./heavy-process.sh

# ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ
sudo renice -n -5 -p 1234
sudo renice -n 10 -u username

Q7: Linux Kernel ๊ด€๋ฆฌ ๋ฐ ๋ณด์•ˆ

์งˆ๋ฌธ: Linux Kernel ๋ชจ๋“ˆ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ SELinux/AppArmor์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”.

๋‹ต๋ณ€:

Kernel ๋ชจ๋“ˆ ๊ด€๋ฆฌ

# ๋กœ๋“œ๋œ ๋ชจ๋“ˆ ํ™•์ธ
lsmod
lsmod | grep e1000

# ๋ชจ๋“ˆ ์ •๋ณด
modinfo e1000e
modinfo -p e1000e  # ํŒŒ๋ผ๋ฏธํ„ฐ

# ๋ชจ๋“ˆ ๋กœ๋“œ
sudo modprobe e1000e
sudo insmod /path/to/module.ko

# ๋ชจ๋“ˆ ์–ธ๋กœ๋“œ
sudo modprobe -r e1000e
sudo rmmod e1000e

# ๋ถ€ํŒ… ์‹œ ์ž๋™ ๋กœ๋“œ
echo "e1000e" | sudo tee -a /etc/modules

# ๋ชจ๋“ˆ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf

SELinux vs AppArmor

SELinux (Red Hat ๊ณ„์—ด):

# ์ƒํƒœ ํ™•์ธ
getenforce
sestatus

# ๋ชจ๋“œ ๋ณ€๊ฒฝ
sudo setenforce 0  # Permissive
sudo setenforce 1  # Enforcing

# ์˜๊ตฌ ์„ค์ •
sudo vi /etc/selinux/config
SELINUX=enforcing

# ์ปจํ…์ŠคํŠธ ํ™•์ธ
ls -Z /var/www/html
ps -eZ | grep httpd

# ์ปจํ…์ŠคํŠธ ๋ณ€๊ฒฝ
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
sudo restorecon -Rv /var/www/html

AppArmor (Debian/Ubuntu ๊ณ„์—ด):

# ์ƒํƒœ ํ™•์ธ
sudo aa-status

# ํ”„๋กœํŒŒ์ผ ๋ชจ๋“œ
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx    # Enforce
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx   # Complain

# ํ”„๋กœํŒŒ์ผ ๋น„ํ™œ์„ฑํ™”
sudo ln -s /etc/apparmor.d/usr.sbin.nginx /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.nginx

์ฐธ๊ณ  ์ž๋ฃŒ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ