사용자 계정 확인

전체 사용자 계정 확인

cat /etc/passwd

 

useradd를 이용해 등록된 사용자만 보기

grep /bin/bash /etc/passwd

 

사용자 계정 설명

adm

시스템 관리자를 위한 별도의 계정

 

lp

로컬 프린터 서버 계정

 

sync

원격지 서버 동기화 계정

 

shutdown

시스템 종료 계정

 

halt

강제 시스템 종료 계정

 

news

뉴스그룹 서버용 계정

 

uucp

유닉스 시스템과 파일 복사를 위한 프로토콜 계정

 

operator

특수목적용 계정으로, 시스템 백업 등 여러 사용자가 시스템을 공통 관리하기 위해 사용되는 계정

 

games

X11(X윈도우) 화면에서 게임을 할 때 사용하는 계정

 

avahi-autoipd

DNS 관련된 계정

avahi-autoipd is a service provided by the Avahi daemon on Linux, which implements network services discovery using the mDNS/DNS-SD (Multicast DNS / DNS Service Discovery) protocol. Specifically, avahi-autoipd is responsible for assigning an Automatic Private IP Addressing (APIPA) address to a network interface when it cannot obtain an IP address from a DHCP server.

 

avahi-autoipd is part of the Avahi service on Linux systems and is responsible for assigning link-local IP addresses (APIPA addresses) when a DHCP server is unavailable. It helps maintain basic network connectivity on local networks and is part of the broader Zero Configuration Networking (zeroconf) system.

 

tss

암호화 키 생성, 플랫폼 무결성 검증과 관련된 TPM 소프트웨어 스택 관리용 계정

The tss user on a Linux system is a system user created to manage the Trusted Platform Module (TPM) software stack. TPM is a hardware component that provides secure generation and storage of cryptographic keys, as well as platform integrity verification.

The tss user is associated with the TrouSerS software (or other TPM-related software), which is the open-source implementation of the TPM Software Stack (TSS). This user is created to run the TPM-related services with minimal privileges for security purposes.

 

The tss user in Linux is a system account created to manage the TPM Software Stack (TSS) and run TPM-related services, ensuring secure interactions with the Trusted Platform Module (TPM). It provides essential security features for cryptography, encryption, and platform integrity in systems with TPM hardware.

 

postfix

메일 전송 관련 계정

The postfix user on a Linux system is a system account created for the Postfix mail transfer agent (MTA). Postfix is a widely used open-source software for routing and delivering email. It’s designed to be secure, fast, and easy to configure, often serving as a replacement for the older Sendmail MTA.

The postfix user is used to run Postfix services and processes with minimal privileges, adhering to the principle of least privilege to enhance security.

 

The postfix user on Linux is a system account created to run the Postfix mail transfer agent (MTA). It ensures that Postfix's email processing tasks are handled securely by limiting privileges, as most Postfix processes run under the postfix user instead of root. This helps enhance the security of the mail server and minimizes the risk of exploitation.

 

saslauth

인증 관련 계정

The saslauth user on a Linux system is a system account associated with the Cyrus SASL (Simple Authentication and Security Layer) authentication library. SASL is a framework that provides authentication and data security services for network protocols such as SMTP, IMAP, and LDAP.

The saslauth user is created to run the SASL authentication daemon (saslauthd), which handles authentication requests from various services and applications. This system account ensures that the saslauthd service runs with minimal privileges, adhering to security best practices.

 

The saslauth user on Linux is a system account used to run the SASL authentication daemon (saslauthd), which provides secure user authentication for various services like email, LDAP, and others. The saslauth user ensures that the saslauthd process runs with minimal privileges, enhancing the overall security of the system by reducing potential attack surfaces.

 

polkitd

시스템 전체 권한 관리용 계정

The polkitd user on a Linux system is a system account used by Polkit (formerly known as PolicyKit), which is a framework for managing system-wide privileges. Polkit is commonly used to handle authorization for actions that require elevated privileges (such as running administrative tasks) in a controlled and secure manner.

 

The polkitd user in Linux is a system account used to run the Polkit daemon (polkitd), which is responsible for managing and making authorization decisions on privileged system actions. By running Polkit with minimal privileges under the polkitd user, the system enhances security while allowing non-root users to perform administrative tasks based on defined policies.

 

nobody

최소 권한이 필요한 프로세스용 계정

The nobody user on a Linux system is a system account used for processes that do not require ownership by a specific user or for which minimal privileges are necessary. This account is commonly used to run services and processes that don’t need access to any critical system resources or files. By running these services under the nobody user, the system limits their access, improving security.

 

The nobody user on Linux is a non-privileged system account used to run processes with minimal system access. It provides an extra layer of security by ensuring that services that don’t need high privileges can only interact with limited parts of the system. This user is commonly used for network-facing services, daemons, or temporary file ownership, and it operates with the least possible permissions to reduce security risks.

 

named

DNS 서버용 계정

The named user on a Linux system is a system account created for running the BIND (Berkeley Internet Name Domain) service, which is one of the most common DNS (Domain Name System) server software packages. The BIND DNS server (often called named, short for name daemon) translates domain names into IP addresses and vice versa.

The named user ensures that the DNS server runs with limited privileges, adhering to the principle of least privilege, which enhances security by minimizing the potential damage that could occur if the DNS service were compromised.

 

The named user on Linux is a system account created to run the BIND DNS server daemon (named) with limited privileges. This enhances the security of the system by ensuring that the DNS service, which is often exposed to the internet, cannot access or modify sensitive files. BIND is one of the most widely used DNS server software packages, and running it under the named user follows the principle of least privilege to reduce security risks.:

웹 서버 (Web server) 란

하드웨어 측면과 소프트웨어 측면에서 정의 가능합니다.

1. 하드웨어 측면에서는,

웹 서버 소프트웨어와, 웹사이트를 구성하는 파일들(예를 들어 HTML 문서, 이미지, CSS, JavaScript 파일 등)을 저장하고 있는 컴퓨터입니다.

2. 소프트웨어 측면에서는,

HTTP 서버입니다. HTTP 서버는 URL(웹 주소)와 HTTP 프로토콜을 이해하는 소프트웨어입니다. HTTP 서버는 도메인 네임을 통해 접속 가능하며, 요청된 URL에 해당하는 호스팅된 웹사이트의 컨텐츠를 최종 사용자의 장치에 전달합니다.

 

웹 서버 역할

  • HTTP 통신: HTTP 통신을 통해 사용자와 서버간 데이터 교류
  • 정적 데이터 제공: HTTP 프로토콜을 통해 정적 콘텐츠를 클라이언트에게 제공
  • 로깅: 보안 및 통계 목적으로 로그파일에 클라이언트의 요청 및 서버 응답 정보 로깅
  • 가상호스팅: 하나의 IP주소를 사용해 많은 웹사이트(DNS)를 제공 가능
  • 권한 부여: 웹 리소스 일부에 대해 접근 제어 가능
  • 캐싱: 서버 응답 속도를 높이기 위해 정적 및 동적 컨텐츠 캐시 가능
    • 정적 데이터는 파일을 복사한 후 캐시서버에 저장해뒀다 사용
    • 동적 데이터는 요청에 대한 결과를 짧은 시간동안 캐시했다가 사용
  • 대역폭 조절: 네트워크 포화를 방지하고 서버 다운을 방지하기 위해 응답 속도 제한

 

웹 서버의 종류

Apache, NGINX, IIS, Google Web Server, CloudFlare 등.. 다양한 종류가 있습니다. 전통적으로 Apache와 IIS가 강자였는데, 2019년 이후로는 Nginx가 Apache, IIS보다 점유율이 향상되는 등 꾸준히 업데이트를 진행하며 발전중에 있습니다.

 

Apache

무료 오픈소스 크로스플랫폼 웹 서버 소프트웨어입니다.

  • 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
  • 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음

 

NGINX

아파치의 C10K (Connection 10000 Problem) 문제를 해결하기 위해 만든 웹 서버 소프트웨어 입니다.

  • 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행 
  • 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
C10K 문제란,
서버 트래픽량이 높아져서 서버에 동시 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 문제.

아파치에서는 커넥션마다 프로세스를 할당 하기에, 동시 연결된 커넥션이 10000개인 경우, 10000개의 프로세스가 할당되어야 하고, 프로세스마다 1M의 메모리를 사용한다면 10000M의 메모리 = 약 9.76G의 메모리가 필요해지는 등 메모리 부족 현상이 나타나 커넥션을 연결할 수 없는 문제가 발생함.

이러한 구조적 문제를 해결하기 위해 적은 메모리와 프로세스로 대량의 동시 연결을 처리할 수 있는 비동기 이벤트 기반 구조의 NGINX 서버를 개발함.

 

어떤 서버를 사용할까?

.htacess 파일을 활용하거나 NGINX에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 NGINX를 사용하면 됩니다.

 

또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 NGINX를 프록시 서버로 활용할 수 있습니다.

  • NGINX에서 동시 커넥션 유지를 해주고 + static 리소스를 바로 제공해주면서, 동적 리소스가 필요한 요청만 Apache로 보낼 수 있음
  • NGINX와 Apache가 같은 네트워크 안에 있는 경우, NGINX의 SSL 터미네이션 기능 활용이 가능. 클라이언트와 NGINX서버까지는 https 통신을 하고, NGINX와 Apache 사이에는 http 통신을 함으로써 Apache 서버가 복호화 과정을 감당하지 않도록 하여 부하를 줄임

 

참고

https://daram.tistory.com/532

https://bentist.tistory.com/80

https://ssdragon.tistory.com/60

https://sorjfkrh5078.tistory.com/289

https://idchowto.com/web-server-program-apache-vs-nginx/

https://jungyu09.tistory.com/12

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

goaccess

오픈 소스로된 실시간 웹 로그 분석기

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

 

1. 설치

1-1. 소스 다운받아서 수동 설치

https://goaccess.io/download

$ wget https://tar.goaccess.io/goaccess-1.9.1.tar.gz
$ tar -xzvf goaccess-1.9.1.tar.gz
$ cd goaccess-1.9.1/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
$ make install

 

1-2. 패키지 매니저로 설치

패키지 매니저로 설치 시, 최신버전 설치가 안될 수 있음. 최신버전 설치를 위해서는 소스 다운받아서 수동 설치하기

CentOS

$ yum install goaccess

 

 

2. 실행

https://goaccess.io/get-started

2-1. 터미널 Output

1) goaccess 실행

goaccess /var/log/httpd/access.log -c

 

2) 로그 포맷 선택 화면이 나옴. 화살표로 본인에게 맞는 설정으로 이동 후, 스페이스바 눌러 선택 (내 경우는 맨 처음 나오는 NCSA Combined Log Format 선택) 

 

3) 로그 포맷이 다르면, 해당 메뉴로 이동하여 수정

 

4) 엔터 누르면 goaccess 실행됨

 

5) 내용 살펴보기

- 위/아래 화살표로 화면 이동

- 원하는 메뉴 자세히 보고 싶으면 해당 숫자 누름

- 해당 메뉴에서 다음 페이지 정보 보고 싶으면 Page Up/Down 버튼 누름

- 해당 메뉴에서 빠져 나오려면 q

2-2. Static HTML Output

goaccess /var/log/httpd/access.log -o report.html --log-format=COMBINED

 

2-3. Real-Time HTML Output

goaccess /var/log/httpd/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html

 

 

 

참고

로그 툴 모음 : https://www.oss.kr/info_techtip/show/93661cc3-1f20-413e-b80c-c80164342b9b?page=6

https://m.blog.naver.com/jogilsang/222123572581

 

 

'서버,데스크탑 > Apache' 카테고리의 다른 글

웹 서버(Web Server)란  (0) 2024.02.16

디스크 관련

디스크 사용량 보기

// 루트부터 뎁스별로 확인해가기
du -h --max-depth=1 
// 또는
du -h -d 1

디렉토리 크기로 정렬

// 내림차순
du -m -d 1 | sort -rn

// 오름차순
du -m -d 1 | sort -n

디스크 free 용량 보기

df -h

 

사용자 관련

사용자 추가

useradd [username]

 

사용자 추가하면서 그룹에도 추가

useradd -G [groupname] [username]

 

사용자 비밀번호 변경

passwd [username]

 

기존 사용자를 그룹에 추가

usermod -a -G [groupname] [username]

 

사용자 삭제

- 계정만 삭제

userdel [계정명]

- 계정 + 홈디렉토리 삭제

userdel -r [계정명]

 

디렉토리 관련

현재 디렉토리 위치(경로) 보기

pwd

 

디렉토리 생성

mkdir [생성할 디렉토리명]

예) mkdir test

 

디렉토리 삭제

- 빈 디렉토리 삭제

rmdir [삭제할 디렉토리명]

예) rmdir test

 

- 비어있지 않은 디렉토리와, 하위 파일들 모두 삭제

rmdir -r [삭제할 디렉토리명]

예) rmdir -r test

 

- 비어있지 않은 디렉토리와, 하위 파일(쓰기 금지된 파일 포함)들 모두 삭제

rmdir -rf [삭제할 디렉토리명]

예) rmdir -rf test

 

포트 관련

사용중인 포트 확인

netstat -ltup

ss -lntu

 

파일 관련

특정 파일에 실행권한 추가

// sudo chmod +x /usr/local/bin/[파일명]
sudo chmod +x /usr/local/bin/docker-compose

문제상황

EC2 서버에 접속시, 인스턴스를 시작시 생성한 key pair 이용한다.

이 때 해당 key로 ssh 접속은 잘 되는데, putty로 접속하려고 하면 'server refused our key' 라는 메시지가 뜨면서 접속이 안된다.

(기본적인 연결 설정은 모두 다 했다. PuTTYgen을 이용하여 프라이빗 키 .pem을 ppk로 변경하고 키 파일경로 설정, 올바른 username 입력 등. 방법은 다음 링크 참고 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html)

 

그래도 연결이 안되고, 서버쪽 로그를 살펴보면 아래와 같은 로그가 남아있다.

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
sshd[15855]: error: Received disconnect from xxx.xxx.xxxx port 51001:14: No supported authentication methods available [preauth]

 

해결방법

ssd_config를 수정 후, sshd를 재실행 해주니 putty 접속이 된다.

 

1. /etc/ssh/sshd_config를 아래와 같이 수정해준다.

# /etc/ssh/sshd_config
PubkeyAuthentication yes # 주석을 풀어, PubKeyAuthentication을 허용해준다.
PubkeyAcceptedKeyTypes=+ssh-rsa	# 이 내용을 추가해준다.

 

2. sshd를 재실행 한다. (ubuntu 에서의 명령어)

$ sudo systemctl restart sshd

 

3. putty로 다시 접속 해본다.

문제상황

리눅스에서 docker login을 하려고 하는데, 아래와 같은 메시지가 뜨면서 로그인이 안되는 경우가 있다.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied

 

해결방법

/var/run/docker.sock에 접근할 권한이 없어서 그렇다. sudo 명령어 사용해서 로그인 하면, 에러 없이 잘 된다.

# sudo docker login

# Username: 아이디 입력

# Password : 비밀번호 입력

로그인 된다.

AWS EC2 서버에 설치된 도커에, MariaDB를 설치해보도록 하겠다.

 

1. DB 이미지를 받아온다 (docker pull)

docker pull [이미지명:태그]

 

아래는 최신버전의 mariadb 이미지를 받아오는 명령이다.

# sudo docker pull mariadb

특정 버전을 받고 싶다면, [:버전태그] 를 추가해준다.

사용 가능한 버전은 https://hub.docker.com/ 여기서 확인 가능하다.

# sudo docker pull mariadb:10.8

 

2. DB 이미지를 컨테이너로 실행한다. (docker run)

docker run --name [컨테이너 이름] -e [환경변수=값] -d -p [포트:포트] -v [호스트 디렉토리:컨테이터 디렉토리] [이미지명:버전태그]

 

아래는 mariadb-container라는 컨테이너 이름으로 mariadb:latest 이미지를 실행하는 예이다.

# sudo docker run --name mariadb-container -e MYSQL_ROOT_PASSWORD=wordpress -d -p 3306:3306 -v /home/username/volume/mysql:/var/lib/mysql mariadb:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
※ 옵션 설명
--name
: 생성할 컨테이너 이름
-e : 환경변수 (password) 설정
-d : Dispatch mode (백그라운드에서 실행)
-p : 포트 연결 (외부포트: Docker 내부포트)
mariadb:latest : 컨테이너로 실행할 이미지 이름 
-v : 디렉토리 마운트. 호스트 디렉토리를 컨테이너의 디렉토리로 마운트
▶ docker에 DB를 설치하는 경우, 컨테이너를 삭제하면 데이터도 함께 날아가므로, 저장소는 꼭 외부 저장소(호스트 디렉토리)를 마운트하여 사용해야 한다
▶ 호스트 디렉토리는 EC2 서버에 존재하는 디렉토리이다. (원하는 경로를 마운트 해주면 된다.)
▶컨테이너 디렉토리 경로로 지정한 /var/lib/mysql 는 일반적으로 mysql 데이터파일이 저장되는 경로이다.
▶즉, 도커에 설치된 DB는 /var/lib/mysql 폴더에 데이터를 저장하는데, 이 폴더가 호스트 디렉토리에 마운트 되어 있으므로 실제 데이터가 호스트 디렉토리에 저장이 되게 됨. 따라서 컨테이너를 삭제 해도 호스트 디렉토리에 DB 데이터가 남아있을 수 있게 된다.
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci : 한글이 깨지지 않도록 설정하기 위한 인자값

 

3. 컨테이너에 접속하기 (docker exec)

docker exec -it [컨테이너명] bash

 

실행중인 mariadb-container에 접속하여, bash shell에서 커맨드를 실행할 수 있다.

#sudo docker exec -it mariadb-container bash
※ 옵션 설명
-it : -i interactive 옵션과 -t Pseudo-tty 옵션을 함께 준 것으로, bash shell에서 입/출력을 가능하게 해주는 옵션이다.

 

4. MysqlWorkbench로 DB 접속해보기

- hostname엔 도커가 실행되는 서버의 IP를 입력한다. (workbench와 같은 컴퓨터에서 실행되면 127.0.0.1로 그냥 두고, 다른 서버에서 실행중이라면 다른 서버의 공인 IP를 입력)

- Store in Vault ... 를 클릭해서 비밀번호 넣어주고

- Test Connection 해보면 정상 연결이 된다. [OK] 누르면 접속 됨

 

 

참고

http://jmlim.github.io/docker/2019/07/30/docker-mysql-setup/

문제상황

웹브라우저에서 AWS 관리 콘솔로 EC2에 연결하려고 할 때, 아래와 같은 메시지가 뜨며 연결이 안되는 경우가 있다.

원인

브라우저 기반 SSH 연결은 EC2 Instance Connect 서비스를 통해 사용자의 인스턴스를 리다이렉션하여 접속하게 된다고 한다.

따라서 내 PC의 IP 주소가 아닌, EC2 인스턴스가 위치하는 리전의 AWS IP 주소를 해당 EC2 인스턴스의 Security Group에 할당해 주어야 한다.

  • 한국 리전에서 사용하는 AWS IP : 13.209.1.56/29

해결방법

1. EC2 서비스 클릭 > 좌측 [네트워크 및 보안] 메뉴 하위의 [보안 그룹] 클릭 하여 보안그룹 메뉴로 이동

 

2. 접속하려는 EC2 인스턴스에 적용되는 보안그룹에 체크 > [인바운드 규칙] 클릭 > [인바운드 규칙 편집] 클릭

 

3. [규칙 추가] 클릭

4. 아래와 같이 인바운드 규칙 추가 후 [규칙 저장] 클릭

5. 다시 [연결] 클릭해서, 인스턴스에 연결해봄

6. 아래와 같이 연결됨

참고

https://support.skdt.co.kr/ko/support/solutions/articles/42000093546--ec2-aws-%EA%B4%80%EB%A6%AC-%EC%BD%98%EC%86%94-%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%97%90%EC%84%9C-ec2%EC%97%90-%EC%97%B0%EA%B2%B0%ED%95%A0-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4-

+ Recent posts