shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RES: [shell-script] Localizar, procurar e editar com shell-script


From: Arkan Add
Subject: Re: RES: [shell-script] Localizar, procurar e editar com shell-script
Date: Mon, 30 Jun 2014 18:24:31 -0700

Paulo,

Funcionou perfeitamente. Tanto para adicionar, como para remover. Muito obrigado pelo help. Vou pegar o que aprendi com esse e um outro que tenho aqui e tentar adicionar uma função para atribuição de cotas de disco para os usuários criados.
Agradeço novamente pela ajuda.


On Monday, June 30, 2014 1:33 AM, "Paulo Bettega address@hidden [shell-script]" <address@hidden> wrote:


Os erros acontecem porque eu não coloquei aspas na variável $Proto, tem que colocar.

linha=$(grep "^$Proto" /etc/sfs/users/"$2".info 2>/dev/null) && {

aqui pra mim deu certo porque eu testei apenas com a primeira palavra,
mas como tem linhas diferentes começando com a mesma palavra

SABNZBD HTTPS port: 51302
SABNZBD HTTP port: 51303
Deluge daemon port: 51305
Deluge web port: 51304

vai dar erro.


O erro do sed deve ser porque o grep retorna duas linhas com
SABNZBD e Deluge, mas com RTorrent não dá erro porque só tem uma linha.

Vc fez certo usando as duas primeiras palavras
(for Proto in "RTorrent network" "SABNZBD HTTPS" "Deluge web"),
pois a pesquisa tem que retornar apenas uma linha.
As aspas na expressão do grep devem resolver os erros.

Abraços Paulo Bettega


On 29-06-2014 20:20, Arkan Add address@hidden [shell-script] wrote:
> Paulo,
>
> Você entendeu perfeitamente. Realizei alguns testes e para adicionar as portas ficou perfeito. Agora
> para remover estou encontrando um probleminha.
>
> O script que utilizo para remover o usuário é este abaixo e adicionei a linha sudo /etc/sfs/editcsf
> -r $NEWUSER1 para chamar o script e passar a variável.
>
>  #!/bin/bash
>
> NEWUSER1=a
> NEWUSER2=b
>
> while [ ! $NEWUSER1 = $NEWUSER2 ];
> do
>    clear
>    echo -n "Type username to be DELETED: "
>    read NEWUSER1
>    echo -n "Retype username: "
>    read NEWUSER2
>    echo ""
> done
>
> # 3.1.1
> #kill all processes related to that user
> sudo kill -9 $( ps -ef | grep $NEWUSER1 | awk '{ print $2 }' )
> # 3.2
> sudo userdel --remove --force $NEWUSER1
> # 12.
> #remove current password from htpassword
> sudo perl -pi -e "s/^$NEWUSER1\:.*\n$//g" /etc/apache2/htpasswd
> # 20.
> ############# sudo rm -r /home/downloads/$NEWUSER1
> # 21.
> sudo rm /etc/init/rtorrent.$NEWUSER1.conf
> # 29.
> sudo rm -r /var/www/rutorrent/conf/users/$NEWUSER1
> sudo /etc/sfs/editcsf -r $NEWUSER1
> sudo rm /etc/sfs/users/$NEWUSER1.info
>
> ##################### LAST LINE ###########
>
> Para o arquivo $NEWUSER1.info eu gero ele dessa forma (É a forma final do anterior):
>
> Ports
> -----
> SSH port: 976
> SFTP port: 976
> vsftp port: 201
> IRSSI Port: 51299
> SCGI Port: 51300
> RTorrent network port: 51301
> SABNZBD HTTPS port: 51302
> SABNZBD HTTP port: 51303
> Deluge daemon port: 51305
> Deluge web port: 51304
>
> E o nosso script eu modifiquei para apontar para os respectivos arquivos:
>
> #!/bin/bash
> #
> # Passar parâmetros para inclusão:
> #      Opção -i seguida das variáveis e/ou números separados por vírgula.
> #      -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
> #      -i $NETWORKPORT1,$VPNPORT1,21,80,$EXTERNALPORT1
> #
> # Passar parâmetros para exclusão:
> #      Opção -r seguida da variável ou nome do usuário (de preferência,
> #      o nome só deve ter letras sem acentos, números, sublinhado, ou hífen).
> #      -r $NEWUSER1
> #      -r joao
>
>
>
> # backup do csf.conf
> cp /etc/csf/csf.conf /root/csf.conf_$(date +%F_%T)
>
>
> func_ajuda()
> {
>    sed -r '2,/^$/! d; s/^#//; s/\t(-i|-r)/\t'${0##/}' \1/; ' "$0"
>    exit 1
> }
>
>
> case $1 in
>
>    -i)
>          if [ ! "$2" ]; then
>            echo -e '\nFaltou lista de portas para a opção -i.'
>            func_ajuda
>          fi
>
>          for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
>                        UDP_IN UDP6_IN UDP_OUT UDP6_OUT
>      do
>            sed -i '/^'$regra'/ s/"$/,'$2'"/' /etc/csf/csf.conf
>          done
>    ;;
>
>    -r)
>          if [ ! "$2" ]; then
>            echo -e '\nFaltou usuário para a opção -r.'
>            func_ajuda
>          fi
>
>          for Proto in "RTorrent network" "SABNZBD HTTPS" "Deluge web"
>          do
>            linha=$(grep ^$Proto /etc/sfs/users/"$2".info 2>/dev/null) && {
>                  porta=$(awk -F ': ' '{ print $2 }' <<<"$linha")
>                  for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
>                                UDP_IN UDP6_IN UDP_OUT UDP6_OUT
>                  do
>                    sed -ir '/^'$regra'/ {
>                          s/\b'$porta'\b//
>                          s/",/"/
>                          s/,,/,/
>                          s/,"/"/
>                          }' /etc/csf/csf.conf
>                  done
>            } || { echo "'$Proto' não encontrado em '$2.info'" ;}
>          done
>    ;;
>
>    *)
>          [[ "$1" =~ ^- ]] && echo -e "\n Opção desconhecida '$1'"
>          func_ajuda
>    ;;
>
> esac
>
> # FIM ----------------------------------------------
>
> Quando chamo ele com a opção -r no primeiro script ele retorna as seguintes mensagens:
>
> 'RTorrent network' não encontrado em 'ted.info'
> 'SABNZBD HTTPS' não encontrado em 'ted.info'
> 'Deluge web' não encontrado em 'ted.info'
>
> Se eu retiro as altero a linha para:
>
> for Proto in RTorrent SABNZBD Deluge
>
> Ele remove somente a porta corresponte ao "RTorrent" e apresenta seguinte saida:
>
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> 'SABNZBD' não encontrado em 'ted.info'
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> 'Deluge' não encontrado em 'ted.info'
>
> Tentei outras formas aqui, mas em todas elas ou terminava com o primeiro ou com o segundo erro.
>
> Agradeço
>
>
>
> On Sunday, June 29, 2014 2:24 PM, "Paulo Bettega address@hidden [shell-script]"
> <address@hidden> wrote:
>
>
> Veja se o que eu entendi está certo
>
> $ cat edita-csf.conf.sh
> #!/bin/bash
> #
> # Passar parâmetros para inclusão:
> #      Opção -i seguida das variáveis e/ou números separados por vírgula.
> #      -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
> #      -i $NETWORKPORT1,$VPNPORT1,21,80,$EXTERNALPORT1
> #
> # Passar parâmetros para exclusão:
> #      Opção -r seguida da variável ou nome do usuário (de preferência,
> #  o nome só deve ter letras sem acentos, números, sublinhado, ou hífen).
> #      -r $NEWUSER1
> #      -r joao
>
>
>
> # backup do csf.conf
> cp csf.conf csf.conf_$(date +%F_%T)
>
>
> func_ajuda()
> {
>    sed -r '2,/^$/! d; s/^#//; s/\t(-i|-r)/\t'${0##/}' \1/; ' "$0"
>    exit 1
> }
>
>
> case $1 in
>
>    -i)
>          if [ ! "$2" ]; then
>            echo -e '\nFaltou lista de portas para a opção -i.'
>      func_ajuda
>          fi
>
>          for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
>                        UDP_IN UDP6_IN UDP_OUT UDP6_OUT
>          do
>            sed -i '/^'$regra'/ s/"$/,'$2'"/' csf.conf
>          done
>    ;;
>
>    -r)
>          if [ ! "$2" ]; then
>            echo -e '\nFaltou usuário para a opção -r.'
>            func_ajuda
>          fi
>
>        for Proto in vsftp falha1 network HTTPS falha2 web
>          do
>            linha=$(grep ^$Proto "$2".info 2>/dev/null) && {
>                  porta=$(awk -F ': ' '{ print $2 }' <<<"$linha")
>                  for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
>                                UDP_IN UDP6_IN UDP_OUT UDP6_OUT
>                  do
>                    sed -ir '/^'$regra'/ {
> s/\b'$porta'\b//
>                          s/",/"/
>                          s/,,/,/
>                          s/,"/"/
>                          }' csf.conf
>                  done
>            } || { echo "'$Proto' não encontrado em '$2.info'" ;}
>          done
>    ;;
>
>    *)
>          [[ "$1" =~ ^- ]] && echo -e "\n Opção desconhecida '$1'"
>      func_ajuda
>    ;;
>
> esac
>
> # FIM ----------------------------------------------
>
>
> Fiz testes com todos os arquivos no mesmo diretório, então vc tem que
> editar o 'csf.conf' e '"$2".info' com os caminhos certos.
> (O script tem identação, mas pode perder na viagem do email.)
>
>
> Abraços Paulo Bettega
>
>
>
> On 28-06-2014 20:34, Arkan Add address@hidden <mailto:address@hidden> [shell-script] wrote:
>  > Paulo,
>  >
>  > Realizei alguns testes e os resultados foram da seguinte forma:
>  >
>  >  > Utilizando este comando ele editou corretamente a linha marcada.
>  > $ edita-csf.conf.sh 80 TCP_IN
>  > Mas com o for do done descomentado, ele nao removia e ainda assim acrescentava varias vezes a mesma
>  > porta em todas as linhas do arquivo TCP* UDP* e até em linhas que nao estavam na regra ICMP*.
>  > Nao estava pensando em chamar um arquivo para executar esta função mas gostei da idéia. Neste caso,
>  > para acrescentar um "-i" para adicionar e um -r para remover, como ficaria?
>  > Algo como "edita-csf.conf.sh -i 150 e edita-csf.conf.sh -r . Na verdade devo chamar ele de um outro
>  > script da seguinte forma: edita-csf.conf.sh -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
>  > A função de remover ou -r deve procurar dentro do arquivo $NEWUSER1.info pelas seguintes linhas:
>  >
>  > ...
>  > Ports
>  > -----
>  > vsftp port: 21201
>  > ...
>  > network port: 51103
>  > ...
>  > HTTPS port: 51104
>  > ...
>  > web port: 51106
>  > ...
>  > Pegar as portas do vsftp, network port, https port and web port e remove-las das linhas nas quais
>  > foram incluidas.
>  >
>  > Lembrando que as adiçoes e remoçoes so poderao ser executadas dentro das linhas TCP_IN, TCP6_IN,
>  > TCP_OUT, TCP6_OUT, UDP_IN, UDP6_IN, UDP_OUT, UDP6_OUT
>  >
>  > ...
>  > # Allow incoming TCP ports
>  > TCP_IN = "21976,80,51108,51103,51113,10000,51106"
>  >
>  > # Allow outgoing TCP ports
>  > TCP_OUT = "1:65535"
>  >
>  > # Allow incoming UDP ports
>  > UDP_IN = "53,51108,51103,51113"
>  >
>  > # Allow outgoing UDP ports
>  > # To allow outgoing traceroute add 33434:33523 to this list
>  > UDP_OUT = "1:65535"
>  >
>  > # Allow incoming PING
>  > ICMP_IN = "1"
>  >
>  > # Set the per IP address incoming ICMP packet rate
>  > # To disable rate limiting set to "0"
>  > ICMP_IN_RATE = "1/s"
>  >
>  > # Allow outgoing PING
>  > ICMP_OUT = "1"
>  >
>  > # Set the per IP address outgoing ICMP packet rate (hits per second allowed),
>  > # e.g. "1/s"
>  > # To disable rate limiting set to "0"
>  > ICMP_OUT_RATE = "0"
>  >
>  > ...
>  >
>  > # Allow incoming IPv6 TCP ports
>  > TCP6_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,51103"
>  >
>  > # Allow outgoing TCP ports
>  > TCP6_OUT = "1:65535"
>  >
>  > # Allow incoming UDP ports
>  > UDP6_IN = "20,21,53,51103"
>  >
>  > # Allow outgoing UDP ports
>  > # To allow outgoing traceroute add 33434:33523 to this list
>  > UDP6_OUT = "1:65535"
>  >
>  > Quanto as portas *_OUT, vou remover o "1:65535" e liberar apenas as necessarias.
>  >
>  > Agradeço pela ajuda.
>  >
>  > On Saturday, June 28, 2014 3:05 AM, "Paulo Bettega address@hidden
> <mailto:address@hidden> [shell-script]"
>  > <address@hidden <mailto:address@hidden>> wrote:
>  >
>  >
>  > Pelo que entendi, então não é o caso de fazer uma edição em lote,
>  > em todas as linhas dos protocolos, in e out, com a mesma porta, entendi certo?
>  >
>  > Acho que vc quer por exemplo abrir a porta 80 TCP_IN , então só é preciso
>  > editar a linha TCP_IN e adicionar a porta. Depois se vc quiser fechar essa
>  > porta, roda o script de novo com TCP_IN 80 para deletar o 80 da linha, é isso?
>  >
>  > Se for isso, pode ser passando os parâmetros para um script (novamente como o Julio fez:)
>  > (Se não for, descomente as linhas do "for do done" e comente a linha "regra=$..."
>  > assim cada regra será testada com a porta. Se vc quiser testar mais de uma porta
>  > pra cada regra, coloque mais um for com as portas dentro do for das regras)
>  >
>  > $ cat edita-csf.conf.sh
>  > #!/bin/bash
>  > #
>  >
>  > #for regra in TCP_IN UDP_IN TCP_OUT UDP_OUT TCP6_IN UDP6_IN TCP6_OUT UDP6_OUT
>  > #do
>  >
>  >    regra=${2^^}
>  > porta=$1
>  >
>  >    # Esta linha realiza a busca da variável nas linhas da $regra
>  >    grep -qE "^$regra = .*\b$porta\b" csf.conf && {
>  >
>  >    # Com esta linha removemos a variavel da $regra; se a busca tiver sucesso
>  >    sed -ir \
>  >    '/^'$regra'/ { s/\b'$porta'\b//; s/",/"/; s/,"/"/; s/,,/,/; }' csf.conf
>  >    } || {
>  >
>  >    # E esta adiciona a variável na linha da $regra; se a busca falhar
>  >    sed -i '/^'$regra'/ s/"$/,'$porta'"/' csf.conf
>  >    }
>  >
>  > #done
>  > #--------------------------------------
>  >
>  > passando protocolo e porta como parâmetros
>  > $ edita-csf.conf.sh 80 TCP_IN
>  >
>  > funciona do mesmo jeito, se houver 80 na linha do TCP_IN, exclui,
>  > se não houver, inclui.
>  >
>  > Vc pode chamar o script dentro de outro, ou usar como uma função,
>  > daí passe as variáveis que vc quer como parâmetros
>  > edita-csf.conf.sh $NETWORKPORT1 $PROTOCOLO
>  > edita-csf.conf.sh $VPNPORT1 UDP_IN
>  >
>  >
>  > O firewall é iptables? Aquelas faixas de portas indicadas como 1:65535
>  > fica mais complicado se vc quiser excluir portas. Uma solução seria
>  > vc criar uma regra de bloqueio para cara porta, ao invés de tirar a porta
>  > da faixa.
>  >
>  > Abraços Paulo Bettega
>  >
>  >
>  > On 27-06-2014 21:46, 'Felipe S. Costa' address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>> [shell-script]
>  > wrote:
>  >  > Ótimo Paulo,
>  >  >
>  >  >              Realmente funciona. JConsegui incluir corretamente a porta (10000) automaticamente.
>  >  > Mas ai ocorreu um problema...  Quando rodei o comando pela segunda vez, ele duplicou a porta
>  >  > (adicionou novamente). Algumas perguntas:
>  >  >
>  >  >                  Esta linha realiza a busca da variável nas linhas da $regra, certo?
>  >  >
>  >  > grep -qE "^$regra = .*\b$NETWORKPORT1\b" csf.conf
>  >  >
>  >  > Com esta linha removemos a variavel do TCP_IN;
>  >  >
>  >  > {
>  >  > sed -ir '/'$regra'/ s/\b'$NETWORKPORT1'\b//; s/",|,"/"/; s/,,/,/' csf.conf
>  >  > }
>  >  >
>  >  > E esta adiciona a variável na linha UDP_IN;
>  >  >
>  >  > || {
>  >  > sed -i '/'$regra'/ s/"$/,'$NETWORKPORT1'"/' csf.conf;}
>  >  >
>  >  > Como editar para que procure a variável em cada linha (TCP_IN UDP_IN TCP_OUT UDP_OUT TCP6_IN
>  >  > TCP6_OUT UDP6_IN UDP6_OUT), se encontrar, passar para a próxima e se não encontrar, inserir a
>  >  > variável e passar para a proxima?. Tentei utilizar o “|” mas não funcionou.
>  >  >
>  >  >                  Bom, esta seria a função que adicionarei ao script de criar usuários.
>  >  >
>  >  >                  A parte de remover seria adicionada ao script de remover usuários e seria
>  >  > basicamente a mesma de adicionar, somente modificando para remover a variável das linhas.
>  >  >
>  >  >                  Mais uma e última, como adicionar mais variáveis para realizar as mesmas buscas e
>  >  > alterações, algo como \b’$NETWORKPORT1’\b;\b’$VPNPORT1’\b;\b’$FTPPORT1’\b?
>  >  >
>  >  > Já agradeço pelo help até o momento. Pouco a pouco as idéias vao clareando aqui.
>  >  >
>  >  > *De:*address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > [mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>]
>  >  > *Enviada em:* sexta-feira, 27 de junho de 2014 12:27
>  >  > *Para:* address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  >  > *Assunto:* Re: [shell-script] Localizar, procurar e editar com shell-script
>  >  >
>  >  > Olá Arkan, o meu exemplo não funciona, acho que o problema é o
>  >  > ^ marcando o começo de linha no teste do bash.
>  >  > Fazendo o teste com um texto ( [[ TCP_IN =~ ^TCP ]] ) casa, mas
>  >  > com um arquivo ( [[ "$(cat csf.conf)" =~ ^TCP ]] ) não casa.
>  >  >
>  >  > Usando o grep (como o Julio fez) dá certo.
>  >  >
>  >  > $ cp csf.conf csf.conf-original
>  >  > $ for regra in TCP_IN UDP_IN TCP6_IN UDP6_IN; do
>  >  > NETWORKPORT1=10000
>  >  > grep -qE "^$regra = .*\b$NETWORKPORT1\b" csf.conf && {
>  >  > sed -ir '/'$regra'/ s/\b'$NETWORKPORT1'\b//; s/",|,"/"/; s/,,/,/' csf.conf
>  >  > } || {
>  >  > sed -i '/'$regra'/ s/"$/,'$NETWORKPORT1'"/' csf.conf;}
>  >  > done
>  >  >
>  >  > Inclui a porta 10000 na linha com UDP_IN e exclui na linha com TCP_IN
>  >  >
>  >  > Abraços Paulo Bettega
>  >  >
>  >  > On 25-06-2014 15:55, Paulo Bettega address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>>
>  >  > [shell-script] wrote:
>  >  >  > Agora com uma parte do arquivo dá pra ver melhor o que vc quer :)
>  >  >  > veja se é isso.
>  >  >  >
>  >  >  > $ cp csf.conf csf.conf-original
>  >  >  > $ for regra in TCP_IN UDP_IN TCP6_IN UDP6_IN; do
>  >  >  > NETWORKPORT1=10
>  >  >  > exp="^$regra = .*[\",]{1}$NETWORKPORT1[\",]{1}"
>  >  >  > [[ "$(cat csf.conf)" =~ $exp ]] && { sed -i "/$regra/ s/$NETWORKPORT1//; s/\",/\"/; s/,,/,/;
>  >  >  > s/,\"/\"/" csf.conf;} || { sed -i "/$regra/ s/\"$/,$NETWORKPORT1\"/" csf.conf;}
>  >  >  > done
>  >  >  >
>  >  >  > Para inclusão da porta, o teste da expressão entra no || já que a porta não existe.
>  >  >  > Para exclusão, entra no && já que a porta existe e vai casar com a expressão.
>  >  >  >
>  >  >  > Pode ter faixas de portas separadas por dois-pontos misturadas na mesma regra,
>  >  >  > por exemplo na regra TPC_IN? Se puder daí complica, o meu exemplo não funciona.
>  >  >  >
>  >  >  > Abraços Paulo Bettega
>  >  >  >
>  >  >  > On 25-06-2014 13:51, Arkan Add address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>> [shell-script] wrote:
>  > >  > > Sem problemas,
>  >  >  > >
>  >  >  > > Preciso editar algumas linhas dentro daquele arquivo (csf.conf) em /etc/csf/.
>  >  >  > >
>  >  >  > > Hoje preciso criar um script manualmente com as portas que quero liberar e gero aquela linha
>  >  > "sed -i
>  >  >  > > 's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf"para substituir a linha
> existente.
>  >  >  > >
>  >  >  > > Por exemplo,
>  >  >  > >
>  >  >  > > Se eu configuro um serviço que utiliza a porta 10, pego as TCP/UDP_IN TCP6/UDP6_IN... ,
>  > adiciona a
>  >  >  > > porta 10, edito e executo a linha "sed -i 's/^TCP_IN =.*/TCP_IN =
>  > "227,280,9090,10500,57413,10"/'
>  >  >  > > csf.conf" Alterando o campo TCP_IN para o protocolo correspondete.
>  >  >  > >
>  >  >  > > E para remover realizo o mesmo procedimento, somente retirando as portas que de
>  >  >  > >
>  >  >  > > /etc/csf/csf.conf
>  >  >  > > ...
>  >  >  > > # Lists of ports in the following comma separated lists can be added using a
>  >  >  > > # colon (e.g. 30000:35000).
>  >  >  > >
>  >  > > > # Allow incoming TCP ports
>  >  >  > > TCP_IN = "80,10000,33650,33651"
>  >  >  > >
>  >  >  > > # Allow outgoing TCP ports
>  >  >  > > TCP_OUT = "1:65535"
>  >  >  > >
>  >  >  > > # Allow incoming UDP ports
>  >  >  > > UDP_IN = "33651"
>  >  >  > >
>  >  >  > > # Allow outgoing UDP ports
>  >  >  > > # To allow outgoing traceroute add 33434:33523 to this list
>  >  >  > > UDP_OUT = "1:65535"
>  >  >  > >
>  >  >  > > # Allow incoming PING
>  >  >  > > ICMP_IN = "1"
>  >  >  > >
>  >  >  > > # Set the per IP address incoming ICMP packet rate
>  >  >  > > # To disable rate limiting set to "0"
>  >  >  > > ICMP_IN_RATE = "1/s"
>  >  >  > >
>  >  >  > > # Allow outgoing PING
>  >  >  > > ICMP_OUT = "1"
>  >  >  > >
>  >  >  > > # Set the per IP address outgoing ICMP packet rate (hits per second allowed),
>  >  >  > > # e.g. "1/s"
>  >  >  > > # To disable rate limiting set to "0"
>  >  >  > > ICMP_OUT_RATE = "0"
>  >  >  > >
>  >  >  > > ###############################################################################
>  >  >  > > ...
>  >  >  > >
>  >  >  > > No exemplo do Paulo, ele consegue inserir a variavel na linha, mas ele seta a linha com os
>  >  > valores a
>  >  >  > > serem pesquisados, como variavel.
>  >  >  > >
>  >  >  > >
>  >  >  > >
>  >  >  > > On Wednesday, June 25, 2014 9:54 AM, "'Julio C. Neves' address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>
>  >  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>> [shell-script]"
>  >  >  > > <address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>>> wrote:
>  >  >  > >
>  >  >  > >
>  >  >  > > Cara que bobeada, eu ia fazer em awk e depois achei melhor fazer em sed. Como já estava com
>  > um sono
>  >  >  > > danado, acho que misturei tudo e fiz uma grande besteira e gerei um cruzamento de 'aff
>  > maria' com
>  >  >  > > 'cruz credo'.
>  >  >  > >
>  >  >  > > Pesquisei no arquivo pq foi isso que imaginei que vc queria. O problema é que seu exemplo
>  > foi meio
>  >  >  > > incoerente com o que vc está falando. Seu exemplo foi:
>  >  >  > >
>  >  >  > > sed -i 's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf
>  >  >  > >
>  >  >  > > Por favor explique melhor a que linha vc se refere. O que vc deseja na saída, algumas linhas
>  >  >  > > editadas ou o arquivo /etc/csf.conf editado?
>  >  >  > >
>  >  >  > > Algumas dicas:
>  >  >  > > 1- A barra vertical dentro de uma expressão regular equivale a um 'ou' lógico então para
>  > pesquisar
>  >  >  > > as cadeias que vc citou, pode-se separar as linhas da seguinte maneira:
>  >  >  > > grep -E '^(TCP_IN|TCP_OUT|UDP_IN|UDP_OUT|TCP6_IN|TCP6_OUT|UDP6_IN|UDP6_OUT)=' /etc/csf.conf
>  >  >  > >
>  >  >  > > 2- Vc tb pode especificar as linhas que deseja alterar, passando o inicio delas por
> parâmetro,
>  >  >  > > colocando logo no início do script o seguinte:
>  >  >  > > RegExp=^\($(tr ' ' '|' <<< "$@")\)\ =
>  >  >  > > Fiz um testezinho no prompt para vc entender:
>  >  >  > > $ set - TCP_IN TCP_OUT UDP_IN # passando os parâmetros TCP_IN TCP_OUT UDP_IN para o
>  >  >  > > shell do prompt
>  >  >  > > $ RegExp=^\($(tr ' ' '|' <<< "$@")\)\ = # Gerando a Expressão Regular
>  >  >  > > $ echo "$RegExp" # Mostrando que ER está pronta para ser usada
>  >  >  > > ^(TCP_IN|TCP_OUT|UDP_IN) =
>  >  >  > >
>  >  >  > > Abcs,
>  >  >  > > Julio
>  >  >  > > *@juliobash*
>  >  >  > > *Próximos cursos de Shell*
>  >  >  > > *Cidade LocalPeríodo*
>  >  >  > > *Rio de JaneiroEDX <http://edx.srv.br/>02 a 06/06*
>  >  >  > > *São Paulo4Linux <http://www.4linux.com.br/>21 a 25/07*
>  >  >  > > Dou treinamento de /Shell/ em qualquer cidade.
>  >  >  > > Para mais detalhes, me mande um e-mail <mailto:address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>>.
>  >  >  > >
>  >  >  > >
>  >  >  > >
>  >  >  > > Em 24 de junho de 2014 23:48, Arkan Add address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>>
>  >  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>>
>  >  >  > > [shell-script] <address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  >  > <mailto:address@hidden <mailto:address@hidden>
>  > <mailto:address@hidden
> <mailto:address@hidden>>%20%3cmailto:address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>>>> escreveu:
>  >  >  > >
>  >  >  > > __
>  >  >  > > Julio,
>  >  >  > >
>  >  >  > > ++ sudo grep '\b51211\b' /etc/csf/csf.conf
>  >  >  > > ++ sudo sed -i.veio '/^TCP_IN/; s/$/,51211' /etc/csf/csf.conf
>  >  >  > > sed: -e _expression_ #1, char 10: unknown command: `;'
>  >  >  > > ++ echo Incluindo porta 51211
>  >  >  > > Incluindo porta 51211
>  >  >  > >
>  >  >  > > Houve falha na adiçao da regra. Vi que voce procurou pelo valor no arquivo e não na linha, é
>  >  >  > > possivel procurar somente na linha ou linhas? Eu terei que adicionar esta mesma variavel nas
>  >  >  > > linhas que se iniciam com TCP_IN = , TCP_OUT = , UDP_IN = , UDP_OUT = , TCP6_IN = ,
> TCP6_OUT = ,
>  >  >  > > UDP6_IN = , UDP6_OUT = .
>  >  >  > >
>  >  >  > > Para remover este valor do csf.conf é que creio que esta mais complicado.
>  >  >  > >
>  >  >  > > Precisara ler o valor das linhas "network port1: , network port2:" dentro do arquivo
>  >  >  > > /etc/$NEWUSER1.info, voltar no /etc/csf/csf.conf e remove-las das linhas TCP_IN = ,
> TCP_OUT = ,
>  >  >  > > UDP_IN = , UDP_OUT = , TCP6_IN = , TCP6_OUT = , UDP6_IN = , UDP6_OUT = .
>  >  >  > >
>  >  >  > >
>  >  >  > >
>  >  >  > >
>  >  >  > > On Tuesday, June 24, 2014 10:44 PM, "'Julio C. Neves' address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>
>  >  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>>
>  >  >  > > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>> [shell-script]"
>  > <address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  >  > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>%0b>> >
>  > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>>> wrote:
>  >  >  > >
>  >  >  > >
>  >  >  > > grep "\b$NETWORKPORT1\b" /etc/csf.conf || {
>  >  >  > > sed -i.veio "/^TCP_IN/; s/$/,$NETWORKPORT1"/etc/csf.conf
>  >  >  > > echo Incluindo porta $NETWORKPORT1
>  >  >  > > csf -r
>  >  >  > > echo /etc/csf.conf está OK
>  >  >  > > }
>  >  >  > >
>  >  >  > > Abcs,
>  >  >  > > Julio
>  >  >  > > *@juliobash*
>  >  >  > > *Próximos cursos de Shell*
>  >  >  > > *Cidade LocalPeríodo*
>  > >  > > *Rio de JaneiroEDX <http://edx.srv.br/>02 a 06/06*
>  >  >  > > *São Paulo4Linux <http://www.4linux.com.br/>21 a 25/07*
>  >  >  > > Dou treinamento de /Shell/ em qualquer cidade.
>  >  >  > > Para mais detalhes, me mande um e-mail <mailto:address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>>.
>  >  >  > >
>  >  >  > >
>  > >  > >
>  >  >  > > Em 24 de junho de 2014 22:21, address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>>
>  >  > <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>> [shell-script]
>  > >  > > <address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  > <mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
>  >  > <mailto:address@hidden <mailto:address@hidden>
>  > <mailto:address@hidden
> <mailto:address@hidden>>%20%3cmailto:address@hidden
> <mailto:address@hidden>
>  > <mailto:address@hidden <mailto:address@hidden>>>>> escreveu:
>  >  >  > >
>  >  >  > > __
>  >  >  > > Estou precisando resolver uma questão de manipulação de texto para um projeto pessoal de
>  >  >  > > automação aqui. Basicamente tenho um script que cria usuarios automaticamente e estou
>  > >  > > precisando adicionar uma função para liberar portas no firewall para os serviços que este
>  >  >  > > script habilita.
>  >  >  > >
>  >  >  > > Utilizo o csf como firewall e consigo refazer toda uma linha com o comando abaixo:
>  >  >  > >
>  >  >  > > sed -i 's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf
>  >  >  > >
>  >  >  > > Os campos que preciso modificar são campos dentros das "".
>  >  >  > >
>  >  >  > > Por exemplo:
>  >  >  > >
>  >  >  > > Eu recebo a porta a porta pela variavel $NETWORKPORT1
>  >  >  > >
>  >  >  > > Supondo que o valor da variavel seja 50, preciso checar se ele existe na linha TCP_IN dentro
>  >  >  > > do /etc/csf.conf, se não existir, adiciona-lo e realizar o refresh de regras executando um
>  >  >  > > "csf -r".
>  >  >  > >
>  >  >  > > Também preciso realizar o contrario, verificar se um valor existe nesta mesma linha,
>  >  >  > > remove-lo e realizar o refresh nas regras.
>  >  >  > >
>  >  >  > > Qual a melhor forma de realizar tais funçoes?
>  >  >  > >
>  > >  > >
>  >  >  > >
>  >  >  > >
>  >  >  >
>  >  >
>  >
>  >
>


------------------------------------

------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


------------------------------------

Links do Yahoo Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    address@hidden

<*> O uso que você faz do Yahoo Grupos está sujeito aos:
    https://info.yahoo.com/legal/br/yahoo/utos/terms/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]