OPNsense 는 FreeBSD 기반 방화벽 어플라이언스다. 기본 셸은 FreeBSD 의 /bin/sh 이고 bash 는 들어 있지 않다. 패키지 관리는 FreeBSD 의 pkg 를 쓰되, 저장소는 OPNsense 가 자체적으로 운영하는 것을 가리킨다.
어플라이언스라는 성격 때문에 주의할 점이 먼저다.
pkg 저장소 설정을 손대지 않는다/etc/rc.conf 계열, 방화벽 규칙) 을 직접 고치면 다음 적용 때 덮인다pkg update
pkg install bash
bash --version
설치 경로는 /usr/local/bin/bash 다. FreeBSD 에서 패키지로 들어온 것은 모두 /usr/local 아래에 놓이므로, 리눅스 습관대로 /bin/bash 를 기대하면 찾지 못한다.
스크립트의 shebang 도 그래서 다음 형태를 쓴다.
#!/usr/local/bin/bash
# 또는 경로에 덜 의존하는 형태
#!/usr/bin/env bash
그때그때 들어갈 때는 그냥 실행한다.
bash
사용자의 기본 셸로 지정하려면 chsh 를 쓴다.
chsh -s /usr/local/bin/bash root
다만 root 의 로그인 셸을 바꾸는 것은 권하지 않는다. OPNsense 는 SSH · 콘솔 접속 시 관리 메뉴를 띄우는데, 셸을 바꾸면 그 흐름이 달라질 수 있고 펌웨어 업그레이드 뒤 /usr/local 의 bash 가 사라지면 로그인 자체가 막힐 수 있다. 작업용 일반 계정을 따로 만들어 그쪽에만 지정하는 편이 안전하다.
되돌리는 명령도 미리 알아 둔다.
chsh -s /bin/sh root
pkg 자체가 부트스트랩되지 않은 상태라면 다음으로 초기화한다.
pkg bootstrap -f
저장소 메타데이터가 어긋났으면 강제로 다시 받는다.
pkg update -f
OPNsense 의 펌웨어 도구로 상태를 점검할 수도 있다. GUI 의 System → Firmware → Status 와 같은 일을 한다.
opnsense-update -c
configctl firmware status
설치된 것을 정리할 때는 다음을 쓴다.
pkg info | less
pkg delete bash
pkg autoremove
방화벽 장비에 도구를 늘릴수록 업그레이드가 위험해지고 공격 표면도 넓어진다. bash 는 임시 작업·디버깅용으로만 두고, 상시 동작하는 스크립트는 기본 /bin/sh 로 POSIX 문법만 써서 작성한다. 배열이나 [[ ]] 같은 bash 전용 문법을 피하면 대부분 옮길 수 있다.