|
Security / impersonalization
|
|||
---|---|---|---|
#18+
Коллеги, поделитесь, плиз, своим видением подхода к решению такой задачи: - приложение предоставляет некоторый набор функций (приложение 2-х уровневое, обычный client/server) - есть некоторый сервис (windows service), способный запустить приложение и "попросить" его выполнить такую-то функцию - сервис выгребает из "очереди" (на самом деле - таблица БД) заявки на выполнение ф-ций и запускает. В заявке указано какую функцию выполнить, параметры, когда запустить (as soon as possible / not earlier than ...) + запускать на конкретном сервисе или на любом свободном. Вопрос, как быть с секьюрити? В идеале хоелось бы, чтобы клиент, запрашивающий задачу ввел имя/пароль (или сказал использовать текущие), а в назначенное время сервис создал бы процесс с указанными credentials.. Но где и как это все сохранять? Ваше мнение? Может, известны какие-н. стандартные подходы к решению таких задач? Заранее благодарен, Mike ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 16:25 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
Mike SikaloВаше мнение? Может, известны какие-н. стандартные подходы к решению таких задач? ИМХО, проверять права нужно в момент размещения заявки в очереди, чтобы в очереди не было "левых" заявок. Т.е. защищать службу нужно уже на входе в очередь, а дальше служба будет просто выполнять заявки со своими привилегиями. Дополнительно можно ввести цифровую подпись заявки, чтобы служба была уверена, что заявка поступила именно от авторизованного пользователя или через авторизованный интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 16:33 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
mcureenab ИМХО, проверять права нужно в момент размещения заявки в очереди, чтобы в очереди не было "левых" заявок. Т.е. защищать службу нужно уже на входе в очередь, а дальше служба будет просто выполнять заявки со своими привилегиями. Дополнительно можно ввести цифровую подпись заявки, чтобы служба была уверена, что заявка поступила именно от авторизованного пользователя или через авторизованный интерфейс. Так а как сохранить проверенные права, чтобы потом ими воспользоваться? Идея хранить логин/пароль вместе с заявкой в БД, пусть даже в зашифрованном/подписанном виде все же, мягко говоря, смущает.. Или я чего-то не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 16:48 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
mcureenab ИМХО, проверять права нужно в момент размещения заявки в очереди, чтобы в очереди не было "левых" заявок. Т.е. защищать службу нужно уже на входе в очередь, а дальше служба будет просто выполнять заявки со своими привилегиями. Дополнительно можно ввести цифровую подпись заявки, чтобы служба была уверена, что заявка поступила именно от авторизованного пользователя или через авторизованный интерфейс+1 Mike SikaloТак а как сохранить проверенные права, чтобы потом ими воспользоваться? А зачем ? Пусть сервис делает все от своего имени. Более того, это правильнее с т.з. аудита совершенных действий. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 17:15 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
Mike SikaloТак а как сохранить проверенные права, чтобы потом ими воспользоваться? Идея хранить логин/пароль вместе с заявкой в БД, пусть даже в зашифрованном/подписанном виде все же, мягко говоря, смущает.. Или я чего-то не понял? Храни в заявке список привилегий или роль пользователя без пароля. Ведь ты можешь проверить, что у пользователя на момент размещения заявки была некая роль? Отдели аутентификацию от авторизации. Сначала аутентифицируй пользователя (только для этого и нужен пароль), выполни авторизацию, привяжи к заявке полученный список привилегий или роль этого пользователя, подпиши заявку. Дальше сервис прочитает заявку, проверит подпись, прочитает список привилегий, проверит, достаточно ли их для выполнения заявки. Проверять привилегии можно по разному прикладными средствами или системными (например запускать процесс от имени системной роли-пользователя с указанными в заявке привилегиями), но суть от этого не меняется - в заявке не нужен пароль, а нужен набор привилегий. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 17:22 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
mcureenabИМХО, проверять права нужно в момент размещения заявки в очереди, Не годится хотя бы из соображения "права меняются со временем". Допустим, я размещу на сервере задачу "ежемесячно выписывать сотруднику mcureenab премию в $1000". Если теперь мой лимит обрежут до премий в $100 - эта задача, весьма вероятно, должна перестать выполняться. mcureenabа дальше служба будет просто выполнять заявки со своими привилегиями. А это еще и значит создание автоматического суперпользователя с суперправами. Значит, возникает проблема защиты его пароля. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 17:57 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
> поделитесь, плиз, своим видением подхода к решению такой задачи: 1. Проверка полномочий пользователя на момент постановки задачи в очередь. 2. Проверка полномочий пользователя на момент выполнения задачи. 3. Проверка полномочий бота (сервиса). В зависимости от количества времени, которое планируется потратить на эту задачу, можно использовать все три проверки. > где и как это все сохранять? Судя по упоминанию таблицы в первом сообщении треда, речь идет о существующем приложении. Просто дополните его нужной структурой данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 18:01 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
softwarer mcureenabИМХО, проверять права нужно в момент размещения заявки в очереди, Не годится хотя бы из соображения "права меняются со временем". Допустим, я размещу на сервере задачу "ежемесячно выписывать сотруднику mcureenab премию в $1000". Если теперь мой лимит обрежут до премий в $100 - эта задача, весьма вероятно, должна перестать выполняться. Согласен. Зависит от постановки задачи. Можно и так и эдак делать. Мой вариант мне нравится в 10 раз больше. :o))) softwarer mcureenabа дальше служба будет просто выполнять заявки со своими привилегиями. А это еще и значит создание автоматического суперпользователя с суперправами. Значит, возникает проблема защиты его пароля. Такого пользователя создавать не обязательно. Можно создать несколько учётных записей с вполне конкретными и ограниченными привилегиями. Защита пароля здесь уходит на второй план, если ограничить возможность подключения только с определённых хостов, чтобы только сервер службы мог пользоваться этими учётными записями или супер пользователем и никто другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 18:11 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
mcureenabЗащита пароля здесь уходит на второй план, если ограничить возможность подключения только с определённых хостов Согласен. Но я бы все-таки обдумал пути несоздания слабого места - скажем, можно при постановке в очередь создавать job с правами этого пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 18:17 |
|
Security / impersonalization
|
|||
---|---|---|---|
#18+
всем спасибо за высказаные идеи, - кроме того, что права могут изменяться во времени, есть еще какие-н. недостатки у подхода "аутентифицировать пользователя при помещении заявки в очередь, а затем просто выполнить задачу с правами этого пользователя; сервис при этом запускает процессы всегда от имени некоторого предопределенного пользователя" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2006, 19:06 |
|
|
start [/forum/topic.php?fid=33&fpage=59&tid=1549353]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 234ms |
total: | 370ms |
0 / 0 |