Изменение владельца существующего процесса в Linux

, поэтому t является просто идентификатором параметра анонимной функции.

Я предполагаю, что encode(ls) возвращает List[(Int, Int)], так что это означает, что map имеет следующую подпись map[B](f : ((Int, Int)) => B)

, это означает, что для него требуется функция из Int (что и есть в список) к другому типу.

t => if (t._1 == 1) t._2 else t является литералом для функции, которая принимает один параметр с именем t (компилятор может заключить, что это должен быть (Int, Int), поскольку литерал находится в положении параметра map на [ 1110]) и и возвращает один Int, что дает List[Int] после map

, действительно, это также могло быть x => if (x._1 == 1) x._2 else x, это просто локальное имя

РЕДАКТИРОВАТЬ: Добавлено Парены для кортежа int в карте согласно комментарию. Woops

6
задан rudle 9 January 2009 в 17:21
поделиться

6 ответов

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

Тем не менее хостинговая компания, на которую я работаю, действительно позволяет (на общих пакетах хостинга) пользователям выполнять свой собственный веб-сервер - включая Tomcat - на порте 80. Это сделано с помощью инструмента, названного authbind, который не требует, чтобы сервер запустился как корень - но просто позволяет некорневым пользователям связать с выбранными IP-адресами и выбранными портами.

Единственная выгода - то, что authbind не будет работать с сетевым уровнем абстракции Java по умолчанию. Необходимо будет отключить поддержку IPv6 Java и вероятно указать определенный IP-адрес для привязки с в рамках приложения. Первый может быть сделан путем запуска JRE с -Djava.net.preferIPv4Stack=true но последний специализирован.

2
ответ дан 17 December 2019 в 00:15
поделиться

Базовый системный вызов, в котором Вы нуждаетесь, setuid(2), но это не выставляется ни одними из API Java.

Не трудно записать обертку JNI, которая предоставила бы доступ к нему, хотя, хотя даже затем необходимо будет найти, что подходящее место в коде запуска Tomcat вызывает setuid после bind(2) вызовы были выполнены (те, которые теми, которые обычно требуют полномочий пользователя root).

Как рекомендуется геоавтомобилем Вы могли использовать authbind так, чтобы Tomcat никогда не работал как корень вообще.

С другой стороны, поскольку Вы, по-видимому, получили корневой доступ на рассматриваемом сервере, просто выполненный Tomcat на непривилегированном порте и затем используете iptables приемы для передачи входящих запросов от привилегированного порта до того, на котором на самом деле слушает Tomcat. Посмотрите, что это ТАК отправляет для получения информации о том, как сделать это.

4
ответ дан 17 December 2019 в 00:15
поделиться

Можно сделать это в Вас собственный код приложения через системный вызов, seteuid (http://www.opengroup.org/onlinepubs/009695399/functions/seteuid.html), но выполнение его с помощью сценария удара или чего-то еще, я не уверен в. Почему не только запускают процесс как обычного пользователя во-первых?

1
ответ дан 17 December 2019 в 00:15
поделиться

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

0
ответ дан 17 December 2019 в 00:15
поделиться

Можно создать отдельную программу, которая запущена с полномочиями пользователя root (например, при наличии двоичного файла setuid), делает работу, для которой нужны полномочия, отбрасывает полномочия при помощи setuid и наконец исполнительного кота.

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

0
ответ дан 17 December 2019 в 00:15
поделиться

Можно ли объяснить, почему Вы хотите сделать это? Обычно лучше определить пользователя, который имеет необходимый privs (см. "Принцип Наименьшего количества Полномочия"), и выполните его как того пользователя.

0
ответ дан 17 December 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: