리눅스는 안정성과 보안성이 뛰어나 많은 서버와 네트워크 환경에서 널리 사용됩니다. 하지만 기본적인 보안 조치를 취하지 않으면 잠재적인 보안 위협에 노출될 수 있습니다. 이번 포스트에서는 리눅스에서 사용하는 다양한 보안 명령어를 소개하고, 이를 통해 시스템의 안전성을 높이는 방법을 알아보겠습니다.
파일 권한 설정
리눅스 시스템에서 파일과 디렉토리의 접근 권한을 설정하는 것은 보안의 기본 중 하나입니다. 이를 위해 chmod, chown, chgrp 명령어를 사용할 수 있습니다.
chmod 명령어
chmod는 파일의 권한을 변경하는 데 사용됩니다. 파일의 소유자(owner), 그룹(group), 기타 사용자(other)에 대한 읽기(read), 쓰기(write), 실행(execute) 권한을 설정할 수 있습니다.
위 명령어는 소유자에게 읽기, 쓰기, 실행 권한을, 그룹과 기타 사용자에게는 읽기와 실행 권한을 부여합니다.
주요 옵션:
- -R : 디렉토리와 그 안의 모든 파일에 대해 재귀적으로 권한을 변경합니다.
- u : 소유자(owner)
- g : 그룹(group)
- o : 기타 사용자(other)
- a : 모든 사용자(all)
위 명령어는 directory_name과 그 안의 모든 파일과 디렉토리에 대해 권한을 재귀적으로 변경합니다.
chown 명령어
chown은 파일이나 디렉토리의 소유자를 변경하는 데 사용됩니다.
위 명령어는 해당 파일의 소유자를 user로, 그룹을 group으로 변경합니다.
주요 옵션:
- -R : 디렉토리와 그 안의 모든 파일에 대해 재귀적으로 소유자를 변경합니다.
- --reference : 다른 파일의 소유자와 그룹을 참조하여 변경합니다.
위 명령어는 directory_name과 그 안의 모든 파일과 디렉토리에 대해 소유자를 재귀적으로 변경합니다.
chgrp 명령어
chgrp는 파일이나 디렉토리의 그룹 소유자를 변경하는 데 사용됩니다.
위 명령어는 해당 파일의 그룹 소유자를 group으로 변경합니다.
주요 옵션:
- -R : 디렉토리와 그 안의 모든 파일에 대해 재귀적으로 그룹 소유자를 변경합니다.
위 명령어는 directory_name과 그 안의 모든 파일과 디렉토리에 대해 그룹 소유자를 재귀적으로 변경합니다.
사용자 관리
리눅스 시스템에서 사용자와 그룹을 효과적으로 관리하는 것은 보안 유지에 중요합니다. 이를 위해 useradd, usermod, userdel 등의 명령어를 사용할 수 있습니다.
useradd 명령어
useradd는 새로운 사용자를 생성하는 데 사용됩니다.
위 명령어는 newuser라는 새 사용자를 생성합니다.
주요 옵션:
- -d : 사용자의 홈 디렉토리를 지정합니다.
- -m : 홈 디렉토리를 생성합니다.
- -s : 사용자의 기본 셸을 지정합니다.
- -G : 추가 그룹을 지정합니다.
위 명령어는 newuser라는 사용자를 생성하고, 홈 디렉토리 /home/newuser를 만들며, 기본 셸을 /bin/bash로 지정하고, sudo 그룹에 추가합니다.
usermod 명령어
usermod는 기존 사용자의 속성을 변경하는 데 사용됩니다.
위 명령어는 username 사용자를 groupname 그룹에 추가합니다.
주요 옵션:
- -a : 그룹 추가 시 기존 그룹에서 사용자를 제거하지 않고 추가합니다. -G 옵션과 함께 사용됩니다.
- -d : 사용자의 홈 디렉토리를 변경합니다.
- -s : 사용자의 기본 셸을 변경합니다.
- -l : 사용자의 로그인 이름을 변경합니다.
- -L : 사용자의 계정을 잠급니다.
- -U : 사용자의 계정을 잠금 해제합니다.
위 명령어는 username 사용자의 홈 디렉토리를 /newhome/username으로 변경하고, 기존 홈 디렉토리의 내용을 새로운 디렉토리로 이동합니다.
userdel 명령어
userdel은 사용자를 삭제하는 데 사용됩니다.
위 명령어는 username 사용자를 시스템에서 삭제합니다.
주요 옵션:
- -r : 사용자의 홈 디렉토리와 메일 스풀을 함께 삭제합니다.
위 명령어는 username 사용자를 삭제하고, 해당 사용자의 홈 디렉토리와 메일 스풀도 함께 삭제합니다.
로그 분석
리눅스 시스템의 로그 파일을 분석하여 보안 위협을 감지하고 대응할 수 있습니다. 주요 로그 파일은 /var/log 디렉토리에 위치하며, syslog, auth.log, secure 등이 있습니다.
tail 명령어
tail은 로그 파일의 마지막 부분을 출력하는 데 사용됩니다.
위 명령어는 auth.log 파일의 최신 로그를 실시간으로 출력합니다.
주요 옵션:
- -f : 파일의 마지막 부분을 계속 출력하며, 파일이 갱신될 때마다 새로운 내용을 출력합니다.
- -n : 출력할 라인의 개수를 지정합니다.
위 명령어는 syslog 파일의 마지막 50줄을 출력합니다.
grep 명령어
grep은 특정 패턴을 검색하는 데 사용됩니다.
위 명령어는 auth.log 파일에서 "Failed password" 문자열을 포함한 모든 라인을 검색합니다.
주요 옵션:
- -i : 대소문자를 구분하지 않고 검색합니다.
- -r : 디렉토리를 재귀적으로 검색합니다.
- -v : 패턴과 일치하지 않는 라인만 출력합니다.
- -A : 매칭된 라인 이후의 라인도 함께 출력합니다.
- -B : 매칭된 라인 이전의 라인도 함께 출력합니다.
위 명령어는 syslog 파일에서 "error" 문자열을 대소문자 구분 없이 검색합니다.
방화벽 설정
리눅스에서 방화벽을 설정하여 외부로부터의 불필요한 접근을 차단할 수 있습니다. iptables와 firewalld가 대표적인 방화벽 관리 도구입니다.
iptables 명령어
iptables는 패킷 필터링 및 네트워크 주소 변환을 위한 방화벽 도구입니다.
위 명령어는 22번 포트(SSH)에 대한 TCP 연결을 허용합니다.
주요 옵션:
- -A : 새로운 규칙을 체인의 끝에 추가합니다.
- -D : 체인에서 규칙을 삭제합니다.
- -I : 체인의 특정 위치에 규칙을 삽입합니다.
- -L : 체인의 규칙 목록을 출력합니다.
- -F : 체인의 모든 규칙을 삭제합니다.
- -p : 프로토콜을 지정합니다.
- --dport : 대상 포트를 지정합니다.
- -j : 패킷의 처리를 결정합니다(ACCEPT, DROP 등).
위 명령어는 현재 설정된 방화벽 규칙을 출력합니다.
firewall-cmd 명령어
firewall-cmd는 동적 방화벽 관리 도구로, zone 개념을 사용합니다.
위 명령어는 HTTP 서비스를 영구적으로 허용하고, 방화벽 설정을 재시작합니다.
주요 옵션:
- --permanent : 설정을 영구적으로 저장합니다.
- --add-service : 특정 서비스를 허용합니다.
- --remove-service : 특정 서비스를 차단합니다.
- --zone : 설정을 적용할 zone을 지정합니다.
- --list-all : 모든 설정을 출력합니다.
- --reload : 방화벽 설정을 재시작합니다.
위 명령어는 public zone의 모든 설정을 출력합니다.
암호화
리눅스 시스템에서 데이터의 기밀성을 유지하기 위해 암호화를 사용할 수 있습니다. gpg와 openssl이 대표적인 암호화 도구입니다.
gpg 명령어
gpg는 파일을 암호화하고 서명하는 데 사용됩니다.
위 명령어는 filename을 대칭 키로 암호화합니다.
주요 옵션:
- -c : 대칭 키 암호화를 사용합니다.
- --decrypt : 암호화된 파일을 해독합니다.
- --sign : 파일에 디지털 서명을 추가합니다.
- --verify : 디지털 서명을 검증합니다.
- -o : 출력 파일을 지정합니다.
위 명령어는 filename.gpg 파일을 해독합니다.
openssl 명령어
openssl은 SSL/TLS 암호화 도구로, 다양한 암호화 작업을 수행할 수 있습니다.
위 명령어는 filename을 AES-256 알고리즘으로 암호화하여 filename.enc로 저장합니다.
주요 옵션:
- enc : 암호화 명령을 사용합니다.
- -aes-256-cbc : AES-256-CBC 알고리즘을 사용합니다.
- -in : 입력 파일을 지정합니다.
- -out : 출력 파일을 지정합니다.
- -d : 암호화된 파일을 해독합니다.
- -k : 암호화 키를 지정합니다.
위 명령어는 filename.enc 파일을 해독하여 filename.dec로 저장합니다.
결론
리눅스 시스템의 보안을 강화하기 위해 다양한 명령어를 사용할 수 있습니다. 파일 권한 설정, 사용자 관리, 로그 분석, 방화벽 설정, 암호화 등을 통해 시스템의 안전성을 높일 수 있습니다.