Adicionando um novo usuário no linux de um script

2

Estou usando uma instalação personalizada do Redmine para gerenciar projetos. Eu consegui ligar a adição de novos usuários e enviar as informações de login para um script bash que eu tenho. Abaixo está meu script:

#!/bin/sh
UNAME=$1
UPASS=$2
wall "$UNAME $UPASS"
useradd "$UNAME"
echo "$UPASS" | passwd "$UNAME" --stdin
usermod -g restricted "$UNAME"

O echo é um bash embutido, então ele não aparecerá na tabela de processos quando ele disparar a senha. O problema é que recebo uma queixa de permissão do Redmine:

/opt/rms/redmine/new-user: line 5: /usr/sbin/useradd: Permission denied
Only root can do that.
/opt/rms/redmine/new-user: line 7: /usr/sbin/usermod: Permission denied

Isso obviamente indica que eu preciso de permissão de root ou outro método para fazer isso. Então eu tentei definir o bit UID com permissões 4755 no arquivo para que ele seja executado como root e recebo o mesmo erro acima. Alguma ideia do que está acontecendo aqui?

Minha situação geral é que eu pretendo adicionar novos usuários ao sistema de gerenciamento de projetos automaticamente como usuários do linux, e então quando eles são adicionados a um determinado grupo eu planejo conectá-los para que eles obtenham permissões estendidas que lhes permitam acessar um Mercurial. repositório via SSH - para que o gerenciamento de usuários seja tratado completamente através do front end.

    
por Joshua Enfield 12.07.2010 / 21:18

2 respostas

5

Devido às informações limitadas, não vou teorizar detalhadamente sobre as potenciais implicações de segurança da sua arquitetura. No entanto, eu ficaria especialmente cauteloso ao conceder a capacidade de adicionar usuários a um usuário não raiz.

Com isso dito, eu desencorajaria o uso do bit SUID para esse propósito. Se nada mais, porque introduz uma exposição adicional a todos os usuários do sistema. Significado, cada usuário poderia adicionar usuários .

Como alternativa, você pode configurar o sudo para permitir que o usuário não root execute o usermod. Por exemplo, execute visudo e adicione esta linha:

redmineuser ALL=NOPASSWD: /usr/sbin/usermod

    
por 12.07.2010 / 21:35
0

De man wall :

Wall displays the contents of file or, by default, its standard input, on the terminals of all currently logged in users.

Por que você deseja transmitir um nome de usuário e uma senha para todos que fizeram login?

Echo is a bash builtin so it will not show up in the process table when it shoots the password in.

No entanto, você está passando a senha como um argumento para esse script, tornando esse ponto irrelevante.

Se você estiver preocupado com a segurança de echo aparecer em ps output, você deve se preocupar com outras coisas, bem como com o problema do argumento de linha de comando e com o SETUID em useradd e as senhas de transmissão são idéias ruins.

    
por 12.07.2010 / 21:53