Script Bash para verificar o acesso ao shell

1

Estou trabalhando em um script de shell para gerenciar facilmente as contas. Eu quero ter uma opção para ativar e desativar o acesso ao shell (o que é fácil), mas a parte complicada é encontrar se uma conta já tem acesso ao shell para que meu script possa mostrar as opções adequadas.

Isso é o que eu tenho atualmente:

Nota: $account é a conta dada

function checkIfShellAccess
{
    ret=false
    getent passwd $account >'/bin/bash' 2>&1 && ret=true

    if $ret; then
        HAS_SHELL=1
    else
        HAS_SHELL=0
    fi
}

Meu problema é: quando executo meu script e verifico se o usuário tem acesso ao shell, recebo o seguinte aviso:

line 241: /bin/bash: Text file busy

a linha 241 é:

getent passwd $account >'/bin/bash' 2>&1 && ret=true

Estou usando: CentOS release 6.5 (Final)

Obrigado por qualquer ajuda sobre isso.

    
por Jeremy 21.05.2014 / 21:20

1 resposta

2
getent passwd $account >'/bin/bash' 2>&1 && ret=true

A linha acima está tentando sobrescrever /bin/bash . Você não quer fazer isso. Para testar a presença de /bin/bash na linha retornada por getent , use:

getent passwd "$account" | grep -q '/bin/bash' && ret=true

Isso funcionará porque grep define um código de saída de acordo com a localização do texto.

Existem, no entanto, muitos shells diferentes que os usuários podem usar. Estes podem incluir csh , ksh e zsh . Quando o acesso ao shell está desativado, o shell é geralmente configurado para /bin/false . Se isso for verdade em seu sistema, considere o teste:

getent passwd "$account" | grep -q '/bin/false' || ret=true
    
por 21.05.2014 / 21:23