Добавляем пользователей скриптом.

Добрый день!

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

sudo adduser имя_пользователя

где прописываются данные пользователя: имя, телефон, кличка кошки… Это всё хорошо, но не автоматизированно, что заставляет делать всё медленно и с ошибками. Напишем скрипт, чтобы ошибки делались быстрее!

Для начала научимся просто создавать пользователя. Делается это командой.

sudo useradd имя_пользователя

Казалось бы, мы сделали то же самое, ан нет — Perl Linux не повторяется — в частности, теперь у нас ничего не спросят. Создать? Да легко! Правда, если пользователь уже существует нам напишут что-то типа:

useradd: пользователь killemall уже существует

Таким образом мы просто создадим пользователя «бомжа» — то бишь без дома. Чтобы пользователю было где погреться, добавим ключик -m

sudo useradd имя_пользователя -m

Теперь у пользователя будет создаваться домашняя директория, если её ещё нет.

O’key, у пользователя есть дом, осталось дать ему пароль. И вот тут то у меня случился маленький ступор: подавляющее большинство запросов гугла ведут на следующее решение:

echo -e "пароль\nпароль" | passwd --stdin имя_пользователя

К сожалению, ключика --stdin у моей версии passwd не оказалось. Печаль, уныние, сожаление о бесцельно прожитом…

Ещё был вариант с ключиком -p у useradd, который брал зашифрованный пароль пользователя и ставил его пользователю. Возможно, буду его использовать… А что, зато секьюрно!

Но quick and dirty требует от нас простых решений. Самым простым (на мой взгляд) оказалось использовать chpasswd. Выглядит это следующим образом:

echo 'имя_пользователя:пароль' | sudo chpasswd

Всё, пользователь может заходить!

Ах, да, задача же была автоматизировать… В итоге получился следующий скрипт, читающий файл users.txt с данными вида:

пользователь1:пароль1
пользователь2:пароль2
...
пользовательN:парольN

Сам скрипт:

#!/usr/bin/env perl

open F, "users.txt" or die "Cann't find file users.txt\n";

for my $line (<F>) {
    chomp $line;
    my ($user, $pass) = split(':', $line);

    print "[!] Add $user...\n";

    `useradd $user -m`;
    `echo '$line' | sudo chpasswd`;
}

print "\n[+] All done.\n";
Мне понравилась эта заметка:
Другое:
  • Бесплатные программы для Windows
  • Мобильные телефоны

Добавляем пользователей скриптом.: 4 комментария

  1. Прошу прощения, но уже давно число пользователей и число компьютеров равны друг другу. Иначе смысл понятия персональный теряется. Где-то ещё бывает иначе?

    • Всё так, да вот есть один момент: существуют «спец.» компьютеры, на которых крутятся спец. данные, доступ к которым должен быть строго лимитирован. Это могут быть банковские сервера, игровые и много ещё какие.

      Хотя, в этот раз всё гораздо прозаичнее: в университете, где я учусь поднимается новый спец. курс, в рамках которого людям нужно программировать на espresso — симуляторе физических процессов, да вот беда — в классе, где всё должно происходить, стоит ведна, а espresso бегает с пингвинами…

      Устанавливать ничего на компьютеры нельзя «мы же всё поломаем» — вот и пришлось организовать линукс сервер с espresso для непонятного числа пользователей, доступ по nx…

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

    • Ок :) . Просто решил добавить в блог, связанный с Linux немного информации о настройке Linux… Может кто-то столкнётся с похожей проблемой — получит решение.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>