как создать пользователей на лету

Это - просто плохая идея, что я просто имел.

Существует ли путь, создают пользовательские учетные записи на лету?

Скажите, что у меня есть Ubuntu vm созданный, и я хочу предоставить доступ группы людей. Но по любой причине я особенно не забочусь о том, что они делают с нею.

Как я могу установить его это, когда пользователь ssh в vm учетная запись пользователя будет автоматически создан?

и да, я знаю в теории, я мог просто создать гостевую учетную запись и долю, что с людьми, которые должны получить доступ. но затем группа людей будет совместно использовать учетную запись, и я также хочу зарегистрировать то, что все сделали настолько имеющий их на той же учетной записи, сделает это очень трудным.

и да, это - очень плохая идея.

2
задан 21 June 2015 в 23:45

2 ответа

Мне нравится проблема. Да можно сделать это, если Вы готовы позволить первому сбою ssh. Следующий сценарий (который я на самом деле протестировал) выслеживает журнал sshd, который по умолчанию (в моей системе) продолжает линии как это на неудавшемся входе в систему ssh:

Jun 20 21:06:35 home sshd[18163]: Invalid user dummy from ::1

Когда такая строка подобрана, идентификатор пользователя (макет в этом примере) извлечен, и учетная запись пользователя создается с зашифрованным паролем, который совпадает с идентификатором пользователя (макет). Вторая попытка войти в систему будет теперь работать.

# encrypt a cleartext password given as arg
cryptpw(){
        perl -e '
        my $pw = "'"$1"'";
        my $salt = join("",("a".."z")[rand 26,rand 26]);
        printf "%s\n", crypt($pw,$salt);'
}

sudo journalctl --no-pager -lfu sshd | 
while read line
do    if [[ "$line" =~ "Invalid user "([^ ]*) ]]
      then  newuser=${BASH_REMATCH[1]}
            pw=$(cryptpw "$newuser")
            sudo useradd "$newuser" -p "$pw"
      fi
done

Пользователю могло бы понравиться затем копировать их ключ к удаленному:

ssh-copy-id dummy@host

Если у них еще нет ключа, сначала сделайте:

ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''
0
ответ дан 3 December 2019 в 00:17

Используя python:

#!/usr/bin/env python2
import re, crypt, subprocess

with open('/var/log/auth.log') as logfile, open('/etc/passwd') as passfile:
    given_usernames = []
    for line in logfile:
        name = re.search(r'(?<= Invalid user ).*?(?= from)', line)
        if name:
            given_usernames.append(name.group())

    current_usernames = []
    for line in passfile:
         current_usernames.append(re.search(r'^[^:]+', line).group())

    for i in given_usernames:
        if i not in current_usernames:
            password = crypt.crypt(i + str(123), 'foobar12')
            subprocess.call('sudo useradd -m -p {0} {1}'.format(password, i).split())
  • Когда пользовательская попытка войти в систему в компьютер через ssh то, у кого нет существующей учетной записи, будет отклонено для входа в систему, и этот инцидент будет зарегистрирован в /var/log/auth.log файл, имеющий строку, например:

    Jun 21 01:11:03 my_hostname sshd[17763]: Invalid user foobar from 192.168.4.2
    
  • мы используем эту строку для извлечения имени пользователя, введенного для создания счета на того пользователя так, чтобы со следующего раза пользователь мог войти в систему без любой проблемы

  • Мы использовали пароль в качестве имени пользователя, данного плюс 123 (соль foobar12) т.е. если имя пользователя spamegg пароль будет spamegg123. Можно изменить его и соль к любому значению, которое Вы хотите, и конечно пользователь должен изменить пароль после входа в систему впервые

  • В этом подходе все имена пользователей от /var/log/auth.log файл взят в список и так же все имена пользователей от /etc/passwd также взяты в списке.

  • Затем мы проверили, существует ли введенное имя пользователя уже, если не затем пользователь создается с паролем, упомянутым ранее.

  • Можно выполнить его как a cron задание для проверки имен пользователей добавляется автоматически.

0
ответ дан 3 December 2019 в 00:17

Другие вопросы по тегам:

Похожие вопросы: