Один из способов обеспечения того, чтобы приложение было менее подвержено атакам, состоит в том, чтобы оно работало с наименьшими необходимыми привилегиями (предпочтителен режим пользователя).
Я обычно программировал только для Windows, используя .NET framework
, но недавно занимался разработкой веб-приложений с использованием Go. Я новичок в Ubuntu (и Linux в целом), поэтому мне интересно, что мне нужно сделать, чтобы мое серверное приложение использовало минимально возможные привилегии?
Я предполагаю, что моей программе не разрешено писать в Системные папки - это один способ, но каковы другие?
Для доступа и папка возле Вашего дома будут нужны некоторые поднятые полномочия, таким образом, будет лучше сохранить все Ваши файлы в Вашем доме.
$ ls -l /~$ ls -l /
total 152
drwxr-xr-x 2 root root 12288 May 28 08:29 bin
drwxr-xr-x 4 root root 4096 May 26 09:54 boot
drwxr-xr-x 3 root root 4096 May 5 10:22 build
drwxr-xr-x 2 root root 4096 Apr 8 2014 cdrom
drwxr-xr-x 15 root root 4540 May 27 12:35 dev
drwxr-xr-x 208 root root 12288 May 28 08:29 etc
drwxr-xr-x 5 root root 4096 Dec 23 09:43 home
lrwxrwxrwx 1 root root 32 Apr 8 2014 initrd.img -> boot/initrd.img-3.2.0-23-generic
drwxr-xr-x 28 root root 4096 May 22 08:38 lib
drwxrwxrwx 2 root root 12288 May 7 13:20 lib32
drwxr-xr-x 2 root root 4096 Apr 14 08:28 lib64
lrwxrwxrwx 1 root root 36 Feb 25 14:00 libnss3.so -> /usr/lib/x86_64-linux-gnu/libnss3.so
drwx------ 2 root root 16384 Dec 23 09:43 lost+found
drwxr-xr-x 7 root root 4096 May 13 18:17 media
drwxr-xr-x 3 root root 4096 Dec 23 09:43 mnt
drwxr-xr-x 19 root root 4096 May 8 08:05 opt
dr-xr-xr-x 308 root root 0 May 26 13:35 proc
drwx------ 23 root root 4096 May 20 08:53 root
drwxr-xr-x 32 root root 1200 May 28 08:29 run
drwxr-xr-x 2 root root 12288 May 28 08:29 sbin
drwxr-xr-x 2 root root 4096 Mar 5 2012 selinux
drwxr-xr-x 2 root root 4096 Apr 7 2014 srv
drwxr-xr-x 13 root root 0 May 26 13:35 sys
drwxr-xr-x 3 root root 4096 Dec 23 09:43 timeshift
drwxrwxrwt 22 root root 24576 May 29 13:52 tmp
drwxr-xr-x 13 root root 4096 Jun 20 2014 usr
drwxr-xr-x 15 root root 4096 May 22 12:52 var
lrwxrwxrwx 1 root root 29 Apr 8 2014 vmlinuz ->
, Как Вы видите, все эти каталоги принадлежат корню и хотя работать с ними, Вам нужны еще некоторые полномочия, если Ваш дом, который представлен ~
и может быть получен доступ от /home/username
, это - единственное место для Вашей детской площадки как обычный пользователь.
Прежде всего я не уверен - ли это правильное место для выяснения, так как это о Ubuntu, но вопросом является genral вопрос о программировании Unix/Linux. Так или иначе здесь это идет:
Вы, высказывание" (предпочтенный непривилегированный режим)" заставляет меня думать, что Вы могли бы перепутать вещи. "Непривилегированный режим" по сравнению с "Привилегированным режимом" является понятием программирования операционной системы. Это снижается до полномочий ЦП, где после контекстного переключения к привилегированному режиму некоторые стандартные программы ядра делают свое задание. Они видят дополнительные регистры ЦП и имеют доступ к привилегированным инструкциям по ЦП. Это - то, где Ваше Ядро и драйверы работают и если Вы не станете ядром/драйвером dev, у Вас никогда не будет доступа к этому.
Весь регулярный материал происходит в непривилегированном режиме.
Там у Вас есть "корень", суперпользователь с поднятыми полномочиями и "постоянные" пользователи. Дополнительно пользователь может быть членом нескольких групп с различными полномочиями.
См.: Введение в Полномочия и Linux Реальные и Эффективные идентификаторы или книга о программировании Unix/Linux (например, "Искусство Программирования Unix" Eric S. Raymond - я знаю его "Сетевое программирование Unix", которое является классиком)
, Вы пишете сетевое приложение? Если Вы хотите связать с низкими пронумерованными портами (< 1024, по моему скромному мнению), Вы должны базироваться полномочия. Если Вы кодируете в C, с помощью регулярного API POSIX, можно даже ввести "функцию человека" в терминале (т.е. "человек связывает"). Должен сказать Вам, для каких действий нужны полномочия. Или метод проб и ошибок. Это зависит от того, что Вы хотите сделать. Существует много материала, где Вам не нужны поднятые полномочия. Таким образом, можно запустить программу как пользователь, или даже создать нового пользователя с меньшим количеством составов группы, чем пользователь Ubuntu по умолчанию (который находится в "sudoers" и т.д.). Если Вы делаете полномочия пользователя root потребности, можно отбросить их после использования. Например, много серверов являются "setuid корневыми" демонами. Они запускаются с корня идентификатора пользователя, сделайте то, для чего они нуждаются в поднятых полномочиях, и затем они называют "setuid" для изменения их идентификатора пользователя (т.е. полномочия отбрасывания). См. GNU C Библиотека: Пример Программы Setuid
Так или иначе, я рекомендовал бы книгу по предмету. Можно также погуглить для "слайдов безопасности Unix", дают некоторые хорошие хиты из Unis (те от моего Uni, к сожалению, не публично доступны).