시스템 관리
디스크 사용량 설정
- 리눅스는 기본적으로 여러 사용자가 한꺼번에 사용하는 시스템
- 디스크 사용량을 제한하는 기능을 제공: 디스크 쿼터
- 설정 방식
- 사용자가 사용할 수 있는 파일의 전체 용량을 설정
- 파일의 개수를 제한
- 쿼터 설정 시 한계치 설정
- hard limit: 절대로 넘어설 수 없는 용량을 설정
- soft limit: 일정 시간 동안은 용량을 넘어설 수 있는 방식
사용하는 패키지: quota
- 스크립트로 자동화시
-y
옵션 필수, 대화상자 뜨면 안됨
sudo apt upgrade
sudo apt install -y quota
준비
- 파일 시스템의 마운트 옵션에 쿼터 속성을 설정
- usrquota: 개별 사용자의 쿼터를 제한할 수 있는 속성
- grpquota: 개별 그룹의 쿼터를 제한할 수 있는 속성
- 쿼터 속성 설정은 /etc/fstab 파일에 설정
df -TH # 현재 파일 시스템 확인
ls /dev # 디바이스 확인
실습
- 루트에 실습 위한 디렉터리와 계정 생성
sudo mkdir /home2 sudo mount /dev/sda2 /home2 # 마운트: 디렉터리를 어떤 디스크에 생성할 것인지 설정 sudo useradd -m -d /home2/qtest1 qtest1 sudo useradd -m -d /home2/qtest2 qtest2 ls /home2 tail -2 /etc/passwd
쿼터 속성 설정 - /etc/fstab
파일시스템이름 디렉터리경로 파일시스템종류 defaults,usrquota 1
/dev/sda2 /home2 ext4 default,usrquota 1 1
- remount
sudo mount -o remount
- mount 정보 확인
mount
쿼터 데이터베이스 파일을 생성
- 명령 -
quotacheck
- 쿼터 파일을 생성 및 확인 그리고 수정하기 위해서 파일 시스템을 스캔하는 명령
- 형식:
quotacheck [옵션] [파일시스템]
- 옵션:
a: 전체 파일 시스템을 체크 u: 사용자 쿼터를 확인 g: 그룹 쿼터를 확인 m: 파일 시스템을 리마운트하지 않음 v: 명령 진행 상황을 상세하게 출력
- 명령 실행
quotacheck -ugvm /home
- 2개의 데이터베이스 파일이 생성
- aquota.usr: 사용자 쿼터 데이터베이스 파일
- aquota.group: 그룹 쿼터 데이터베이스 파일
- 2개의 데이터베이스 파일이 생성
- 쿼터 사용 활성화:
quotaon
quotaon [옵션] [파일시스템]
- 옵션
a: 전체 파일 시스템에 적용 u: 사용자 쿼터 활성화 g: 그룹 쿼터 활성화 v: 명령 진행 상황을 상세히 출력
- 명령 수행
sudo quotaon -uv /home2
- 쿼터 설정 및 확인
- 명령: edquota
- 형식:
edquota [옵션] [사용자계정이나 그룹]
- 옵션
u: 사용자쿼터 설정 g: 그룹 쿼터 설정 p: 쿼터 설정 복사
-u
옵션을 이용하면 쿼터 편집 창이 나오게 되는데 원하는 크기를 soft와 hard에 설정하고 저장한 후 빠져나오면 됨- 주의할 점은 단위가 KB, 설정할 때 값을 0으로 설정하면 무한대
- 쿼터 확인
quota [옵션] [사용자계정 및 그룹]
- 옵션은 u 와 g
네트워크 서비스 관리
네트워크 설정
- 리눅스에서 네트워크를 사용하기 위한 준비:
- IP: 현재 컴퓨터를 인터넷 또는 LAN에서 구분하기 위한 주소
- Netmask: 동일한 네트워크를 구분하기 위한 주소
- Broadcast 주소: 동일한 네트워크에 있는 모든 컴퓨터에 데이터를 전송하기 위한 주소
- 게이트웨이 주소: 내부 네트워크에서 외부 네트워크로 나가가 위한 주소
- DNS 주소: 도메인 네임 서비스로 설정이 안되어 있으면 도메인을 사용할 수 없음
네트워크 관리자
- 네트워크 제어와 설정을 관리하는 데몬(백그라운드 작업으로 대기하고 있다가 사용자 요청이 오면 처리하는 프로세스)
- 네트워크 관리자를 이용해서 IP주소설정, 고정 라우터 설정, DNS 설정이 가능
- 예전에는 네트워크 설정을 관리자를 이용하지 않고 ifcfg 라는 설정 파일을 이용
- 현재는 이러한 설정 파일도 지원
- 지원하는 도구
- 네트워크 관리자: 기본 네트워킹 데몬
- nmcli 명령: 네트워크 관리자를 사용하는 명령 기반 도구
- [설정] - [네트워크]: GUI 도구
- nm-connection-editor: 네트워크 관리자를 사용하는 GUI 기반 도구
- 설치가 안된 경우 network-manager를 설치
sudo apt install network-manager
- 서비스 실행 여부 확인
systemctl status NetworkManager
- active 상태가 아니라면 start 명령으로 시작해주어야 함
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
- GUI로 설정
- [설정] - [네트워크]
- 터미널에서
nm-connection-editor
명령 수행
nmcli 명령으로 네트워크 설정
nmcli
: 명령 기반으로 네트워크 관리자를 설정기본 형식
nmcli [옵션] 명령 [서브 명령]
옵션
t: 실행 결과를 간단히 p: 사용자가 읽기 좋게 v: 버젼 h: 도움말
서브명령
general [status | hostname]
- 네트워크 관리자의 전체적인 상태를 출력networking {on | off | connectivity}
- 네트워크를 시작하고 연결 상태를 출력connection {show | up | down | modify | add | delete | reload | load}
- 네트워크 설정device {status | show}
- 네트워크 장치의 상태를 조회전체 상태 확인:
nmcli general
네트워크 실행 및 중지:
nmcli networking on 또는 off
네트워크 설정: connection(con)
- 서브명령
show: 기본 옵션으로 네트워크 연결 프로파일을 출력 up: 네트워크 연결 시작 down: 네트워크 연결 중지 modify: 연결 프로파일에서 속성을 추가 및 수정 그리고 삭제 add: 새로운 연결 생성 delete: 연결 삭제 reload: 연결과 관련된 파일 다시 읽기 load: 연결 파일 읽기
연결 확인
nmcli con show
- UUID(Universally Unique IDentifier) - 네트워크 상에서 고유성을 보장하기 위한 구별하기 위한 문자열, 128비트의 숫자인데 32자리의 16진수로 표현하는 것이 일반적
- DEVICE: 외부와 통신할 때 사용하는 네트워크 인터페이스의 명칭
연결 중지
nmcli con down 이름
사용
nmcli con up 이름
연결 추구
nmcli connection add type ethernet con-name 이름 ifname 인터페이스이름 ip4 주소/넷마스크비트수 gw 게이트웨이주소
연결 수정
nmcli connection modify 커넥션이름 속성 값
- 수정은 게이트웨이나 IP를 수정
IP 주소 변경
nmcli con mod 연결이름 ipv4.address IP주소
게이트웨이
nmcli con mod 연결이름 ipv4.gateway IP주소
특정 네트워크로 가는 경로를 지정
nmcli con mod 연결이름 ipv4.routes "네트워크경로 거쳐갈 라우터"
nmcli con mod 연결이름 ipv4.routes "192.168.122.2.0/24 192.168.122.1"
- 192.168.2.0 네트워크에 갈 때는 192.168.122.1을 거쳐서 이동
연결 삭제
nmcli connection delete 컨넥션이름
연결 다시 읽어오기
nmcli connection reload
nmcli connection load 컨넥션이름
네트워크 장치 상태 보기
- 상태 확인:
nmcli dev status
- 상세한 정보 보기:
nmcli dev show
- 상태 확인:
IP명령으로 네트워크 설정
- 형식
ip [옵션] 객체 [서브명령]
- 옵션
V: 버전을 출력 s: 자세히 출력
- 서브명령
address [add | del | show | help] : 장치의 IP Address 관리 route [add | del | help] : 라우팅 테이블 관리 link [set] : 네트워크 인터페이스를 활성화하거나 비활성화
- ip route 명령을 static routing 이라고 함
- 최근에 추가한 네트워크의 경우 동적 라우팅이라고 인식하는데 시간이 걸릴 수 있기 때문에 정적 라우팅을 이용해서 직접 등록을 해서 사용하는 경우가 있음
- 동적 라우팅은 다른 라우터가 광고한 내역을 업데이트 해야만 그 네트워크를 인식할 수 있음
- IP 확인
ip addr show
- IP 주소 설정
sudo ip addr add 아이피/서브넷비트수 dev 컨넥션
- IP 주소 삭제
sudo ip addr del 아이피/서브넷비트수 dev 컨넥션
- 라우팅 테이블 확인
ip route show
- 기본 게이트웨이 주소 설정
sudo ip route add default via 게이트웨이주소 dev 커넥션
ifconfig 명령
- 이 명령은 리눅스에서 설치가 안되어 있음
- net-tools 패키지를 설치해야만 함
- 이 명령을 단독으로 사용하면 모든 커넥션 정보를 조회
- 이 명령은 MAC Address 조회 가능
네트워크 상태 확인
ping
- 시스템이 외부와 통신이 되는지 확인하거나 서버가 동작하는지 확인할 때 사용
- 형식
ping [옵션] [네트워크주소 - IP주소 또는 Domain]
- 옵션
a: 통신이 되면 소리를 냄 q: 테스트 결과를 지속적으로 보여주지 않고 종합 결과만 출력 c숫자: 보낼 패킷 수를 지정
- 아무런 옵션 없이 사용하면 56Byte의 패킷을 계속 보냄
- ping 명령을 이용해서 패킷을 전송했는데 응답이 오지 않는 경우가 있는데 이 경우 보안을 강화하기 위해서 ping 명령에 응답하지 않도록 했을 수도 있음
netstat (중요)
- 네트워크 연결 상태, 라우팅 테이블, 인터페이스 관련 통계 정보를 출력
- 열려있는 포트 정보도 조회
- 윈도우즈에서 특정 포트가 열려있는지 확인한 후 그 포트를 닫고자 하는 경우에도 사용 (
netstat -ano
,taskkill /f /pid 포트번호
)
- 윈도우즈에서 특정 포트가 열려있는지 확인한 후 그 포트를 닫고자 하는 경우에도 사용 (
- 기본 형식
netstat [옵션]
- 옵션
a: 모든 소켓 정보를 출력 r: 라우팅 정보 출력 n: 호스트 이름 대신에 IP를 출력 i: 모든 네트워크 인터페이스 정보 s: 프로토콜 별로 네트워크 통계 정보 p: 해당 소켓과 관련된 프로세스의 이름과 PID 출력
- 현재 열려 있는 포트 확인
netstat -an | grep LISTEN
- 현재 열려 있는 포트를 사용중인 프로세스 확인
sudo netstat -p
MAC주소와 IP주소 확인
- 같은 네트워크에 연결된 시스템 정보 조회
- Address Resolution Protocol 명령 이용
- 명령
arp
패킷 캡쳐 명령
- 패킷을 캡쳐해서 확인하는 명령은
tcpdump
- 네트워크의 상태를 확인하기 위해 패킷을 캡쳐해서 분석할 때 사용
- 이 명령으로 덤프한 데이터는 해킹의 도구가 될 수 있으므로 주의해야 함
- 기본형식
tcpdump [옵션]
- 옵션
c 패킷수: 패킷수 만큼만 덤프받고 종료 i 인터페이스: 특정 인터페이스의 패킷을 캡쳐 n: IP 주소를 호스트명으로 변경하지 않음 q: 간단한 형태로 보여줌 X: 16진수와 ASCII로 출력 w 파일경로: 덤프한 내용을 파일에 저장 r 파일경로: 덤프한 내용을 지정한 파일에서 읽어옴 host 호스트이름 또는 IP주소: 지정한 호스트와 주고받은 패킷만 캡쳐 tcp 포트번호: 지정한 포트번호 패킷만 덤프 ip: ip패킷만 덤프 ex) sudo tcpdump -c 개수 -w 파일경로
서버 관리
원격 접속
- 서버는 로컬에 위치하는 경우가 거의 없음
- 서버는 대부분 원격에 위치하게 되고 이 경우 원격에서 접속해서 작접을 수행
telnet
- 원격 접속 프로토콜의 이름
- 텔넷을 설치한 원격지 서버를 만들고 외부에서 접속을 해서 사용
- 서버 설치 확인
dpkg -l | grep telnet
- 기본적으로 telnet client가 설치되어 있음
- 서버 설치
- telnet서버는 standalone데몬(독자적으로 동작하는)이 아님
- 텔넷 서버는 슈퍼 데몬(혼자서 동작하지 않고 다른 데몬과 같이 동작)
- 설치를 하게 되면 inetd 라는 슈퍼 데몬과 같이 설치됨
sudo apt -y install telnetd
- 설치가 되면 서비스가 바로 시작
- 설치 및 실행 확인
systemctl status inetd
- 리눅스에서 텔넷 접속
- 로컬 접속:
telnet 0
- 다른 컴퓨터의 telnet 접속
telnet> open 아이피나(10.0.2.15) 도메인
- Mac은 telnet 클라이언트가 설치되어 있어서 telnet 아이디와 컴퓨터 주소를 이용해서 접속을 하면 됨
- Windows는 텔네 접속 도구가 포함되어 있는데 기본 설치를 하면 처음 열리지 않음
- Windows 기능에서 텔넷 클라이언트를 추가해주어야 함
- virtual box에 리눅스를 설치한 경우에는 포트 포워딩을 해줘야 함
- 현재 컴퓨터의 IP(192.168.202.207)와 포트번호(23)를 가상 머신의 리눅스의 IP(10.0.2.15)와 포트번호(23)를 매핑
- 현재 컴퓨터의 IP를 이용해서 접속하면 가상 머신의 리눅스에 접속을 하게 됨
- 로컬 접속:
SSH
- 텔넷으로 원격에서 접속할 수 있는 서버를 만들 수 있음
- 텔넷은 데이터가 암호화되서 전송되지 않음
- 패킷을 캡쳐하면 전송되는 데이터를 알 수 있음
- Secure SHell 은 데이터를 암호화해서 전송
- 텔넷보다 보안이 우수
- 우분투에서는 SSH가 기본 데몬이 아니므로 설치를 해야 함
- 패키지 이름은 openssh-server
- 서비스 이름은 ssh
- 기본 포트는 22번, tcp 프로토콜 사용
- 설치 및 시작
- openssh도 슈퍼데몬이므로 일반적으로 설치와 동시에 실행
sudo apt -y install openssh-server
- 재시작하고 처음부터 가동되는 서비스로 등록하고 확인
sudo systemctl start ssh
sudo systemctl enable ssh
systemctl status ssh
- 방화벽에 22번 포트를 추가해서 외부에서 22번으로 접속할 수 있도록 설정
ufw allow 포트번호/프로토콜
- ip > tcp,udp > telnet, ftp, http, https, dhcp, dns, snmp, icmp, smtp, pop3
- openssh-server 대신에 ssh 패키지 설치해도 됨
- virtualbox를 사용하는 경우는 포트 포워딩을 해줘야 함
- 클라이언트에서 접속
ssh 아이디@IP
- windows에서 접속이 안되는 경우는 키가 중복되서 에러가 발생하는 경우가 있음
ssh-keygen -R IP주소
- 명령을 이용해서 키를 제거한 후 다시 접속하면 됨
XDRP
- 원격 데스크탑
- GUI 환경의 리눅스를 외부에서 접속해서 사용하기 위한 기능
- 패키지 이름과 서비스 모두 xdrp 이고 포트번호는 3389번
sudo apt install xdrp
sudo systemctl start xdrp
sudo systemctl enable xdrp
sudo systemctl status xdrp
ufw allow 6389/tcp
6389번 포트 포트포워딩
외부의 원격 데스크탑 프로그램에서 접속
데이터베이스 서버
mariadb
- mysql의 fork
- 패키지 이름: mariadb-server, mariadb-client
- 서비스이름: mariadb
- mysql fork라서 mysql이나 mysqld로 해도 됨
- 설정파일 위치
- linux: /etc/mysql/mariadb.conf.d/50-server.cnf
- 옵션: bind-address-접속가능IP, datadir-데이터저장위치
- 리눅스에서 mysql접속
sudo mysql
명령을 실행하면 root로 접속
- 관리자 비밀번호 설정
- 외부에서 접속이 가능하도록 하려면 비밀번호 필요
mysqladmin -u root password '비밀번호'
- 외부 접속이 가능하도록 설정
- 3306번 포트를 방화벽에 추가
- virtualbox의 경우는 포트포워딩을 수행
- mysql 설정 파일을 열어서 bind-address를 접속할 클라이언트의 IP나 0.0.0.0으로 수정
- 되도록이면 root 유저를 직접 접속하도록 하는 것보다는 새로운 유저를 생성을 해서 외부 접속 권한을 부여하고 접속하는 것이 좋음
- mariadb 버전이 최신 버전이면 접속할 때 암호화 때문에 비밀번호가 틀렸다고 할 수 있음
방화벽
- 외부에서 접근하는 트래픽을 제어하기 위한 소프트웨어가 방화벽
- 내부에서 외부로 나가는 트래픽을 제어하기 위한 소프트웨어는 proxy
- 자바스크립트는 브라우져 내부에서만 동작하기 때문에 브라우져 외부의 데이터에 접근 못함
- 자바스크립트를 이용해 외부 데이터 가져올려면 프록시 서버를 이용
방화벽 상태 확인 - 패키지와 서비스 이름이 ufw
- 설치되어 있는지 확인
dpkg -l | grep ufw
- 서비스 상태 확인
systemctl status ufw
- 방화벽 시작
sudo ufw enable
- 방화벽 종료
sudo ufw disable
관련 명령
- ufw 서브명령
enale disale default all | deny | reject [incoming | outgoing] : 기본 동작 설정 status [verbose] : 방화벽의 상태 출력 allow 서비스 | 포트/프로토콜 : 허용 deny 서비스 | 포트/프로토콜 : 거부 delete 명령 : 명령으로 설정한 규칙을 삭제
- 웹 서버를 구동해서 외부에서 접근이 가능하도록 방화벽을 설정
sudo ufw allow http(80/tcp)
sudo ufw allow https(443/tcp)
- telnet(23 - tcp) 접속을 거부하도록 방화벽을 설정
sudo ufw deny telnet
- telnet 거부 규칙을 제거
sudo ufw delete deny telnet
- 포트를 직접 설정할 때는 tcp나 udp 같은 프로토콜을 같이 기재
- 특정 IP 를 가진 곳에만 적용
- ftp 서비스에 192.168.200.207만 접속이 가능하도록 설정
sudo ufw allow from 192.168.200.207 to any port ftp
데이터베이스 (mariadb, mysql) 서버 외부에 접속 가능하도록 하기
- 방화벽에 데이터베이스 서버 애플리케이션의 포트를 허용
sudo ufw allow 3306/tcp
sudo ufw allow 3306/udp
- 데이터베이스 애플리케이션들은 로컬 호스트에 접속하도록 되어있는데 이 부분을 외부에서 접근이 가능하도록 수정
- 127.0.0.1로 되엉 있는 부분은 0.0.0.0이나 접속하고자 하는 컴퓨터의 IP로 수정
- MySQL의 경우는 각 유저별로 접속할 수 있는 IP 대역과 데이터베이스를 설정해주어야 함
- 루트비밀번호 설정
sudo mysqladmin -u root password '비밀번호'
grant all on *.* to 'root'@'%' identified by '00000000';
- 접속
mysql -u root -p
- 유저가 사용할 수 있는 IP대역과 데이터베이스 설정
use mysql; grant all on 데이터베이스이름 to '유저명'@'IP' identified by '비밀번호'; flush privileges;
- virtualbox에서는 포트포워딩을 해줘야 함
웹서버
- 웹 브라우저에서 DOMAIN이나 IP 주소를 가지고 접속할 수 있도록 해주는 서버
- 리눅스나 윈도우즈는 기본적으로 웹 서버 기능을 제공
- 기본적인 웹서버는 html만 서비스가 가능
- 대부분의 경우는 WAS(Web Application Server - Web Server + Application Server)를 이용해서 서비스를 제공
설정
sudo apt install apache2
systemctl status apache2
- 기본 디렉터리: /var/www/html