# 로그프레소 소나 443 포트가 열리지 않을 때 Java setcap 하는 방법

**URL:** <https://forum.logpresso.com/t/443-java-setcap/118>\
**Category:** How To\
**Created:** [8월 5, 2025, 5:15오전 UTC](https://forum.logpresso.com/t/443-java-setcap/118 "2025-08-05T05:15:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![moonyonkim](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.logpresso.com/moonyonkim/32/23_2.png) [@moonyonkim](https://forum.logpresso.com/u/moonyonkim)\
**Post date:** [8월 5, 2025, 5:15오전 UTC](https://forum.logpresso.com/t/443-java-setcap/118/1 "2025-08-05T05:15:51Z")

</div>

로그프레소 소나가 구동되는 Java에 setcap이 적용되어있지 않을 경우, root가 아닌 계정(예: logpresso)로 소나 실행 시 443, 514 포트 등 1000 이하의 포트가 열리지 않습니다. 로그프레소 셸에서 httpd.bindings 명령어로 확인해보면 443 port가 closed 상태이고, 다시 httpd.openSsl 명령어를 수행해도 열리지 않습니다. (이 경우 4443 포트가 대신 열립니다)

```bash
logpresso> httpd.bindings
Port Bindings
---------------------
...
/0.0.0.0:4443 (ssl: key logpresso-web, trust null), opened, default context: sonar, ...
/0.0.0.0:443 (ssl: key logpresso-web, trust null), closed, default context: sonar, ...
...

logpresso> httpd.openSsl 443 sonar logpresso-web
Permission denied

```

이 경우 다음 절차를 통해 setcap을 진행한 후 다시 로그프레소를 기동하면 해당 포트를 사용할 수 있습니다. 이 작업을 수행하기 위해서는 sudo 권한을 가진 계정이 필요합니다.

```bash
# 로그프레소 소나를 구동하는 Java 경로 확인
$ echo $JAVA_HOME
/opt/jdk/21.0.7-tem

# Java에 setcap 적용
$ sudo setcap cap_net_bind_service,cap_net_raw,cap_sys_time=+ep $JAVA_HOME/bin/java
# setcap 적용 여부 확인
$ getcap $JAVA_HOME/bin/java
/opt/jdk/21.0.7-tem/bin/java cap_net_bind_service,cap_net_raw,cap_sys_time=ep

# Jli 경로 확인
$ JLI_DIR=$(find $JAVA_HOME -type f -name libjli.so -exec dirname {} \;)
$ echo $JLI_DIR
/opt/jdk/21.0.7-tem/lib

# java.conf 파일 생성
$ sudo echo "$JLI_DIR" > /etc/ld.so.conf.d/java.conf
# 만약 위 명령어 수행 시 Permission denied 메시지가 뜬다면 `sudo vi /etc/ld.so.conf.d/java.conf` 로 파일을 열어서 $JLI_DIR에 해당하는 경로를 붙여넣기 합니다
$ cat /etc/ld.so.conf.d/java.conf
/opt/jdk/21.0.7-tem/lib

# ldconfig 설정
$ sudo ldconfig

```

위 작업 수행 후 로그프레소 소나를 다시 기동하면 443 포트를 열 수 있습니다. 514 포트를 시스로그 서버로 열 수도 있습니다.

```auto
logpresso> httpd.openSsl 443 sonar logpresso-web
opened https server

logpresso> httpd.bindings
Port Bindings
---------------------
...
/0.0.0.0:443 (ssl: key logpresso-web, trust null), opened, default context: sonar, ...

```

---

<div class="post-metadata">

**Author:** ![moonyonkim](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.logpresso.com/moonyonkim/32/23_2.png) [@moonyonkim](https://forum.logpresso.com/u/moonyonkim)\
**Post date:** [8월 22, 2025, 6:36오전 UTC](https://forum.logpresso.com/t/443-java-setcap/118/2 "2025-08-22T06:36:49Z")

</div>

> [@moonyonkim](#):
>
> 1000 이하의 포트가

정정: 1000 이하가 아니라 1024 미만의 포트입니다.

---

<div class="post-metadata">

**Author:** ![wklee](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.logpresso.com/wklee/32/43_2.png) [@wklee](https://forum.logpresso.com/u/wklee)\
**Post date:** [8월 27, 2025, 3:35오전 UTC](https://forum.logpresso.com/t/443-java-setcap/118/3 "2025-08-27T03:35:07Z")

</div>

아래 설명 추가하였습니다. 아래 내용을 참고해주세요

---

<div class="post-metadata">

**Author:** ![wklee](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.logpresso.com/wklee/32/43_2.png) [@wklee](https://forum.logpresso.com/u/wklee)\
**Post date:** [8월 27, 2025, 4:56오전 UTC](https://forum.logpresso.com/t/443-java-setcap/118/4 "2025-08-27T04:56:07Z")

</div>

### 네트워크 관련

- **`CAP_NET_BIND_SERVICE`** : 1024 미만의 포트(80, 443 등) 바인드 가능
- **`CAP_NET_BROADCAST`** : 브로드캐스트, 멀티캐스트 송신 가능
- **`CAP_NET_ADMIN`** : 네트워크 인터페이스 설정, 방화벽, 라우팅 등 관리
- **`CAP_NET_RAW`** : RAW 소켓 열기 (ping, tcpdump 등)
- **`CAP_NET_PACKET`** : 패킷 소켓 생성 (저수준 패킷 송수신)

### 파일/시스템 관련

- **`CAP_CHOWN`** : 파일 소유자/그룹 변경 가능
- **`CAP_DAC_OVERRIDE`** : 일반적인 파일 읽기/쓰기 권한 체크 무시
- **`CAP_DAC_READ_SEARCH`** : 읽기 전용 접근 권한 체크 무시
- **`CAP_FOWNER`** : 파일 소유자 권한 무시
- **`CAP_FSETID`** : set-user-ID, set-group-ID 비트 무시
- **`CAP_LINUX_IMMUTABLE`** : 변경 불가능(immutable) 속성 설정 가능
- **`CAP_SYS_RESOURCE`** : 리소스 제한(ulimit) 변경 가능

### 프로세스/시그널 관련

- **`CAP_KILL`** : 다른 사용자 프로세스에 시그널 전송 가능
- **`CAP_SYS_NICE`** : 프로세스 우선순위(nice) 변경 가능
- **`CAP_SYS_PTRACE`** : 다른 프로세스 ptrace(디버깅) 가능
- **`CAP_SYS_ADMIN`** : 시스템 전반 관리 권한(거의 root와 동등, “만능 권한”)
- **`CAP_SYS_PACCT`** : 프로세스 회계(process accounting) 활성화 가능
- **`CAP_SYS_BOOT`** : reboot, kexec 같은 부팅 관련 권한

### 시간/시계 관련

- **`CAP_SYS_TIME`** : 시스템 시간, 하드웨어 RTC 변경 가능
- **`CAP_WAKE_ALARM`** : 알람 타이머(wake alarm) 설정 가능

### IPC/메모리 관련

- **`CAP_IPC_LOCK`** : 메모리 잠금(mlock) 가능
- **`CAP_IPC_OWNER`** : IPC 객체 접근 권한 무시
- **`CAP_SYS_TTY_CONFIG`** : TTY 디바이스 설정 변경 가능

### 장치/커널 관련

- **`CAP_SYS_MODULE`** : 커널 모듈 로드/언로드 가능
- **`CAP_SYS_RAWIO`** : 직접적인 I/O 포트 접근 허용
- **`CAP_SYS_CHROOT`** : `chroot` 실행 가능
- **`CAP_SYS_MOUNT`** : 파일시스템 마운트/언마운트 가능
- **`CAP_SYSLOG`** : 커널 로그 접근 가능
- **`CAP_AUDIT_WRITE`** : audit 로그 쓰기 가능
- **`CAP_AUDIT_CONTROL`** : audit 설정 변경 가능
- **`CAP_BLOCK_SUSPEND`** : suspend 방지
