Starofus

你好呀,我是Sans

Trojan部署中遇到的进程权限问题

2021-03-26

最近把站点的代理从v2ray 换成trojan ,配置了nginx,代理证书等,但是在配置证书的访问权限时, 遇到了一个子进程权限的问题

概述


最近把站点的代理从v2ray 换成trojan

配置了nginx,代理证书等

注意trojan和nginx都会监听443端口,所以如果开启trojan监听443转发到nginx 80 那么必须将nginx关闭,也可以trojan监听其他端口nginx将443端口部分转发给trojan

部署方法参考:
1. 官网:https://trojan-gfw.github.io/trojan/
2. 非常详细的教程:https://trojan-tutor.github.io/2019/04/10/p41.html

但是在根据`文档2` 配置访问证书时, 遇到了一个子进程权限的问题



问题的调用链路:



1. 首先创建了用户trojan组为certuser,将https证书文件的所有组改成了certuser组,且把linux当前用户也加到了certuser组中,这是 certbot 证书文件夹的权限:

drwxr-x--- 4 trojan root 4096 Mar 6 14:48 accounts
drwxr-x--- 3 trojan certusers 4096 Mar 6 14:35 archive
drwxr-x--- 2 trojan root 4096 Mar 6 14:34 csr
drwxr-x--- 2 trojan root 4096 Mar 6 14:34 keys
drwxr-x--- 3 trojan certusers 4096 Mar 6 14:35 live
-rwxr-x--- 1 trojan root 721 Mar 6 14:32 options-ssl-nginx.conf
drwxr-x--- 2 trojan root 4096 Mar 6 14:35 renewal
drwxr-x--- 5 trojan root 4096 Mar 6 14:32 renewal-hooks
-rwxr-x--- 1 trojan root 424 Mar 6 14:32 ssl-dhparams.pem




2. 然后在systemctl中建了一个启动用户为torjan的unit
[Unit]
Description=trojan
Documentation=man:trojan(1) https://trojan-gfw.github.io/trojan/config https://trojan-gfw.github.io/trojan/
After=network.target network-online.target nss-lookup.target mysql.service mariadb.service mysqld.service

[Service]
Type=simple
StandardError=journal
User=trojan
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/trojan /etc/trojan/config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=3s

[Install]
WantedBy=multi-user.target



3. 用systemctl 启动 trojan ,报错无权限读取证书,报错如下
Mar 07 08:37:24 instance-1 systemd[1]: Started trojan.
Mar 07 08:37:24 instance-1 trojan[11066]: Welcome to trojan 1.14.1
Mar 07 08:37:24 instance-1 trojan[11066]: [2021-03-07 08:37:24] [FATAL] fatal: use_certificate_chain_file: Permission denied
Mar 07 08:37:24 instance-1 trojan[11066]: [2021-03-07 08:37:24] [FATAL] exiting. . .
Mar 07 08:37:24 instance-1 systemd[1]: trojan.service: Main process exited, code=exited, status=1/FAILURE
Mar 07 08:37:24 instance-1 systemd[1]: trojan.service: Failed with result 'exit-code'.
Mar 07 08:37:27 instance-1 systemd[1]: trojan.service: Scheduled restart job, restart counter is at 14.
Mar 07 08:37:27 instance-1 systemd[1]: Stopped trojan.


4. 将证书所在文件夹改为 755 权限才可以 用 750 权限就不行,但是如下可以

drwxr-xr-x 4 trojan root 4096 Mar 6 14:48 accounts
drwxr-xr-x 3 trojan certusers 4096 Mar 6 14:35 archive
drwxr-xr-x 2 trojan root 4096 Mar 6 14:34 csr
drwxr-xr-x 2 trojan root 4096 Mar 6 14:34 keys
drwxr-xr-x 3 trojan certusers 4096 Mar 6 14:35 live
-rwxr-xr-x 1 trojan root 721 Mar 6 14:32 options-ssl-nginx.conf
drwxr-xr-x 2 trojan root 4096 Mar 6 14:35 renewal
drwxr-xr-x 5 trojan root 4096 Mar 6 14:32 renewal-hooks
-rwxr-xr-x 1 trojan root 424 Mar 6 14:32 ssl-dhparams.pem



问题分析:


- 可能原因:
1. 是systemctl 启动后的用户改变了么?但是当前用户也加到了证书可访问的组里了
2. 还是访问证书借用了其他属于其他人的进程?



- 可能尝试的办法
1. 看是否有办法查看证书文件的访问记录,确认是哪个进程在访问
代理