linux-非root用户运行tomcat

本文介绍如何通过创建专用用户和组来避免使用root权限运行Apache Tomcat应用服务器,并详细说明了配置步骤、守护进程编译安装和服务初始化过程。

 前言:为什么要使用非root用户运行tomcat (附:所有的操作比如git... 都需要避过使用root权限)

root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限。

这意味着你的任何一个页面脚本(html/js)都具有root权限,所以可以轻易地用页面脚本 修改整个硬盘里的文件!

所以最好不要使用root启动tomcat。

 

#  正文:非root用户运行tomcat

## tomcat安装

略... 本文安装目录为 /usr/local/src/tomcat/tomcat2

##  创建用户

# 创建用户组 dev
groupadd dev

# 创建用户 tomcat
useradd -g dev -s /usr/sbin/nologin tomcat

说明:-s /usr/sbin/nologin 禁止该用户登录。

也可以在用户创建之后执行

useradd -g dev
usermod -s | --shell /usr/sbin/nologin username

## tomcat配置

### 编译安装服务守护程序

 

#
cd /opt/tomcat8/bin/
# 解压
tar vzxf commons-daemon-native.tar.gz
# 
cd /opt/tomcat8/bin/commons-daemon-1.0.15-native-src/unix/
# 安装前的配置 及校验
./configure
# 若未配置$java_home需指定JDK目录
./configure --with-java=/opt/jdk_1.7

 

如果出现如下错误提示,说明未设置JAVA_HOME变量

*** Java compilation tools ***
checking for JDK location... configure: error: Java Home not defined. Rerun with --with-java=... parameter

如果看到以下信息,就可以编译/安装了

*** All done ***
Now you can issue "make"

 

# 编译/安装
make
# 执行make后会生成一个jsvc文件,将其复制到tomcat的bin目录
cp jsvc /usr/local/src/tomcat/tomcat2bin

 

### 修改启动脚本文件

vi /usr/local/src/tomcat/tomcat2/bin/daemon.sh

找到如下内容

test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
# Set JAVA_HOME to working JDK or JRE
# JAVA_HOME=/opt/jdk-1.6.0.22

修改TOMCAT_USER=tomcat,"tomcat"为运行tomcat的用户,本文创建的用户即为tomcat,所以不用修改。

去除JAVA_HOME前的注释(即“#”号),并设置为JDK的所在目录(/opt/jdk_1.7)。

## 更改tomcat目录权限

# 更改文件所有者
chown -R tomcat:dev /usr/local/src/tomcat/tomcat2
# 赋予用户执行权
chmod a+x /usr/local/src/tomcat/tomcat2/bin/daemon.sh

 

# 附:tomcat命令

 

# 后台运行
/usr/local/src/tomcat/tomcat2/bin/daemon.sh  start
# 前台运行
/usr/local/src/tomcat/tomcat2/bin/daemon.sh  run
# 停止
/usr/local/src/tomcat/tomcat2/bin/daemon.sh  stop

 

 

# 创建符号链接/软连接
ln -s /opt/tomcat8/bin/daemon.sh /etc/init.d/tomcat8
# tomcat8添加至系统服务
chkconfig –-add tomcat8
#启动/停止
service  tomcat8 start/stop

 

### Tomcat root 用户无法创建日志文件的问题分析与解决 当使用 root 用户启动 Tomcat 时,可能会遇到 **“Permission denied”** 的错误,特别是在尝试创建或写入日志文件时。这种情况通常与权限配置不当有关。 #### 常见原因 1. **日志目录权限不足** - Tomcat 默认的日志输出路径为 `$CATALINA_HOME/logs`。 - 如果该目录的权限未对运行 Tomcat用户开放写权限,则会导致无法创建日志文件的问题。 - 示例:如果使用用户 `tomcatuser` 启动服务,但 `/opt/apache-tomcat-9.0.39/logs` 目录的所有者为 `root`,则该用户将无法写入日志[^1]。 2. **临时目录权限问题** - Tomcat 使用 `$CATALINA_TMPDIR`(默认为 `$CATALINA_HOME/temp`)存放临时文件。 - 若此目录权限受限,也可能影响日志系统的初始化过程[^1]。 3. **SELinux 或 AppArmor 等安全模块限制** - 在某些 Linux 发行版中,默认启用的安全策略可能阻止特权用户访问特定路径。 - 可通过检查 `/var/log/audit/audit.log`(SELinux)或 `/var/log/apparmor/` 日志确认是否存在此类限制。 4. **系统级文件描述符限制** - 如果用户级别的文件描述符限制过低,可能导致日志系统初始化失败。 --- ### 解决方案 #### 方法一:修改日志目录权限 ```bash # 更改 logs 目录所有者为 tomcatuser sudo chown -R tomcatuser:tomcatuser /opt/apache-tomcat-9.0.39/logs # 更改 temp 目录所有者为 tomcatuser sudo chown -R tomcatuser:tomcatuser /opt/apache-tomcat-9.0.39/temp ``` #### 方法二:设置合适的权限 ```bash # 设置目录权限为 755 sudo chmod -R 755 /opt/apache-tomcat-9.0.39/logs sudo chmod -R 755 /opt/apache-tomcat-9.0.39/temp ``` #### 方法三:修改 Tomcat 使用的日志路径 可以在 `logging.properties` 文件中修改日志输出路径至用户具有写权限的目录: ```properties # 修改 catalina.out 输出路径 1catalina.org.apache.juli.FileHandler.directory = /home/tomcatuser/tomcat_logs ``` #### 方法四:禁用 SELinux(仅用于测试) ```bash # 临时禁用 SELinux sudo setenforce 0 ``` 如需永久禁用,可编辑 `/etc/selinux/config` 文件: ```bash SELINUX=disabled ``` #### 方法五:检查系统资源限制 查看当前用户的 ulimit 设置: ```bash ulimit -n ``` 若值较小,可在 `/etc/security/limits.conf` 中添加以下内容以提升限制: ```conf tomcatuser soft nofile 65536 tomcatuser hard nofile 65536 ``` --- ### 总结 Tomcat root 用户启动时无法创建日志文件的根本原因通常是权限配置不正确。通过调整目录所有权、权限设置、日志路径以及系统安全策略,可以有效解决该问题。建议优先从权限层面入手排查,并结合系统日志进行验证。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值