Alterando a senha do usuário por meio do aplicativo GUI

3

Eu estava fazendo uma aplicação GUI para gerenciar usuários e grupos no Linux!

Acabei com a parte em que cria um novo usuário, mas fica com a parte em que ele fornece ao usuário recém-criado uma nova senha. O que meu aplicativo simplesmente faz é obter a entrada necessária (nome de usuário, lista de grupos e senha) por meio de uma GUI e executa um script passando essas informações como argumento. Digamos que tenhamos uma conta de usuário, xyz. Se eu quiser alterar a senha dessa conta, tudo que preciso fazer é simplesmente executar o comando:

passwd xyz

Isso pedirá uma nova senha. Agora posso criar uma nova conta usando scripts, porque todas as informações necessárias são passadas na linha de comando.

useradd -m -G users -g "groups" -s /bin/bash "UserName"

Eu posso executar um script através do aplicativo Qt e criar o usuário, mas em passwd cmd , a entrada é solicitada na outra linha. Como se lida com isso?

    
por Chronix01 20.06.2014 / 02:34

4 respostas

3

Acho que a resposta certa aqui é: não use shell para uma ferramenta de linha de comando - use uma chamada de biblioteca . Isso permitirá que você lide melhor com os erros e evita a passagem da senha em uma linha de comando propensa a riscos.

Uma biblioteca que você pode usar é o libuser , que é relativamente simples e tem ligações C e Python.

    
por 20.06.2014 / 02:50
4

Como root, você pode definir sistematicamente a senha de um usuário por meio de um script usando este método:

$ echo -n "$passwd" | passwd "$uname" --stdin

Gerando senhas

Eu gosto de usar a ferramenta de linha de comando pwgen para gerar senhas.

$ passwd="'pwgen -1cny | sed 's/[\$\!]/%/g''"

$ pwgen --help
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]

Options supported by pwgen:
  -c or --capitalize
    Include at least one capital letter in the password
  -A or --no-capitalize
    Don't include capital letters in the password
  -n or --numerals
    Include at least one number in the password
  -0 or --no-numerals
    Don't include numbers in the password
  -y or --symbols
    Include at least one special symbol in the password
  -s or --secure
    Generate completely random passwords
  -B or --ambiguous
    Don't include ambiguous characters in the password
  -h or --help
    Print a help message
  -H or --sha1=path/to/file[#seed]
    Use sha1 hash of given file as a (not so) random generator
  -C
    Print the generated passwords in columns
  -1
    Don't print the generated passwords in columns
  -v or --no-vowels
    Do not use any vowels so as to avoid accidental nasty words

Mas isso não é inseguro?

Não. A senha está sendo passada via STDIN para passwd , embora seja possível alguém espionar os processos via ps , mesmo que isso não permita que um usuário veja os processos do root, a entrega da senha para passwd está bloqueado.

Exemplo

Digamos que eu execute este comando em um terminal como root:

$ ( sleep 10; echo "supersecret" | passwd "samtest" --stdin ) &
[1] 13989

Eu então executo ps em outro terminal:

$ ps -AOcmd | grep pass
14046 passwd samtest --stdin      R pts/11   00:00:00 passwd samtest --stdin

Após a alteração da senha no primeiro terminal:

[root@greeneggs ~]# Changing password for user samtest.
passwd: all authentication tokens updated successfully.

E sobre o eco a passar?

Mesmo isso não vaza a senha. Aqui está outro teste demonstrando isso. Primeiramente nós começamos este comando em um terminal secundário. Isso coletará a saída de ps .

$ while [ 1 ]; do ps -eaf2>&1 | grep -E "echo|pass";done | tee ps.txt

Em seguida, executamos nosso comando de configuração de senha:

$ echo "supersecret" | passwd "samtest" --stdin &
[1] 20055
$ Changing password for user samtest.
passwd: all authentication tokens updated successfully.

[1]+  Done                    echo "supersecret" | passwd "samtest" --stdin

A verificação do conteúdo de ps.txt mostra que a senha não vazou:

$ grep supersecret ps.txt
$

Alterar o comando ps que usamos para ps -eaf também não o vaza.

    
por 20.06.2014 / 02:43
1

passwd --help na minha caixa indica que root pode executá-lo com --stdin para alimentá-lo com a nova senha no stdin.

    
por 20.06.2014 / 02:49
0

O comando chpasswd lê uma lista de pares de nome / senha de usuário na linha de comando para atualizar um grupo de usuários existentes. Cada linha está no formato

user_name:password

Este comando destina-se a ser usado em grandes ambientes de sistema, onde muitas contas são criadas em uma única vez. Para ler mais opções deste comando, digite

man chpasswd
    
por 25.03.2016 / 13:24