我正在 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(访问控制列表)可能更有意义,这样除了游戏服务器运行的用户之外,其他用户也可以访问它们。
为此,您将使用工具setfacl
和getfacl
。例如:
# 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
权限创建。