Linux下的服务使用根目录下tmp的问题

Linux下的服务使用根目录下tmp的问题

最近使用nginx-rtmp-module 测试录制直播视频时,怎么也保存不下来,以下是Nginx的rtmp模块配置:

rtmp {
  	server{
        listen 1935;

        # TV mode: one publisher, many subscribers
        application mytv {
            live on;

            # record first 1K of stream
            record all;
            record_path /tmp/av;
            record_max_size 1K;

            # append current timestamp to each flv
            record_unique on;
        }
    }
}

运行是没有报错, Nginx日志也是正常的。

原因

出现这个问题是由于 nginx.service 里设置了 PrivateTmp=true

关于 PrivateTmp 的设置

采用布尔参数。如果为true,则为执行的进程设置一个新的文件系统命名空间,并在其中装载一个私有/tmp目录,该目录不由命名空间之外的进程共享。这有助于确保对进程临时文件的访问安全,但会使进程之间无法通过/tmp进行共享。默认为false。

如果 PrivateTmp 设置为 true 在nginx启动后, 在/tmp 目录下会出现类似以下名称的文件假

systemd-private-xxxxxxxxxxxxxxxxxxxxxxxxxxx-nginx.service-xxxxxx

在nginx停止后, 该文件夹就会消失。

深层原因

关于为什么设置了 PrivateTmp=true 后, 不能保存到此目录下,找不到相关的文档。猜测是 /tmp 目录下的文件可以被其他进程共享, 从而引起安全性的问题。

解决方案

  1. 把文件保存到 /tmp 之外的目录。

  2. 设置 PrivateTmp=false

    [Unit]
    Description=nginx - web server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    ExecQuit=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    重启Nginx

    # systemctl daemon-reload
    # systemctl start nginx
    

引申

如果其他服务 比如 php-fpm或者mysql等服务的文件不能保存到 /tmp 目录下, 也可参考此方法。

参考

https://www.redhat.com/zh/blog/new-red-hat-enterprise-linux-7-security-feature-privatetmp

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux系统中的根目录(/)是整个文件系统的顶级目录,它包含了所有文件和目录。下面是根目录下的一些常见文件和目录的详细解释: 1. /bin:存放系统基本命令,如ls、cp、rm等。 2. /boot:存放操作系统启动所需的文件,如内核、GRUB引导程序等。 3. /dev:存放设备文件,如硬盘、光驱、串口、USB等设备。 4. /etc:存放系统配置文件,如用户账户、网络配置、服务启动脚本等。 5. /home:存放用户的主目录,每个用户有一个单独的子目录,如/home/user1、/home/user2等。 6. /lib:存放系统库文件,包括共享库和内核模块。 7. /media:存放可移动设备挂载点,如USB、光驱等。 8. /mnt:临时挂载点,可以用来挂载其他文件系统。 9. /opt:第三方软件安装目录,如Oracle、Chrome等。 10. /proc:虚拟文件系统,存放内核运行时的信息,如系统进程、内存使用情况等。 11. /root:root用户的主目录。 12. /run:存放系统启动时创建的临时文件,如PID文件等。 13. /sbin:存放系统管理员使用的命令,如系统启动、网络配置等。 14. /srv:存放服务相关的数据文件,如Web服务器的网页文件等。 15. /sys:虚拟文件系统,存放系统设备信息和内核参数等。 16. /tmp:临时文件目录,存放临时文件和缓存文件。 17. /usr:存放用户安装的应用程序和文件,如用户安装的软件、文档、图标等。 18. /var:存放系统日志文件和服务相关的数据文件,如邮件、网页、数据库等。 以上是Linux根目录下的一些常见文件和目录,它们各自拥有不同的用途,是Linux系统正常运行所必需的文件和目录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值