Это - просто плохая идея, что я просто имел.
Существует ли путь, создают пользовательские учетные записи на лету?
Скажите, что у меня есть Ubuntu vm созданный, и я хочу предоставить доступ группы людей. Но по любой причине я особенно не забочусь о том, что они делают с нею.
Как я могу установить его это, когда пользователь ssh в vm учетная запись пользователя будет автоматически создан?
и да, я знаю в теории, я мог просто создать гостевую учетную запись и долю, что с людьми, которые должны получить доступ. но затем группа людей будет совместно использовать учетную запись, и я также хочу зарегистрировать то, что все сделали настолько имеющий их на той же учетной записи, сделает это очень трудным.
и да, это - очень плохая идея.
Мне нравится проблема. Да можно сделать это, если Вы готовы позволить первому сбою 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 ''
Используя 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
задание для проверки имен пользователей добавляется автоматически.