|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttУправился за час, осталось оформить по-нормальному, и проверок добавить. Ещё бы юнит-тесты написать. На здоровье! Понимаешь в чем дело (то о чем я подозревал). Я когда-то давно это уже писал, т.е. писать то ничего не пришлось. Там кстати у меня коммент есть (возможно это про "фризит") 'BuildTrusteeWithName(tR, pszTrustee) '-по каким-то причинам эта ф-ция вызывает crash Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
Все что я написал сейчас для теста: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Группы ДА, учитываются автоматом. Но она зараза не делает разницы между: "Для этой папки, ее подпапок и файлов" "Только для этой папки" "Только для этой папки и ее подпапок" и т.д. Понимаешь о чем я? Если ты взглянешь в мой .Net код из первого поста, то там проверяется доп. условие (флаг InheritanceFlags.ContainerInherit из нек. соображений я не проверяю) Код: vbnet 1. 2. 3.
На языке API условие "Для этой папки, ее подпапок и файлов" устанавливается константами что я выделил: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
.Net код проверки (из первого поста, на который я напираю) тупо перебирает правила и там можно проверить эти флаги, а GetEffectiveRightsFromAcl себе на уме, при этом информации про флаги CONTAINER_INHERIT_ACE/OBJECT_INHERIT_ACE не предоставляет. Посему мне этот солюшн что-то не нравится и .Net-код более симпатичен. Вот поэтому мне и хочется найти-таки ответ на свой "маленький вопрос" про членство в группе. Понятно излагаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 01:14 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Дмитрий77Группы ДА, учитываются автоматом. Но она зараза не делает разницы между: "Для этой папки, ее подпапок и файлов" "Только для этой папки" "Только для этой папки и ее подпапок" и т.д. Понимаешь о чем я? Не понимаю зачем это тебе. Изначально задача была такая: авторПрога запущенная под Network Service должна уметь копировать файлы в папку заданную юзером. Не будем умничать, переформулируем так: аккаунт Network Service должен иметь "Full access" к заданной папке. авторНо крайне желательно проверить, а есть ли уже эти права для Network Service. Ну? Код который я привёл, не показывает как решается эта задача? Да и в чём проблема установить свои права на папку, проверяя только наличие установленных правил на NETWORK SERVICE? Лучше даже просто перезаписывать. Плевать, если подобные права распространяются через группу, или папкой выше? Завтра группу убьют, и все твои старания пойдут лесом. Нормальная практика, это установить именно те права, которые требуются для работы. Потому что наследованные права могут завтра измениться, потому что это вообще не твоя область ответственности, какая-то другая программа их уберёт (выше, или убьёт группу). Если вопрос чисто академический, ты хочешь поковыряться в локальных учётках, посмотреть кто в каких группах находится, то велком, подключай System.DirectoryServices, используй PrincipalContext, PrincipalSearcher... Дмитрий77 а GetEffectiveRightsFromAcl себе на уме, при этом информации про флаги CONTAINER_INHERIT_ACE/OBJECT_INHERIT_ACE не предоставляет. Зачем он их должен предоставлять? Он вычисляет конечный применяемый (эффективный) набор прав. Ты хотел узнать, может ли NETWORK SERVICE писать в папку? Ты узнал. Если ты наборот хочешь установить свои права для NS, устанавливай. И проверяй только аналогичные права, а не какие-то отнаследованные, потому что это к тебе не относится, их завтра могут убрать, они могут измениться, группы могут похериться. Поэтому ты вообще не должен страдать подобной хернёй. От слова совсем. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 02:03 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Дмитрий77Понятно излагаю? Страдаешь фигнёй и людям голову морочишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 02:04 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttДа и в чём проблема установить свои права на папку, проверяя только наличие установленных правил на NETWORK SERVICE? тогда те 2 ф-ции что я родил в первом посте 20668947 суть НЕОБХОДИМО и ДОСТАТОЧНО (задачу они решают) Так? Предлагаешь так и оставить и не париться? (честно самому уже надоело) (бесит что все таки избыточно, а для Set надо в общем случае вызывать UAC==AsAdmin) Бесит меня лишь то, что "эталон" более интелектуален и я не могу это точь в точь повторить: а именно Дмитрий77Мне на самом деле нужно сделать ровно то что делает ф-ция Факсы и Сканирование Windows -> Сервис -> Параметры факса -> Дополнительные параметры -> При получении сохранять копию в После выбора папки, если что не так, она говорит (У выбранной папки нет доступа для службы факсов == Network Service) и далее его предоставляет. Методом проверок удалось понять что она делает: 1) Она рассматривает только "Full access" , т.е. если эту галку снять (хоть бы Read/Write остался), то False 2) Она проверяет NETWORK SERVICE + (!!!)Группы куда этот NETWORK SERVICE входит Т.е. если для группы Все или группы Пользователи есть "Full access" то ее это устраивает 3) Она проверяет что отсутствуют правила Deny строго для NETWORK SERVICE Группы не проверяет, пишет бла-бла ошибка, обратитесь к администратору, если я допустим назначу Deny для All. 4) Еще она немножко проверяет Inheritance/PropagationFlags-флаги, мой код проверки флагов(в первом посте) более менее подогнан под это поведение ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 02:38 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttНу? Код который я привёл, не показывает как решается эта задача? . Я оценил желание помочь, спасибо. При этом я тебе сразу привел свой такой же, написанный лет 5 тому назад еще на VB6 и переписанный на .Net 2 года назад. На это внимание обратил? Что он такой же. 20671558 Почему не нравится, там написал, но это ты заметил. hVosttДа и в чём проблема установить свои права на папку, проверяя только наличие установленных правил на NETWORK SERVICE? Лучше даже просто перезаписывать.). Каждый раз и лишний раз перезаписывать не стоит. Проверка это User, установка прав - как правило Admin. Слишком часто вызывать UAC окно для повышения прав по поводу и без бы не хотелось. hVosttПлевать, если подобные права распространяются через группу, или папкой выше? Завтра группу убьют, и все твои старания пойдут лесом. Нормальная практика, это установить именно те права, которые требуются для работы. Потому что наследованные права могут завтра измениться, потому что это вообще не твоя область ответственности, какая-то другая программа их уберёт (выше, или убьёт группу). В принципе согласен. Пока имплементировал этот вариант. Т.е. 2 мои .Net функции в первом посте. Вроде все внешне красиво получилось. hVosttЕсли вопрос чисто академический, ты хочешь поковыряться в локальных учётках, посмотреть кто в каких группах находится, то велком, подключай System.DirectoryServices, используй PrincipalContext, PrincipalSearcher...). check if user is a member of a group Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Не могу вот это на vb.net перевести, конвертер не осилил, хотя думаю это то о чем ты сказал Код: vbnet 1.
hVosttДмитрий77 а GetEffectiveRightsFromAcl себе на уме, при этом информации про флаги CONTAINER_INHERIT_ACE/OBJECT_INHERIT_ACE не предоставляет. И проверяй только аналогичные права, а не какие-то отнаследованные, потому что это к тебе не относится, их завтра могут убрать, они могут измениться, группы могут похериться. Я не пытаюсь проверять отнаследованные (от папки уровнем выше), я имел ввиду наследование прав папками и файлами которые в моей папке (которые уровнем ниже). hVosttМы тоже часто в разные папки разные файлы пишем под системными пользователями с очень ограниченными правами. Пути к папкам настраивают другие люди в деплой-конфигах. Если возникла ошибка при попытке записи в файл, в лог пишется понятная ошибка, создаётся тикет, люди читают, идут и исправляют. Такое бывает может раз в год, а то и реже, и занимает 10 мин на устранение проблемы. Я не пишу tool для админа и его помощников, а пишу типа "коробочную версию". Поэтому внешняя сторона должна быть на уровне. Поэтому лучше чтоб без ошибок в логах, тикетов и исправлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 07:24 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Дмитрий77Я не пытаюсь проверять отнаследованные (от папки уровнем выше), я имел ввиду наследование прав папками и файлами которые в моей папке (которые уровнем ниже). Если ты можешь создать папку, считай у тебя есть это наследование :) Дмитрий77Не могу вот это на vb.net перевести, конвертер не осилил, хотя думаю это то о чем ты сказал Ээхх, осилить бы тебе C#, как бы для тебя это всё упростило на пять порядков Дмитрий77Я не пишу tool для админа и его помощников, а пишу типа "коробочную версию". Поэтому внешняя сторона должна быть на уровне. Поэтому лучше чтоб без ошибок в логах, тикетов и исправлений. Ну моё мнение такое, ты проверяешь наличие непосредственных прав для NETWORK SERVICE, группы идут лесом, это вообще странная практика NETWORK SERVICE добавлять в группу, когда группы существуют для пользователей (я ни разу такого не встречал). Если прав для NS нет, добавляешь нужные правила. Я думаю, ты бы очень удивился, если бы увидел код программы для факсов, там вряд ли проверяются все правила и группы вдоль и поперёк с проверкой наследования. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 09:49 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Дмитрий77тогда те 2 ф-ции что я родил в первом посте 20668947 суть НЕОБХОДИМО и ДОСТАТОЧНО (задачу они решают) Так? Предлагаешь так и оставить и не париться? (честно самому уже надоело) (бесит что все таки избыточно, а для Set надо в общем случае вызывать UAC==AsAdmin) Именно, необходимо и достаточно проверить наличие конкретных прав для конкретного SID, а не для группы какой-то. Это не избыточно, то, что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 10:01 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttЯ думаю, ты бы очень удивился, если бы увидел код программы для факсов, там вряд ли проверяются все правила и группы вдоль и поперёк с проверкой наследования. Посмотрел бы, да где ж его взять. Речь идет о методе Store in Folder (я пишу свои route extension которые учитывают DID=Called Number). Там на самом деле тоже мутно, хотя примерный алгоритм я описал. Т.е. если что-то при назначении папки пошло не так,чего она понять не может, выводится "Случилась ошибка. Попробуйте позже или обратитесь к администратору" - и усе. Плюс использует критерий именно "полный доступ", хотя если есть Read/Write (без полного), то это должно быть достаточно. На XP проще - там кухня работает под System (все права на все итак есть), но уже начиная с Win2003(NT 5.2) -Network Service, хотя я глянул, как задача решается конкретно на Win2003 (а не на Win10) - а никак, просто пишет что нет доступа, предлагает почитать help и назначить права ручками,и не дает назначить папку пока это не будет сделано. Так что черт с ним, пусть будет тупая проверка ==Network Service с обеспечением флагов "Для этой папки, ее подпапок и файлов" и "Полный доступ". Что касается C#->Vb.net, да я понял как перевести только >велком, подключай System.DirectoryServices, используй PrincipalContext, PrincipalSearcher... я поигрался, это глюкота какая-то, во первых тормозная (уж не знаю что оно там инициализирует), во вторых оч. далеко от искомого. Да и бог с ним. Я с тобой согласился, да и времени жалко. Единственная непонятка для меня это "сетевые пути". Вопрос озвучил здесь: Приложение запущено NetworkService(ComputerA), как ему положить файл в папку на ComputerB? (специалистов, кот. бы мне это разжевали пока не нашлось, но подозреваю что оба компа должны быть в домене AD чтоб это в принципе работало, а я в своей частной практике доменов не держу - бухнешь сервер в домен - потом вообще ничего не работает, и назад не вернешь -поэтому все тесты в WorkGroup, последние годы и не дергаюсь). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 11:28 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
"фризы" (зависания) кстати скорее всего возникают по причине разрешения SID'а и всех связанных с ним групп, обычно на таких операциях, запросах AD и т.д. всегда всё тормозит :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 12:04 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Дмитрий77 Приложение запущено NetworkService(ComputerA), как ему положить файл в папку на ComputerB? (специалистов, кот. бы мне это разжевали пока не нашлось, но подозреваю что оба компа должны быть в домене AD чтоб это в принципе работало, а я в своей частной практике доменов не держу - бухнешь сервер в домен - потом вообще ничего не работает, и назад не вернешь -поэтому все тесты в WorkGroup, последние годы и не дергаюсь). А чё тут разжёвывать? NetworkService это локальная учётка для служб, не распространяется на другие компы. Обычно это решается через делегирование операции службе на другом компе. Или это должна быть одна учётка в домене, с привелегиями которой выполняется служба. Может помогла бы имперсонализация, но надо разбираться подробно с условиями задачи. Скорее всего делегирование — лучший способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 12:52 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Roman Mejtes"фризы" (зависания) кстати скорее всего возникают по причине разрешения SID'а и всех связанных с ним групп, обычно на таких операциях, запросах AD и т.д. всегда всё тормозит :) Да, лукап может занимать много времени. Для локальных учёток фризов быть не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 12:53 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttДмитрий77 Приложение запущено NetworkService(ComputerA), как ему положить файл в папку на ComputerB? (специалистов, кот. бы мне это разжевали пока не нашлось, но подозреваю что оба компа должны быть в домене AD чтоб это в принципе работало, а я в своей частной практике доменов не держу - бухнешь сервер в домен - потом вообще ничего не работает, и назад не вернешь -поэтому все тесты в WorkGroup, последние годы и не дергаюсь). А чё тут разжёвывать? NetworkService это локальная учётка для служб, не распространяется на другие компы. Обычно это решается через делегирование операции службе на другом компе. Или это должна быть одна учётка в домене, с привелегиями которой выполняется служба. Может помогла бы имперсонализация, но надо разбираться подробно с условиями задачи. Скорее всего делегирование — лучший способ. Способ наладить чтоб работало как бы есть, но он кривой и требует некой "ручной предварительной операции". Под System по крайней мере у меня получалось. Копирование файла по сети под System аккаунтом. >NetworkService это локальная учётка для служб, не распространяется на другие компы От своего имени согласен, как и System она ничего не сделает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 18:49 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 19:34 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
hVosttДмитрий77 Копирование файла по сети под System аккаунтом. Ну не так уж прям и под System аккаунтом Я этого не говорил. Если быть точным, под авторизованным пользователем из числа пользователей на ComputerB, куда копируем. Но заряженый "автовход" делается под System на ComputerA, откуда копируем, и поэтому System может туда копировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2017, 22:54 |
|
Корректно проверить есть ли доступ к папке из-под аккаунта Network Service?
|
|||
---|---|---|---|
#18+
Вы все бьетесь и бьетесь с удаленным выполнением. Поэтому рекомендую не биться, а использовать WINRM ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2017, 13:50 |
|
|
start [/forum/topic.php?fid=20&msg=39494300&tid=1399785]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 242ms |
0 / 0 |