Каждый администратор всегда сводит свои действия к минимуму, пишет скрипты, пишет программы и чтобы меньше делать рутинных задач приходится проявлять фантазию и поработать головой. Хочу поделиться своим опытом, может кому-то и поможет. У меня в компании сейчас малое количество сотрудников, порядка 15-18. Почта создается на сервере Zimbra, а каждый сотрудник работает под своей локальной учетной записью на компьютере. И до меня тут исторически сложилось, что AD нет.


Появилась потребность в разворачивании файлового сервера, я развернул его на базе MS Windows server 2016, из себя он представляем роль файлового сервера, где создан VMDX(виртуальный жесткий диск) который и является общим пулом для всех. По доступу все просто, создаем локальные группы и даем разрешения на группы, а далее каждого сотрудника добавляем в эти самые группы. Но заводить каждого сотрудника вручную, двигать мышкой, перещелкивать вкладки и потом еще писать письмо сотруднику с паролем и доступом, это не "тру". В итоге я написал небольшой скрипт, где из одного консольного окна мы делаем эти все действия в 4 шага.



Для начала нам надо создать пользователя, создать ему пароль и добавить описание, для этого передать данные в переменные.


$login=read-host "Введите имя сотрудника" #Здесь укажем логин пользователя
$name=read-host "Введите полное имя сотрудника" #Это ФИО
$dep=read-host "Должность сотрудника" #Это поле описание
$Chars = [Char[]]"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" #Символы которые могут использоваться в пароле
$Password=($Chars | Get-Random -Count 10) -join "" #Генерируем пароль длиной в 10 символов
$date = Get-Date #Получаем дату
" $date " + "для сотрудника" + " srv-fs\" + "$login " + "создан пароль" + " $Password" >> "X:\IT\password_users.txt"
$us="$login"+"@"+"domain.net" #Собираем все в строчку и записываем в файлик

После прохождения этого блока мы получаем строчку в файле — "02/12/2018 08:18:24 для сотрудника srv-fs\testovich создан пароль a15qBci2m9", далее нужно создавать эту учетную запись.


$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force #Конвертируем сгенерированный пароль в шифрованный
New-LocalUser "$login" -Password $SecurePassword -PasswordNeverExpires -FullName "$Name" -Description "$dep" #Создаем пользователя
Add-LocalGroupMember -Group "Share" -Member "$login" #Добавляем нашего пользователя в общую группу

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



А теперь отправим сотруднику данные для входа.


$EmailFrom = "srv-fs@domain.net" #От этого имени оправляем письмо
$EmailTo = "it@domain.net,$us" #Здесь мы отправляем письмо адресатам где $us - это $login"+"@"+"domain.net
$Subject = "Доступ к общему диску"
$Body = "$name" + ", вам предоставлен доступ к общему сетевому диску. Для входа используйте. " + "Имя пользователя" + " srv-fs\" + "$login " + " | Пароль" + " $Password" + "|" #Тело письма
$SmtpServer = "mx.domain.net" #Сервер отправки
$smtp = New-Object net.mail.smtpclient($SmtpServer)
$smtp.Send($EmailFrom, $EmailTo, $Subject, $Body)

На почту сотрудика придет сообщение с темой "Доступ к общему диску", а в теле письма будет
"Ivanov Ivan Testovich, вам предоставлен доступ к общему сетевому диску. Для входа используйте. Имя пользователя srv-fs\testovich | Пароль a15qBci2m9|"


Не забываем, ведь сотрудник работает в каком-то подразделении а у нас доступ к папкам по группам, теперь нам надо добавить пользователя в нужную группу.


#Выводим список доступных отделов которые соответствуют группам, строка номер 1 соответствует первой строке групп

Write-Host ?Выберите подразделение? -ForegroundColor Red
Write-Host ?1. Бухгалтерия? -ForegroundColor Green
Write-Host ?2. Администраторы? -ForegroundColor Green
Write-Host ?3. Аналитики? -ForegroundColor Green
Write-Host ?4. Разработчики? -ForegroundColor Green
Write-Host ?5. Отдел кадров? -ForegroundColor Green
Write-Host ?6. IT? -ForegroundColor Green
Write-Host ?7. Руководство? -ForegroundColor Green
Write-Host ?8. Выход или не назначать подразделение? -ForegroundColor Red

$choice = Read-Host ?Введите номер подразделения? #Будем ожидать номер подразделения

Switch($choice){
  1{Add-LocalGroupMember -Group "Account" -Member "$login"}
  2{Add-LocalGroupMember -Group "Admin" -Member "$login"}
  3{Add-LocalGroupMember -Group "Analytic" -Member "$login"}
  4{Add-LocalGroupMember -Group "Developer" -Member "$login"}
  5{Add-LocalGroupMember -Group "HR" -Member "$login"}
  6{Add-LocalGroupMember -Group "IT" -Member "$login"}
  7{Add-LocalGroupMember -Group "Management" -Member "$login"}
  8{Write-Host ?Выход?; exit}
    default {Write-Host ?Неверное значение, попробуйте еще раз.? -ForegroundColor Red}
}


И в конце всего этого мы имеет готового пользователя с правильными группами, описанием и паролем. Сотрудник же в свою очередь получил письмо и подключился к диску, а если и нет то, это уже совсем другая история...

Комментарии (30)


  1. Mchechulin
    12.02.2018 15:52

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


    1. encore-show Автор
      12.02.2018 15:56

      Когда сотрудник к нам приходит ему создается учетка в Zimbra (LDAP), у него уже появляется почта. А потом уже дается доступ к общему диску, а иногда и не требуется, если это подрядчик.


      1. Dobryak88
        12.02.2018 16:08

        Доступ к почтовому ящику он должен получить с какого-то личного устройства?


        1. encore-show Автор
          12.02.2018 16:09

          Почему, со своей рабочей станции, через web интерфейс или же любой почтовый клиент.


          1. Dobryak88
            12.02.2018 16:55
            +1

            А в какой момент он получает логин/пароль от своей рабочей станции?


            1. encore-show Автор
              12.02.2018 18:15

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


  1. Smearg
    12.02.2018 16:01

    Для отправки письма проще использовать командлет Send-MailMessage.


    1. encore-show Автор
      12.02.2018 16:02

      Спасибо за совет, учту


    1. andyrootman
      12.02.2018 16:36

      А для генерирования пароля можно использовать [System.Web.Security.Membership]::GeneratePassword(8,$null)


      1. encore-show Автор
        12.02.2018 16:37

        Согласен, тогда отпадет необходимость в конвертации


  1. Conung_ViC
    12.02.2018 16:07

    Извините, но…
    АналиЛИтики?


    1. encore-show Автор
      12.02.2018 16:10

      Спасибо, исправил


  1. hamnsk
    12.02.2018 16:53
    +1

    пособие для мамкиных кулхацкеров))) а не судьба разок нормально АД настроить, и ГПО разрулить? А пароль всем нужно выдавать временный, и менять его при первом входе, причем ГПО не даст назначить что то вроде 1234567 и прочих, если конечно политика не отключена.
    Да и не совсем понятно, если АД и ГПО настроены не пофиг ли где вводить, в окне консоли или в окне диалога? С учетом того, что УЗ можно копирнуть, да и некоторые поля например заполняют типа кабинета местонахождения времени действия и тд…


    1. andewil
      12.02.2018 18:05

      Я так понял нет там АД


    1. encore-show Автор
      12.02.2018 18:09

      да, хоть для мамкиных кулцхакеров)) Нормально настроить AD которого нет, ну да логично. Локальная ГПО сервера и так не дает создать пароль 1 и т.п. Так что либо вы не внимательно прочитали, либо бегло пробежались по статье. Если бы было ГПО, были бы аушки и нормальные группы, создал пользователя в определенной аушке и подцепились группы и можно было бы монтирование диска сделать гпо, а у меня ситуации WORKGROUP. Поэтому даже пароль поменять временный не выйдет, так к терминалке нет доступа.


      1. hamnsk
        12.02.2018 18:31

        я прочитал статью, и вместо того чтобы поднять АД и настроить, вы стали изобретать костыль, чтобы облегчить жизнь временно. Сегодня у вас 15-18 сотрудников, и внимание вопрос, работая в этой компании вы не знаете сколько у вас УЗ и сколько вы обслуживаете компов? и Сколько сотрудников? Там где есть сетка шары и больше 3-х компов уже имеет смысл поднять АД. Ну так если у вас рдп на сервере отключен то конечно не выйдет, а если бы тачка была в домене то и не нужна консоль он при входе на своей тачке сменит, или если бы почта на ЛДАП завязана бы была, то через почтовый клиент.


        1. encore-show Автор
          12.02.2018 18:55

          Это все конечно хорошо, про необходимость контроллера от 3-х компов есть разные мнения. Кто-то считает нужным кто-то нет, на данный момент инфраструктура не требует контроллера. А так конечно да, AD удобнее. Создал объект поместил куда-надо, также с пользователем и пароль бы менял, тебе и политика, диски, принтеры… но имеем то, что имеем. Пока честно не вижу острую необходимость в домене, пока перспективы роста количества сотрудников нет. Да и потом если поднимать контроллер, то необходимо их два, а это уже финансовые затраты, которые в глобальном понимании стоят дороже 15 — 18 пользователей. Так как выйдет один ФС и два контроллера.


          1. therb1
            13.02.2018 00:54

            Посмотрите статью, старайтесь автоматизировать все что можете.
            habrahabr.ru/post/280710


          1. tiss42rus
            13.02.2018 08:32

            Какие финансовые затраты? там ему много не надо вообще учитывая количество пк. не обязательно два, можно один даже на виртуалке, но со строгим контролем бэкапа и проверкой восстановления.У меня 5 лет так работает, примерно 70 рабочих станций. Проблем не было. А в вашем случае даже если домен рухнет этого можно не бояться. за 10-20 минут можно вывести всех если в одном офисе сидите.


            1. encore-show Автор
              13.02.2018 08:37

              Финансовые затраты на лицензии сервера, когда я написал о том, что нужно 2 машинки под контроллер и под фс, я же не написал про физ.сервера. у меня все прекрасно крутится на esxi. Потом, почему все пристали с доменом. Я админил больше 250 тачек и пользователей, там домен необходим был, здесь же мне пока нужды в нем нет. Аргумент что одного контроллера достаточно и при падении, можно всех вывести из домена, вы серьезно? А можно иметь два контроллера и для пользователя это будет без остановки работы.


              1. tiss42rus
                13.02.2018 09:16

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


                1. encore-show Автор
                  13.02.2018 10:02

                  «где несколько минут простоя не критично» — критично. Опять же, при наличии одного контроллера, второй уже не сложно поднять. И еще раз, вывод из домена при падении, это костыль, напоминаю что правильно потом ввести в домен нужно через удаление и создание объекта, а иначе можно словить ошибку — «Не удалось установить доверительные отношения между этой рабочей станцией и основным доменом»


  1. mishutka_ua
    13.02.2018 08:39

    Univention Corporate Server как вариант, с zimbra дружит


    1. encore-show Автор
      13.02.2018 09:12

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


      1. mishutka_ua
        13.02.2018 17:50

        На данный момент, для такого количества рабочих мест и для таких задач, более, чем достаточно.


        1. encore-show Автор
          13.02.2018 19:48

          поставлю, посмотрю что он себя теперь представляет.


  1. encore-show Автор
    13.02.2018 08:43

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


  1. scruff
    13.02.2018 11:19

    Рано или поздно Вам портребуется развернуть АД. Очень многие приложения и их процессы аутентификации сейчас завязаны именно на неё. Если сейчас юзеров от 10 и более — активку просто «must have». Да и в принципе, что мешает развернуть активку на там же самом файл-сервере? «Весит» и потребляет ресурсов просто граммами.


  1. vviz
    13.02.2018 19:53

    Вот не знаю как сейчас, но некоторые годы назад был программный пакет под названием pGina. И реализовывал он функции создания локальных уч. записей через администрирование центральной базы. Т.е. админ создавал в базе запись и при первом логине в системе клиент данного ПО создавал локальную запись в системе. Причем типов баз было несколько, вроде как mysql и еще что-то.


    1. encore-show Автор
      13.02.2018 19:54

      насколько я понимаю, надо еще на клиентскую тачку что-то ставить?