Я использую Vim/gVim.
Я раньше использовал Emacs, но я нашел, что gVim для общей работы быстрее над более медленными машинами, плюс, из-за его требования POSIX, vi доступен почти везде.
При использовании Vim или gVim, я использую мышь много, поддержка его является большой, я думаю.
Я начал использовать Emacs, потому что было легче использовать для неопытного пользователя. Я нашел, что использование нано было довольно подвержено ошибкам по некоторым причинам, и в какой-то момент я понял, что я намного более доволен использованием vi.
Прямо сейчас это - смесь. Я использую Eclipse и gedit довольно часто, также. Vim, однако, является все еще моим фаворитом и наиболее используемым редактором.
setcap 'cap_net_bind_service=+ep' /path/to/program
это будет работать на определенные процессы. Но позволить конкретному пользователю связывать с портами ниже 1024 необходимо будет добавить его к sudoers.
Взгляните на это обсуждение для больше.
(Некоторые из этих методов были упомянуты в других ответах; я даю несколько возможных вариантов в грубом порядке предпочтения.)
Можно перенаправить низкий порт к высокому порту и послушать на высоком порте.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Можно запустить сервер как корень и отбросить полномочия после того, как он начал слушать на привилегированном порте. Предпочтительно, вместо того, чтобы кодировать это самостоятельно, запустите свой сервер с обертки, которая делает задание для Вас. Если Ваш сервер запускает один экземпляр для каждого подключения, запустите его с inetd
(или подобная программа такой как xinetd
). Для inetd
, используйте строку как это в /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Если Ваш сервер слушает в единственном экземпляре, запустите его с программы такой как authbind
. Любой создает пустой файл /etc/authbind/byport/80
и сделайте это исполняемым файлом пользователю, выполняющему сервер; или создайте /etc/authbind/byuid/1234
, где 1234 является UID, выполняющий сервер, содержа строку 0.0.0.0/0:80,80
.
Если Ваш исполняемый файл сервера хранится в файловой системе, которая поддерживает возможности, можно дать ему cap_net_bind_service
возможность. Остерегайтесь этого, возможности являются все еще относительно новыми и все еще имеют несколько петель.
setcap cap_net_bind_service=ep /path/to/server/executable
-A INPUT -p tcp --dport 1080 -j ACCEPT
иначе это не работало бы (у меня также есть a -j DROP
вместилище.), Таким образом, меня оставляют с двумя сокетами слушания.
– thom_nic
10.01.2018, 05:18
Короткий ответ - то, что это не возможно дизайном.
Длинный ответ - то, что в мирах с открытым исходным кодом существует много людей, играющих с дизайном и придумывающих альтернативные методы. В целом это - широко принятая практика, что это не должно быть возможно. То, что Вы пробуете, вероятно, средства, Вы имеете другой отказ дизайна в своей системе и должны пересмотреть Вашу целую архитектуру системы в свете *, отклоняет последствия безопасности и лучшие практики.
Тем не менее одна программа для авторизации некорневого доступа к низким портам является authbind. И selinux и grsecurity также служат основами для такой точно настроенной аутентификации.
Наконец, если Вы хотите, чтобы определенные пользователи запустили определенные программы как корень и в чем Вы действительно нуждаетесь, должен только позволить пользователю перезапускать апача или что-то как этот, sudo
Ваш друг!
Вы могли использовать netcat или xinetd или iptables перенаправление портов, или использовать апача в качестве прокси фронтэнда и выполнить процесс на непривилегированном порте.
Authbind, @Gilles уже упомянул это, но я хотел бы подробно остановиться на нем немного.
Это имеет удобное управление доступом (детали в странице справочника): можно отфильтровать доступ портом, интерфейсным адресом, uid, диапазонами адреса или порта и комбинации их.
Это имеет очень полезный параметр --depth
:
- уровни глубины
Причины authbind для влияния на программы, которые являются уровнями глубоко в графике вызова. Значение по умолчанию равняется 1.
"Уровни глубоко" означают, когда сценарий (или программа), запускает другой скрипт, это убывает уровень. Таким образом, если Вы имеете --depth 5
это означает на уровнях 1 (или это 0?) до 5 у Вас есть разрешение связать, тогда как на уровне 6 и на, Вы не делаете. Полезный, когда Вы хотите, чтобы сценарий имел доступ, но не программы, которые он запускает с или без Вашего ведома.
Для иллюстрирования у Вас могло быть что-то вроде этого: ради безопасности у Вас есть пользователь java
это предназначено, чтобы только выполнить Java, и Вы хотите предоставить ему доступ к порту 80:
echo > /etc/authbind/byport/80
chown root:java /etc/authbind/byport/80
chmod 710 /etc/authbind/byport/80
Я создал ../byport/80 file
, учитывая его к java
группа пользователей (у каждого пользователя есть своя собственная группа), и сделала ее исполняемым файлом группой, что означает, что это - исполняемый файл java
пользователь. Если Вы предоставляете доступ портом, файл должен быть исполняемым файлом пользователем, который должен иметь доступ, таким образом, мы сделали это.
Это могло бы быть достаточно для среднестатистического американца, но потому что Вы знаете, как использовать --depth
параметр, Вы работаете (как java
пользователь) authbind --depth [depth] my_web_app's_start_script
запуск в --depth 1
и прокладывание себе путь вплоть до Вас находит наименьшую глубину, которая работает, и используйте это.
Я попробовал метод iptables PREROUTING REDIRECT, но обнаружил, что он также влияет на пересылаемые пакеты. То есть, если машина также пересылает пакеты между интерфейсами (например, если она действует как точка доступа Wi-Fi, подключенная к сети Ethernet), то правило iptables также будет улавливать подключения подключенных клиентов к Интернет-адресатам и перенаправлять их на машина. Это не то, что я хотел - я хотел только перенаправить соединения, которые были направлены на саму машину.
Одна из возможностей - использовать переадресацию порта TCP. Например. using socat
:
socat TCP4-LISTEN:www,reuseaddr,fork TCP4:localhost:8080
Однако одним из недостатков этого метода является то, что приложение, которое прослушивает порт 8080, затем не знает адрес источника входящих соединений (например, для ведения журнала или других целей идентификации).