Ubuntu环境下lsnrctl的安全设置指南
lsnrctl是Oracle数据库的核心管理工具,用于控制监听器服务。在Ubuntu系统中,需通过权限管理、配置加固、加密通信、访问控制及监控审计等多维度措施,确保其运行安全。以下是具体实施步骤:
修改lsnrctl文件权限
lsnrctl通常位于Oracle软件目录(如/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
)。通过chmod
命令限制权限,仅允许所有者(root或oracle)执行:
sudo chmod 750 /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
或更严格的700
(仅所有者可读、写、执行)。
调整文件所有者和组
将lsnrctl的所有者设为root
,组设为oracle
(Oracle数据库默认组),避免普通用户篡改:
sudo chown root:oracle /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
配置sudoers文件
若需允许特定用户(如admin
)以oracle
身份运行lsnrctl(无需密码),使用visudo
安全编辑/etc/sudoers
文件,添加:
admin ALL=(oracle) NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl *
此配置限制仅admin
用户可免密调用lsnrctl。
设置listener.ora权限
listener.ora(位于$ORACLE_HOME/network/admin/
)包含监听器端口、地址等敏感信息,需限制为oracle
用户和oinstall
组可读写:
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/listener.ora
sudo chmod 660 $ORACLE_HOME/network/admin/listener.ora
启用ADMIN_RESTRICTIONS
在listener.ora文件末尾添加以下参数,禁止动态修改监听器配置(如端口、地址),需重启监听器生效:
ADMIN_RESTRICTIONS_LISTENER = ON
此设置可防止未授权用户通过lsnrctl
命令修改监听器行为。
启用SSL/TLS加密
为保护数据传输安全,需配置监听器使用SSL。步骤如下:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) # 普通TCP端口
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1522)) # SSL加密端口
)
)
SECURITY_LISTENER =
(ENCRYPTION_CLIENT = REQUIRED) # 强制客户端使用加密
(ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128)) # 支持的加密算法
(SSL_VERSION = 1.2) # 使用TLS 1.2及以上版本
lsnrctl stop && lsnrctl start
配置Oracle Wallet管理证书
使用Oracle Wallet安全存储证书和私钥,避免明文泄露:
mkstore -wrl /path/to/wallet -create
mkstore -wrl /path/to/wallet -importcert -alias server_cert -file cert.pem
mkstore -wrl /path/to/wallet -importkey -alias server_key -file key.pem
SQLNET.AUTHENTICATION_SERVICES = (TCPS)
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /path/to/wallet)))
限制监听器访问IP
在listener.ora文件中,通过HOST
参数指定允许访问监听器的IP地址(如仅允许内网IP192.168.1.0/24
):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) # 仅允许指定主机
)
)
此配置可阻断外部非法IP的连接请求。
配置防火墙规则
使用Ubuntu的ufw
(Uncomplicated Firewall)限制1521(TCP)和1522(TCPS)端口的访问,仅允许信任IP:
sudo ufw allow from 192.168.1.0/24 to any port 1521 proto tcp # 允许内网访问普通端口
sudo ufw allow from 192.168.1.0/24 to any port 1522 proto tcp # 允许内网访问SSL端口
sudo ufw enable # 启用防火墙
或使用iptables
实现更细粒度的控制。
设置强密码
为监听器设置复杂密码(包含大小写字母、数字、特殊字符),并定期更换(每90天):
lsnrctl
LSNRCTL> SET PASSWORD # 进入密码修改界面
输入旧密码:******
输入新密码:***********
确认新密码:***********
LSNRCTL> EXIT
启用日志审计
监听器日志(位于$ORACLE_HOME/network/log/listener.log
)记录了所有连接请求和配置变更,需定期检查异常行为(如频繁的失败登录尝试)。可通过tail
命令实时监控:
tail -f $ORACLE_HOME/network/log/listener.log
或配置日志轮转(如使用logrotate
),避免日志文件过大。
若系统启用SELinux或AppArmor,需调整策略允许lsnrctl运行:
sestatus
),若为Enforcing
模式,使用audit2allow
生成自定义策略:sudo ausearch -c 'lsnrctl' --raw | audit2allow -M my-lsnrctl
sudo semodule -i my-lsnrctl.pp
/etc/apparmor.d/usr.sbin.lsnrctl
文件,添加允许的文件和目录访问规则(如/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
)。通过以上步骤,可全面强化Ubuntu环境下lsnrctl的安全性,有效防范未授权访问、数据泄露及恶意篡改等风险。实施前需备份相关配置文件(如listener.ora、sqlnet.ora),并在测试环境验证配置的正确性。