Добрый день!
Возможно, я предлагаю очередной велосипед, но пол часа гугления нормальных результатов не дало. А суть вопроса следующая: необходимо создать несколько пользователей скриптом. У пользователей должны быть домашние папки и пароль. Руками это делается довольно просто:
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";
Прошу прощения, но уже давно число пользователей и число компьютеров равны друг другу. Иначе смысл понятия персональный теряется. Где-то ещё бывает иначе?
Всё так, да вот есть один момент: существуют «спец.» компьютеры, на которых крутятся спец. данные, доступ к которым должен быть строго лимитирован. Это могут быть банковские сервера, игровые и много ещё какие.
Хотя, в этот раз всё гораздо прозаичнее: в университете, где я учусь поднимается новый спец. курс, в рамках которого людям нужно программировать на espresso — симуляторе физических процессов, да вот беда — в классе, где всё должно происходить, стоит ведна, а espresso бегает с пингвинами…
Устанавливать ничего на компьютеры нельзя «мы же всё поломаем» — вот и пришлось организовать линукс сервер с espresso для непонятного числа пользователей, доступ по nx…
Понял. На серверах может быть что угодно, уж как там админ накуролесил. Увы, я инженер, а поэтому предпочитаю стандартные решения в стандартных ситуациях, иначе и гайку закрутить нужен спец ключ, но это вовсе не означает, что я не сумел оценить Ваши знания и умения.
Ок . Просто решил добавить в блог, связанный с Linux немного информации о настройке Linux… Может кто-то столкнётся с похожей проблемой — получит решение.