Definindo permissões de arquivo no script bash

1

Este script não está funcionando como eu pensei que seria.
Embora eu encontre todos os scripts que têm todas as permissões de rwx alteradas para as permissões de xx5

#!/bin/bash
# the / makes find inclusive


for file in 'find . -perm /007 '
do
permissions='stat -c %a $file'
permissions=${permissions:0:2}5
echo $permissions $file
chmod $permissions $file
done



#find . -perm /007

Minhas intenções são pelo menos proteger alguns arquivos

    
por Arcabard 17.05.2013 / 23:26

3 respostas

2

chmod -R o-w .

Removerá as permissões de gravação para outras para todos os arquivos de forma segura. No entanto, ele atualizará o ctime de todos os arquivos, incluindo aqueles para os quais outros já não tinham acesso de gravação.

Com o GNU chmod , você pode mostrar quais arquivos precisam ser atualizados com a opção -c:

$ chmod -cR o-w .
mode of './a' changed from 0777 (rwxrwxrwx) to 0775 (rwxrwxr-x)

Se você quiser apenas remover w de outros , onde eles têm rwx , você pode fazer:

find . ! -type l -perm -7 -exec chmod o-w {} +

(e adicione -vv com GNU ou FreeBSD chmod para ver os detalhes). Mas (especialmente desde que você está lidando com arquivos graváveis do mundo), tenha cuidado com uma condição de corrida lá, onde alguém com más intenções tendo acesso de escrita a qualquer um dos diretórios pode substituir um arquivo por um link simbólico para outro arquivo entre as horas find verifica e chmod é executado e você remove as permissões de gravação do arquivo e causa estragos (pense em um link simbólico para /tmp , por exemplo).

Como você está usando a sintaxe stat do GNU, as chances são de que seu find seja o GNU find . Observe que o GNU find pode exibir atributos de arquivos muito antes de o GNU stat ser introduzido, portanto você não precisa dos dois.

find . ! -type l -perm -7 -printf '%m %p\n' -exec chmod o-w {} +
    
por 19.05.2013 / 11:11
1

/007 mostrará seus únicos arquivos que não têm permissões para owner e group , e todos permissiosn (rwx) para other .

Você pode ter mais sorte com /o=rwx . Isso corresponderá apenas às permissões other do arquivo.

EDITAR A CORREÇÃO:

Aparentemente, você precisará usar -perm -o=rwx , porque o /o é um filtro inclusivo e corresponderia aos arquivos em que other tem x , w , xw , r , rx , rw ou rwx permissões. Alterar o caractere principal do filtro de / para - , torna o filtro exclusivo e corresponderia apenas aos arquivos com rwx no campo other .

    
por 17.05.2013 / 23:53
1

Sua abordagem é um pesadelo de desempenho: você cria dois processos para cada arquivo! Um completamente inutilmente porque find já tem essa informação e pode imprimir facilmente. Esta é uma solução melhor:

find . -perm -o=rwx -printf "%m %p_
find . -perm -o=rwx -printf "%m %p_%pre%" 2>/dev/null | 
  while read -r -d '' perms path; do
    path="${path%_}"
    echo "${perms} '${path}'" >&2
    printf "%s%pre%" "$path"
  done | xargs -0 chmod o=rx
" 2>/dev/null | while read -r -d '' perms path; do path="${path%_}" echo "${perms} '${path}'" >&2 printf "%s%pre%" "$path" done | xargs -0 chmod o=rx
    
por 18.05.2013 / 01:54