Prompt de confirmação para chmod, chown

0

Estou apenas tentando adicionar um prompt de confirmação a alguns comandos do Linux, como chmod e chown .

Eu tentei pesquisar no Google, mas não consigo encontrar muita informação sobre o assunto.

Durante a pesquisa, descobri que há uma solução para rm usando a opção -i , embora isso possa ser substituído por -f

No entanto, há safe-rm pacote que você pode instalar no seu servidor, o que lista alguns diretórios importantes, o que é uma boa solução, mas infelizmente não existe um pacote similar para chmod e chown .

Assim, minha solução ideal seria onde chmod e chown tenham prompts de confirmação e também que certos diretórios estejam na lista negra de serem chmod-ed e chown-ed.

Qualquer resposta é muito apreciada !!!

    
por Petar Vasilev 14.07.2015 / 18:56

2 respostas

0

Os comandos chown (1) e chmod (1) não tem nativamente sunch uma opção. Se você quiser adicionar essa funcionalidade, então você:

  1. Tem que alterar a fonte e recompilar.
  2. Ou escreva um wrapper.

A primeira opção é a mais limpa. O segundo é mais fácil. Se você ficar preso ao escrever isso, precisará de uma nova pergunta que provavelmente será mais adequada para [SO], mas brevemente:

1) mova chmod para outro lugar. por exemplo. mv /bin/chmod /bin/chmold.therealthing

2) Crie um script executável chamado chmod que faz o que você quer (e que chama o verdadeiro chmod).

Algo não testado de uma pessoa que não é shell script (também conhecido como:)

#!/usr/bin/env bash
echo "/bin/chmod (Shell script) called with these arguments:"
echo $@

read -p "Are you sure you want to do this? (y/n) " RESPONSE
if [ "$RESPONSE" = "y" ]; then
    exec /bin/chmod.therealthing $@        
else
    echo "OK, aborting."
fi

Se você quiser um controle mais granular, o script se tornará mais complexo. Ainda assim, você gostaria de poder analisar a entrada e executar um chmod para cada arquivo (após verificar uma sintaxe válida).

    
por 14.07.2015 / 19:25
1

Uma solução no bash seria usar funções e aliases do shell. Você poderia colocá-los em / etc / bashrc ou ~ / .bashrc se você quiser apenas para usuários específicos. Aqui estão algumas definições de função e alias que você poderia usar para fazer algo parecido com o que você pediu.

DANGERLIST=/etc/dangerous.paths

_dangerouspath() {
        file=$(readlink -e "$1")
        [ -z "${file}" ] && return 1

        while read pattern
        do
                [[ "${file}" =~ ^${pattern}$ ]] && return 0
        done < ${DANGERLIST}

        return 1
}

_checkpaths() {
        shift
        while [ -n "$1" ]
        do
                [[ "X$1" =~ ^X[^-].* ]] && _dangerouspath $1 && return 0
                shift
        done

        return 1
}

_saferun() {
        p="$1"
        shift
        if _checkpaths $*
        then
                read -p "Are you sure you want to do this? (y/n) " r && [ "$r" = "y" ]  && $p $*
        else
                $p $*
        fi
}

alias chown="_saferun /bin/chown"
alias chgrp="_saferun /bin/chgrp"
alias chmod="_saferun /bin/chmod"

Você precisaria criar uma lista de caminhos que você deseja proteger em "$ DANGERLIST" (/etc/dangerous.paths) que seria algo como

/
/home
/etc.*
/usr/bin.*
/bin.*
    
por 15.07.2015 / 12:36