Como alterar permissões padrão de arquivos criados por um processo?

4

Estou executando um servidor de jogo (torneio irreal de 2004) no Centos 6 x86. Eu uso um script sh para iniciá-lo em um processo em segundo plano. Este processo (servidor de jogo) cria arquivos diferentes (demos, logs) e todos eles vêm com permissão 0600 por padrão. Eu tenho que processá-los com alguns aplicativos, então o que eu quero é mudar sua permissão padrão (para 0644, por exemplo).

Sou root, tenho umask 022 e os arquivos criados são 0644 por padrão. Mas parece que este processo do servidor do jogo não herda minha umask. Como posso mudá-lo? Eu sou muito novo no Linux, então uma resposta detalhada seria apreciada.

Script usado para executar o servidor:

#!/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;

Eu coloco em um arquivo sh e, em seguida, inicio no putty shell como root como um processo em background usando & no final da string.

UPDATE # 1

Saída de ls -ld $UT2004HOME/Logs :

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

os arquivos neste diretório são rw-r--r-- .

A saída para dois outros diretórios que contêm arquivos que eu preciso para ser rwxr-xr-x é a mesma:

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 

mas os arquivos neles são rw-------

Quando eu executei o comando file ./ucc-bin , ele foi relatado como um arquivo binário.

    
por Vladimir Glushkov 14.08.2013 / 21:06

2 respostas

4

Em qual usuário o servidor do jogo está sendo executado? Normalmente, os servidores / serviços são executados como usuários que não são o root, portanto, você precisará descobrir qual usuário é esse e alterar o umask desse usuário.

Você pode definir o usuário umask no usuário $HOME/.bashrc ou $HOME/.bash_profile , embora eu tenha cautela ao fazer isso sem pensar primeiro.

Pode fazer mais sentido definir uma ACL (Access Control List) nos diretórios em questão para que outros usuários possam acessá-los, além do usuário em que o servidor do jogo está sendo executado.

Para isso, você usará as ferramentas setfacl e getfacl . Por exemplo:

# 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

Ou para tornar os diretórios somente leitura:

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

UPDATE # 1

OK, então baixei o que acho que você está usando. Eu baixei os servidores dedicados daqui, em uma página intitulada: Vários downloads úteis para Unreal, Unreal Tournament e Unreal Tournament 2004 .

Quando executo um comando, semelhante ao seu, estou criando meu registro com as permissões,

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

Este é o comando que eu executo:

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

E minha umask está definida como 002 também. Você pode, por favor, confirmar o que eu fiz aqui para que eu saiba que estou copiando sua configuração corretamente?

Referências

por 14.08.2013 / 21:34
0

Se esse aplicativo não tiver o diretório inicial, você poderá definir umask no script /etc/init.d, onde ele é iniciado.

Você só precisa adicionar na parte superior depois do texto, umask 0022 , em seguida, os arquivos serão criados com a permissão 644 .

    
por 06.09.2013 / 13:33