Назад | Перейти на главную страницу

Как добавить пользователя linux со случайным или недействительным паролем из скрипта

Я хочу добавить пользователя в систему linux из скрипта, но не хочу придумывать пароль или заботиться о нем. Это должно происходить автоматически.

Цель состоит в том, чтобы сгенерировать ssh-ключи, и этому пользователю нужно только войти в систему удаленно. Или, альтернативно, этот пользователь будет использоваться пользователем sudo через sudo su - thatuser.

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

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

Я мог бы написать сценарий, который генерирует что-то ramdom, но, мэбай, есть что-то встроенное? Или просто деактивировать пароль (чтобы вход по паролю был невозможен, а вход по ssh с ключами и sudo su - thatuser работает отлично.

Редактировать: Уже есть некоторые ответы, отлично, но я все еще не уверен, как это сделать. Как бы выглядел сценарий?

Он должен вести себя как adduser и создавать все стандартное (например, стандартный домашний каталог, скопированный скелет, группу с тем же именем)

Edit2: В конце концов, с вашей помощью я нашел решение, которое работает, и хочу им поделиться. Это сценарий, который я называю «adduser-nopasswd» и помещаю в / usr / local / sbin (это хорошее место?), И он может быть выполнен только пользователем root. Он принимает один аргумент, который является одновременно именем новой группы и пользователя:

#!/bin/sh -e
# the -e makes the script exit immediateley if one command fails
NAME=$1
groupadd $NAME
useradd --create-home -d /home/$NAME --shell /bin/bash -g $NAME $NAME

Есть комментарии по этой функции?

Если вы не укажете пароль для useradd он не будет установлен (и, таким образом, пользователь не сможет войти в систему с помощью пароля). Обратите внимание, что useradd и adduser это две разные команды.

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

useradd --create-home <user>

Затем вы просто создаете каталог .ssh в своем домашнем каталоге, chmod это к 0700 (SSH понадобится для безопасности) и поместите открытый ключ пользователя в .ssh/authorized_keys (пара закрытого / открытого ключей должна быть создана самим пользователем на его собственном компьютере).

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

usermod --lock <user>

Утилита / usr / sbin / useradd всегда создавала для меня пользователей, не требуя паролей. Я написал много сценариев, которые брали / etc / passwd другой системы и создавали для меня пользователей.

В качестве альтернативы, если вы посмотрите документацию для mercurial-server, вы увидите, как настроить множество ключей SSH (клиентов) для запуска программ от имени одного пользователя на стороне сервера.

# cat user-pw_list
john:p455W0rD
geany:p455W0rD


# cat CreateUsers.sh
#!/bin/bash
#
# filename: CreateUsers.sh
# usage: cat "User:passwd" | $0
#
set -e
# set -x
while read ; do
  USER=${REPLY%%:*}
  PWD=${REPLY##*:}
  # alternative for random passwd, where $RANDOM is a bash function
  #PWD=${REPLY%%:*}$RANDOM$RANDOM

  echo -e "adding User $USER "
  # for disabled users: /usr/sbin/nologin, otherwise /bin/bash
  /usr/sbin/useradd -c automaticUser -m -k/dev/null -s /usr/sbin/nologin $USER
  echo "$USER:$PWD" | chpasswd --md5 $USER

  ## also add user to samba:
  #echo -e "$PWD\n$PWD" | pdbedit -t -u $USER
done

Хорошо, давайте добавим наших пользователей:

cat user-pw_list | ./CreateUsers.sh

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

dd if = / dev / urandom bs = 16 count = 1 2> / dev / null | uuencode - | голова -n 2 | grep -v begin | вырезать -b 2-10

Это будет читать 16 байтов случайных данных, uuencode их, чтобы преобразовать их в печатные символы, прорезать дополнительный вывод uuencode, а затем взять только случайные символы из кодировки. Вот пример вывода:

$ dd if = / dev / urandom bs = 16 count = 1 2> / dev / null | uuencode - | голова -n 2 | grep -v begin | вырезать -b 2-10

RJ <B6QYRO

Поместите * в поле пароля в / etc / shadow (это должно произойти, если вы не устанавливаете пароль). Это предотвратит вход пользователя в систему.

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