如何更改进程创建的文件的默认权限?

如何更改进程创建的文件的默认权限?

我正在 Centos 6 x86 上运行游戏服务器(虚幻锦标赛 2004)。我使用 sh 脚本在后台进程中启动它。此进程(游戏服务器)创建不同的文件(演示、日志),默认情况下它们都具有 0600 权限。我必须用一些应用程序来处理它们,所以我想要的是更改它们的默认权限(例如更改为 0644)。

我是 root,我的 umask 是 022,我创建的文件默认是 0644。但这个游戏服务器进程似乎没有继承我的umask。我怎样才能改变它?我对 Linux 很陌生,所以详细的答案将不胜感激。

用于运行服务器的脚本:

#!/bin/sh
# Set the following to your UT2004 directory.
UT2004HOME=/home/ut2004

LOG=Server1.log

if [ ! -d "$UT2004HOME/Logs" ]; then
mkdir $UT2004HOME/Logs
fi

cd $UT2004HOME/System

while true; do

./ucc-bin server DM-Rankin-FE?game=XGame.xDeathMatch?Mutator=UTzoneTAv1.MutUTzoneTA,utcompv17a.MutUTComp,XWeapons.MutNoSuperWeapon,XGame.MutNoAdrenaline?MaxPlayers=2?DoubleDamage=False?TimedOverTimeLength=0?GameStats=True?AntiTCCSettings=NoMidGameChecks ini=server1.ini -nohomedir -lanplay &> $UT2004HOME/Logs/$LOG

DATE=20`date +%y%m%d`-`date +%H%M%S`
mv $UT2004HOME/Logs/$LOG $UT2004HOME/Logs/crash-$DATE.log

done;

我将其放入 sh 文件中,然后在 putty shell 中以 root 身份启动它作为后台进程,并在字符串末尾使用 & 。

更新#1

输出来自ls -ld $UT2004HOME/Logs

drwxr-xr-x 2 root root 4096 Sep 1 10:22 /home/ut2004/Logs

该目录中的文件是rw-r--r--.

包含我需要的文件的其他 2 个目录的输出rwxr-xr-x是相同的:

drwxr-xr-x 2 root root 45056 Sep 26 14:16 /home/ut2004/Demos 
drwxr-xr-x 2 root root 28672 Sep 26 18:03 /home/ut2004/UserLogs 

但其中的文件是rw-------

当我运行该命令时,file ./ucc-bin它被报告为一个二进制文件。

答案1

游戏服务器以什么用户身份运行?通常,服务器/服务以 root 以外的用户身份运行,因此您需要找出这是哪个用户并更改该用户的umask.

umask您可以在用户的$HOME/.bashrc​​ 或中设置该用户$HOME/.bash_profile,但我会谨慎地在不首先考虑的情况下这样做。

在相关目录上设置 ACL(访问控制列表)可能更有意义,这样除了游戏服务器运行的用户之外,其他用户也可以访问它们。

为此,您将使用工具setfaclgetfacl。例如:

# for a single user (userA)
$ setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www

# for a shared group (groupA) 
$ setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

或者使目录只读:

$ setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

更新#1

好的,我下载了我认为您正在使用的内容。我从这里下载了专用服务器,页面标题为: Unreal、Unreal Tournament 和 Unreal Tournament 2004 的各种有用下载

当我运行与您类似的命令时,我将使用权限创建日志,

-rw-r--r-- 1 root root     1140 Sep 27 08:57 sams.log

这是我运行的命令:

$ ./ucc-bin masterserver -nohomedir -lanplay &> sams.log

我的 umask 也设置为 002。您能否确认我在这里所做的事情,以便我知道我正在正确复制您的设置?

参考

答案2

如果该应用程序没有主目录,那么您可以umask在 /etc/init.d 脚本中定义它的启动位置。

您只需在 shebang 之后添加到顶部,umask 0022然后文件就会以644权限创建。

相关内容