KR_Linux_Admin - somaz94/DevOps-Engineer GitHub Wiki
์ง๋ฌธ: 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 = ์ฌ๋ณผ๋ฆญ ๋งํฌ)# 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)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์ ์ ์ฅ)
โโ ์ฌ์ฉ์๋ช
sudo cat /etc/shadow
root:$6$xyz...:19000:0:99999:7:::
โ โ โ โ โ โ
โ โ โ โ โ โโ ๊ฒฝ๊ณ ๊ธฐ๊ฐ
โ โ โ โ โโ ์ต๋ ์ฌ์ฉ ๊ธฐ๊ฐ
โ โ โ โโ ์ต์ ์ฌ์ฉ ๊ธฐ๊ฐ
โ โ โโ ๋ง์ง๋ง ๋ณ๊ฒฝ์ผ
โ โโ ์ํธํ๋ ๋น๋ฐ๋ฒํธ ($6$ = SHA-512)
โโ ์ฌ์ฉ์๋ช
# /etc/skel ๋ด์ฉ
ls -la /etc/skel/
.bash_logout
.bashrc
.profile
# ์ ์ฌ์ฉ์ ์์ฑ ์ ์๋ ๋ณต์ฌ
sudo useradd -m newuser
# โ /home/newuser/์ /etc/skel/ ๋ด์ฉ ๋ณต์ฌ๋จ์ง๋ฌธ: systemd์ ์ฃผ์ ๊ฐ๋ ๊ณผ ์๋น์ค ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ธ์. Unit ํ์ผ ์์ฑ ๋ฐฉ๋ฒ๊ณผ ์ฃผ์ ๋ช ๋ น์ด๋ฅผ ํฌํจํ์ธ์.
๋ต๋ณ:
systemd๋ ์ต์ Linux ๋ฐฐํฌํ์ init ์์คํ ๋ฐ ์๋น์ค ๋งค๋์ ์ ๋๋ค.
์ฃผ์ Unit ํ์ :
- Service: ๋ฐ๋ชฌ ํ๋ก์ธ์ค (.service)
- Socket: IPC ์์ผ (.socket)
- Target: ์ฌ๋ฌ Unit ๊ทธ๋ฃน (.target)
- Mount: ํ์ผ์์คํ ๋ง์ดํธ (.mount)
- Timer: ํฌ๋ก ์์ ๋์ฒด (.timer)
# ์๋น์ค ์์/์ค์ง/์ฌ์์
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# /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์ง๋ฌธ: Linux์ ๋คํธ์ํฌ ๊ด๋ฆฌ ๋ช ๋ น์ด(ip, ss, route)๋ฅผ ์ค๋ช ํ๊ณ , ์ค๋ฌด ํ์ฉ ์ฌ๋ก๋ฅผ ์ ์ํ์ธ์.
๋ต๋ณ:
# ๋คํธ์ํฌ ์ธํฐํ์ด์ค ํ์ธ
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# 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์ง๋ฌธ: Linux์ ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ช ๋ น์ด(ps, top, htop, kill)๋ฅผ ์ค๋ช ํ๊ณ , ํ๋ก์ธ์ค ์ฐ์ ์์ ์กฐ์ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ธ์.
๋ต๋ณ:
# ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
ps aux
ps -ef
# ํน์ ํ๋ก์ธ์ค ๊ฒ์
ps aux | grep nginx
pgrep -a nginx
# ํ๋ก์ธ์ค ํธ๋ฆฌ
ps auxf
pstree -p# top ์ฃผ์ ํค
# P: CPU ์ฌ์ฉ๋ฅ ์ ๋ ฌ
# M: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ ฌ
# k: ํ๋ก์ธ์ค ์ข
๋ฃ
# r: nice ๊ฐ ๋ณ๊ฒฝ
# q: ์ข
๋ฃ
# htop (๋ ๊ฐ๋ ฅํ ์ธํฐํ์ด์ค)
sudo apt install htop
htop# ์ฃผ์ ์๊ทธ๋
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์ง๋ฌธ: Linux Kernel ๋ชจ๋ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๊ณผ SELinux/AppArmor์ ์ฐจ์ด์ ์ ์ค๋ช ํ์ธ์.
๋ต๋ณ:
# ๋ก๋๋ ๋ชจ๋ ํ์ธ
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.confSELinux (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/htmlAppArmor (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