| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > like "runas" |
| Автор: tepkuh 19.5.2008, 13:14 |
| Доброе, Уважаемые. Я вот тут дня три пытаюся отсерчить гугл и все как то без результатно. У меня такая вот задача: Есть jre которая запускается с админскими правами (либо root под *никсом либо administrator под виндой) мне надо чтобы моя программа запускала новый поток под правами другого пользователя(а именно пользователь операц. системы oracle) и брала весь энваремент этого(oracle) пользователя. Т.е. аналог "su -" под никсом или "runas" под виндой. Не мог бы ты подсказать хотя бы направление куда копать? |
| Автор: AntonSaburov 19.5.2008, 13:52 |
| Так может как раз через sudo и запускать - из командной строки. |
| Автор: LSD 19.5.2008, 14:35 | ||
А вообще есть ОС которая бы такое позволяла? |
| Автор: tepkuh 20.5.2008, 08:47 |
не много не понял вас. Что значит есть такая ОС? - Если вы про команду "ps -ef" то это вывод спика процессов под боьшенством *никс лайк систем - Если вы про возможность операц. системы работать сразу с несколькими пользоватеялми то это большенство операц. систем от виндовзов НТ4.0 до любыйх *никсов. - Если вы про мою фразу "запускала новый поток под правами другого пользователя" то я естсественно очепятался так как все потоки работают в рамках одного процесса (соответственно, с общим адресным пространством и привилегиями). Т.е. нужен новый процесс под правами др. польвателя) |
| Автор: ecologist 20.5.2008, 09:20 |
| Ну так и надо писать - "процесс". А то "поток" - у меня аж голова уехала. Под Виндой можно javaw запускать. Параметры - ну в конце концов можно в файл записать - хоть 10 метров параметров. |
| Автор: tepkuh 20.5.2008, 10:19 |
| Нуу... виноват) Но возникают дальше вопросы как мне дальше то быть. Т.е. мне то нужен в конечном итоге результат отработки метода под заданным юзером и соотвветсвенно его энварементом? Это все безобразие так чтоли должно выглядеть: Runtime.getRuntime().exec(runas /user:Юзер "java any.jsp any.method"); Как мне получить то что отработал метод, что то я с процессами не очень дружу( Мне ведь от него объект надо получить( |
| Автор: ecologist 20.5.2008, 10:45 |
| Если второй процесс тоже на JAVA - то можно сериализовать. Если что-то другое - в файл все поля прописать и потом считывать. Или можно через сокеты пообщаться - но по-моему это усложняет, а толку немного. |
| Автор: tepkuh 20.5.2008, 11:00 |
Пасиба большое, помоему вы мне очень помогли) |
| Автор: tepkuh 20.5.2008, 12:42 |
| хотя фиг знает. Не поперло меня с сериализацией. Не сериализуются мои объекты( Буду думать через сокеты( ЗЫ. Я же говорил))) Runtime.getRuntime().exec... это попытка выкрутится( чем придумать хорошее решение |
| Автор: AntonSaburov 20.5.2008, 13:01 |
Так другого решения все равно нет - процесс-то отдельный. А как с ним общаться - тут уже вариантов много. Ну можно попробовать через ProcessBuilder - там всяких возможностей с установкой окружения побольше. |
| Автор: LSD 20.5.2008, 15:07 | ||
Именно об этом. И без Runtime.exec() не обойтись. Можно использовать RMI, в данном случае все будет достаточно просто. |
| Автор: tepkuh 20.5.2008, 15:46 | ||||
нипалучится( Вот копи-паси из учибника про RMI: RMI использует механизм сериализации по умолчанию Java для передачи параметров методу и возврата значений через сеть. В этой связи все параметры метода и возвращаемые значения должны иметь описатель Serializable или один из примитивных типов. А у меня мой один объект не сериалзуется. Часть серилизуется, а часть нет. Не знаю мож не так что то делаю. У меня вот есть такой код котороя должна работать отдельным процессом под отдельным юзером.
И есть другой класс который выполняется из под root'а\administrtor'а:
получаю вот такую вот ошибку: java.io.NotSerializableException: org.eclipse.swt.browser.Browser если Серилизация не поперла, то и RMI не должен( Но чуть попозже попробую Надо еще разобратся как он работает) Что то там мудренно очень) |
| Автор: LSD 20.5.2008, 15:53 |
| 1. Что мешает сделать классы сериализуемыми? 2. В любом случае как-то данные передавать придется, хоть в бинарном виде, хоть в текстовом виде (по сокетам ничего другого не передашь). А byte[] и String прекрасно передаются с помощью сериализации. |
| Автор: tepkuh 20.5.2008, 16:03 | ||
там бабка за дедку ципляется. Делаю класс org.eclipse.swt.browser.Browser Сериализованным он цепляется дальше к org.eclipse.swt.browser.IE делаю его сериализованным он идет дальше... Я не уверен можно ли так вообще делать? Там этих классов... они вообщем все на свет лезут. И то я могу сделать так лишь по причине того что org.eclipse.swt является опенсорсовым продуктом и я могу просто править там все что хочу. А оказался он бы закрытым... что бы делать тогда? Если так можно делать я могу по ним пройтись и понаставить у всех классов сериализацию.
у меня они тоже передались хорошо из других классов помощью сериализации, без проблем. А вот с этим классом заглох. |
| Автор: LSD 20.5.2008, 17:40 | ||
Ты пытаешься сделать что-то противоестественное. Эклипсовские классы лучше вообще не трогать, там есть куча завязок на JNI и что произойдет при десериализации неизвестно, может и JVM рухнуть. Что за данные ты пытаешься передать? Зачем тебе Browser? |
| Автор: tepkuh 21.5.2008, 09:14 | ||
Я так и подумал)) Куда то вообще в дебри уехал) Грубя говоря DOM объекты. Я хотел их всем скопом передать в рутовый процесс(объект Browser), а далее вытащить только нужные мне объекты.(И повставлять в табличку\базу) С рутового процесса поимев объект Browser смогу давать команды этому Браузеру например куда идти(по урлу) определенному браузеру(который в свою очередь запущен под определ. юзером с его энварементом). Использую org.eclipse.swt.browser использую для того что там реализованны все механизмы работы Интернет-браузера(CSS, javascripts, cookie...) все что умеет браузер умеет swt. |
| Автор: LSD 21.5.2008, 15:57 | ||
Ну так тут RMI самое то. Сделай интрефейс BrowserControl, куда включи методы openUrl(), getElementName(), getElementValue() и т.д. И вызывай их из рутового процесса. |
| Автор: tepkuh 22.5.2008, 08:20 |
| Да, все заработало. Пасиба тебе большое. |