LINUX.ORG.RU
ФорумTalks

Костылестроение, PowerShell и почему все-таки я люблю этот наш Линукс

 , , ,


0

3

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

Итак, вот, скажем, статейка.

Цитирую задачу:

Простенький скрипт ... для случая, когда необходимо создать папки для ряда пользователей на файловом сервере при условии, что названия папок будут совпадать с именами пользователей и эти пользователи будут иметь определенный уровень доступа к этим (своим) папкам. Все это может создаваться внутри определенной папки непосредственно на сервере или через сеть в общей папке по UNC пути. 

Собственно, первый вариант:

#
# PowerShell Script.
# Creates home folders for users from an OU in AD and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# We need the AD module for this first
Import-Module ActiveDirectory

# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Path to an OU with users.
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Muhosransk,DC=domain,DC=com"
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $User = $User.Name
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    }

[sarcasm_mode]Да это уже просто ultrakill в стиле PowerShell![/sarcasm_mode]Благодарные эксперты блаблабабра получают плюсы за поцелуи автора в задницу. Занавес.

Кто не понял, в линуксе все делает просто и, как это сейчас модно, искаропки бесплатно без смс:

$ adduser USER_NAME


Последнее исправление: Quadmonster (всего исправлений: 2)

Не вижу overkill'а. Но вот как только ты попробуешь эту хрень запустить, то поймёшь что powershell по тормозам просто чемпион. Ни одна жаба ТАК тормозить не может.

router ★★★★★
()

Дык надо привести решение этой задачи в линусе, чтоб все посмеялись =)

F457 ★★★★
()
Ответ на: комментарий от router

Но вот как только ты попробуешь эту хрень запустить, то поймёшь что powershell по тормозам просто чемпион. Ни одна жаба ТАК тормозить не может.

это даже по синтаксису понятно. New-Item, New-Object... ппц.

dikiy ★★☆☆☆
()

Смех без причины. Плакать надо, что в линуксе современного системного шелла нет, AD нет, ACL практически не используются.

А скрипт чоткий и понятный.

unsigned ★★★★
()
Ответ на: комментарий от UVV

Получить список пользователей из лдап с правами и сделать им каталоги с правами примерно столько же и займёт по размеру, как и на повершелле.

imul ★★★★★
()

Кто не понял, в линуксе все делает просто и, как это сейчас модно, искаропки бесплатно без смс: $ adduser USER_NAME

Линуксоиды не умеют ТЗ читать) А где тут а) файловый сервер и установка прав доступа б) получение имен пользователей из централизованного хранилища.

F457 ★★★★
()

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

$ adduser USER_NAME

Это такой юмор линуксоидов, который мы виндузятники не понимаем?

winlook38 ★★
()
Ответ на: комментарий от x0r

лопата на зарядке, аккум быстро садится.

Нечего прошивать лопату этим вашим андроидом.

cipher ★★★★★
()
Ответ на: комментарий от unsigned

Смех с причиной.

Смех без причины. Плакать надо, что в линуксе современного системного шелла нет, AD нет, ACL практически не используются.

Современная оболочка есть, AD есть, ACL есть, хотя согласен с вами, практически не используется.

И таки да, GNU/Linux'овые отстойны, но таки в меньшей степени чем вендовые.

Camel ★★★★★
()

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

Наверно это старость... :(

aeX1pu2b
()
Ответ на: комментарий от unsigned

Плакать надо, что в линуксе современного системного шелла нет, AD нет, ACL практически не используются.

Кому надо плакать - пусть плачет.

tailgunner ★★★★★
()
Ответ на: комментарий от imul

примерно столько же

Не в этом случае, особенно если acl-ей добавить побольше.

getent passwd | while IFS=: read user x x group x dir x ; do
test -d $dir && mkdir -p $dir && setfacl --restore=/dev/stdin <<EOF
#file: $dir
#owner: $user
#group: $group
user::rwx
group::r-x
other::---
ну и т.п.
EOF
done

DonkeyHot ★★★★★
()

Молодец, а теперь почитай про администрирование kerberos.

fat_angel ★★★★★
()

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

x3al ★★★★★
()
Ответ на: комментарий от devl547

Да ладно, systemd — неплохая вещь на серверах.

x3al ★★★★★
()

Я с powershell мало общался, но в линуксе аналогичных шеллов не видел.

Оно не только расширяемое, но и умеет автодополнение параметров.

grim ★★☆☆
()

Небольшой вопрос:

А почему ты сравниваешь количество действий администратора AD-домена и администратора локалхоста?
Мне кажется, это не вполне корректно.

DeVliegendeHollander ★★
()
Ответ на: комментарий от router

Ага, несколько секунд на получение списка процессов - это что-то.

Programmist11180 ★★★
()
Ответ на: комментарий от DeVliegendeHollander

Он не сравнивает. Он говорит, что добавить одного юзера интерактивно == создать по каталогу каждому юзеру из нужного OU и выдать ему права.

x3al ★★★★★
()
Ответ на: комментарий от unsigned

что в линуксе современного системного шелла нет

Для лютых фанатов оффтопика есть недоделанный pash. Для красноглазых гуру есть zsh. Для нормальных людей есть bash.

Вспомнилось, друг рассказывал: «Реализовано революционное, нигде ранее не встречавшееся... автодополнение команд!». Цитата одного из сотрудников Майкрософт на презентации, между прочим. 2 толстых чувака в майках FreeBSD, внимательно слушавших это, подняли такой ржач, что дай Боже :-)

AD нет

Готовой - нет. И это плохо, согласен. Кому от AD нужен только централизованный логин и интеграция сервисов - запиливают LDAP. А вот политики - да, это увы

ACL практически не используются

Кому надо - те используют. Пихать их по умолчанию не считаю нужным - они далеко не всегда нужны

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

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

x3al ★★★★★
()
Ответ на: комментарий от x3al

Ну когда приводят два примера: «вот так делают в PowerShell» и после этого: «в линуксе все делает просто и, как это сейчас модно, искаропки бесплатно без смс», то я обычно воспринимаю это, как сравнение. Возможно, я неправильно понял?

DeVliegendeHollander ★★
()
Ответ на: комментарий от DeVliegendeHollander

Автор не владеет русским на уровне, позволяющем прочитать ТЗ. Обычно в таких топиках делают сравнение, но тут не повезло.

x3al ★★★★★
()

Ничего не понял. Ну в скрипте полная реализация объектной модели. Типа круто, ВААУУУ!

Пилять, да сами же ныли, что !Ъ все, текстовые конфиги там, еще чего.

Жрите теперь, не обляпайтесь - МС «шмагла», уже как с 99 года эту хрень пилит, а сколько керберос/ЛДАП до этого пилили.

Deleted
()

Гм. Я тоже не люблю PowerShell, но млин, автор, ты меньше читай хабр и больше думай.

Допустим ты «зацепил» samba за AD. Это по определению дольше, чем под Windows. Если хочешь поспорить, то скажи навскидку в чем разница между idmap_rip, idmap_ad, и тут еще парочка...

Смотрим скрипт построчно:

# это можно убрать
# Import-Module ActiveDirectory

#$Dir = "D:\Users"
DIR="/var/samba/users";

# Если ты будешь использовать ldapsearch в AD что-то похожее понадобится, либо ты что-то похожее запишешь в /etc/samba/smb.conf
# $Users = Get-ADUser -Filter * -SearchBase OU=Users,OU=Muhosransk,DC=domain,DC=com"

for USER in $USERS;
do
 mkdir $DIR/$USER;
 chown $USER:$GROUP $DIR/$USER;
 chmod g+s $DIR/$USER;
 # ACL? Внимание вопрос: как реализованы ACL в Linux? Ответ: через жопу, неудобно и _не_полностью_. Если ты сходу, глядя на скрипт скажешь, правильно ли я написал ACL и не напортачил, то ты молодец. Напоминаю, что вытащить ACL из AD _вообще_ нет возможности. Т.е. мы имеем простой bash скрипт, но с не полым соответствием функционала.

 setfacl -d --set g::rx,g:readonly:rx $DIR/$USER;
 setfacl --set g::rx,g:smb_write:rwx $DIR/$USER;
 setfacl -m g:smb_write:rwx $DIR/$USER;
done


 

crypt ★★★★★
()

$ adduser USER_NAME

Это аналогично

net user USER_NAME /add

TGZ ★★★★
()
Последнее исправление: TGZ (всего исправлений: 1)
Ответ на: комментарий от crypt

Напоминаю, что вытащить ACL из AD _вообще_ нет возможности.

Что за ерунды ты говоришь. С AD можно работать и из перла и через ldapsearch. Сами ACL можно записать хоть в description, хоть в своей схеме, хоть там где их складируют.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Ну может и погорячился про «вообще». Как там на перле будет аналог с проставлением прав?

Сами ACL можно записать хоть в description, хоть в своей схеме

Да-да, description как раз для этого.:) Я вообще противник использования AD через LDAP. Больше проблем, чем пользы. И не говорю про всякие «свои» схемы. Нет, только AD, только хардкор.))

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)

кто в курсе скажите пожалуйста там обязательно надо так уебищно форматировать функции/переменные и соблюдать этот адский танец регистра?

der_looser ★★
()
Ответ на: комментарий от F457

файловый сервер

sftp

установка прав доступа

в линуксах и по дефолту всё нормально

получение имен пользователей из централизованного хранилища

ls /home и будет нашим централизованым хранилищем

Ford_Focus ★★★★★
()
Ответ на: комментарий от x3al

в powershell дополнение гораздо лучше и работает _везде_, в том числе на алиасы

pinkbyte@phantom ~/dev $ gm
gmaint   gmake    gmsgfmt 
pinkbyte@phantom ~/dev $ alias | grep gm
alias gmaint='pquery --repo gentoo --blame --no-version --no-filters'
pinkbyte@phantom ~/dev $ test_
test_chmLib  test_func 
pinkbyte@phantom ~/dev $ set | tail -4
test_func () 
{ 
    exit 0
}

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

Pinkbyte ★★★★★
()
Ответ на: комментарий от Ford_Focus

ls /home и будет нашим централизованым хранилищем

В случае когда серверов >1 - нет. А вот LDAP - вполне так себе централизованное хранилище

Pinkbyte ★★★★★
()
Ответ на: комментарий от Ford_Focus

Говорят же — не умеют читать. Зато весёлые:

в линуксах и по дефолту всё нормально

ls /home и будет нашим централизованым хранилищем

Конечно, на локалхосте — будет.

x3al ★★★★★
()
Ответ на: комментарий от Pinkbyte

Повтори это с автокомплитом ключей или аргументов.

*ВСЁ*, что сделали в bash_completion, сделано вручную независимо от команды, привязано к имени и не слишком продвинуто. В zsh не намного лучше.

x3al ★★★★★
()
Ответ на: комментарий от x3al

*ВСЁ*, что сделали в bash_completion, сделано вручную независимо от команды, привязано к имени и не слишком продвинуто. В zsh не намного лучше.

А так оно и будет, потому что внешние команды - это тебе не «всё-в-одном-вещь-в-себе». И автодополнения на это по умолчанию нет и быть не должно(потому что нафиг нужны автодополнения на mercurial, если он не установлен).

Учитывая, что «Ъ-админы-вендузятники спорят насчет шелла в стиле: что лучше - Powershell или Cygwin с башем?» (c) забыл_откуда

Что как бы намекает на 2 вещи(да, в стиле кэпа):

1) есть что сравнивать, значит продукты более-менее равнозначные по функциям;
2) про cmd.exe никто даже не вспоминает - это как раз понятно. Потому что вон он-то как раз говно, но его сильно в этом винить не стоит - обратная совместимость...

Мне Powershell категорически не понравился, тот же bash мне удобнее. Если надо скриптовать что-то посерьезнее скриптов на 20-30 строк, один хрен что на bash, что на Powershell рождаются монстры, поэтому приходится переходить на Perl/Python.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.