Когда мое приложение должно работать с привилегиями?

Один из способов обеспечения того, чтобы приложение было менее подвержено атакам, состоит в том, чтобы оно работало с наименьшими необходимыми привилегиями (предпочтителен режим пользователя).

Я обычно программировал только для Windows, используя .NET framework, но недавно занимался разработкой веб-приложений с использованием Go. Я новичок в Ubuntu (и Linux в целом), поэтому мне интересно, что мне нужно сделать, чтобы мое серверное приложение использовало минимально возможные привилегии?

Я предполагаю, что моей программе не разрешено писать в Системные папки - это один способ, но каковы другие?

2
задан 24 February 2017 в 18:27

2 ответа

Для доступа и папка возле Вашего дома будут нужны некоторые поднятые полномочия, таким образом, будет лучше сохранить все Ваши файлы в Вашем доме.

$ 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, это - единственное место для Вашей детской площадки как обычный пользователь.

0
ответ дан 24 February 2017 в 18:27

Прежде всего я не уверен - ли это правильное место для выяснения, так как это о Ubuntu, но вопросом является genral вопрос о программировании Unix/Linux. Так или иначе здесь это идет:

  1. Узнают о полномочиях Unix/Linux

Вы, высказывание" (предпочтенный непривилегированный режим)" заставляет меня думать, что Вы могли бы перепутать вещи. "Непривилегированный режим" по сравнению с "Привилегированным режимом" является понятием программирования операционной системы. Это снижается до полномочий ЦП, где после контекстного переключения к привилегированному режиму некоторые стандартные программы ядра делают свое задание. Они видят дополнительные регистры ЦП и имеют доступ к привилегированным инструкциям по ЦП. Это - то, где Ваше Ядро и драйверы работают и если Вы не станете ядром/драйвером dev, у Вас никогда не будет доступа к этому.

Весь регулярный материал происходит в непривилегированном режиме.

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

См.: Введение в Полномочия и Linux Реальные и Эффективные идентификаторы или книга о программировании Unix/Linux (например, "Искусство Программирования Unix" Eric S. Raymond - я знаю его "Сетевое программирование Unix", которое является классиком)

  1. Использование никакие полномочия или не отбрасывают их после использования

, Вы пишете сетевое приложение? Если Вы хотите связать с низкими пронумерованными портами (< 1024, по моему скромному мнению), Вы должны базироваться полномочия. Если Вы кодируете в C, с помощью регулярного API POSIX, можно даже ввести "функцию человека" в терминале (т.е. "человек связывает"). Должен сказать Вам, для каких действий нужны полномочия. Или метод проб и ошибок. Это зависит от того, что Вы хотите сделать. Существует много материала, где Вам не нужны поднятые полномочия. Таким образом, можно запустить программу как пользователь, или даже создать нового пользователя с меньшим количеством составов группы, чем пользователь Ubuntu по умолчанию (который находится в "sudoers" и т.д.). Если Вы делаете полномочия пользователя root потребности, можно отбросить их после использования. Например, много серверов являются "setuid корневыми" демонами. Они запускаются с корня идентификатора пользователя, сделайте то, для чего они нуждаются в поднятых полномочиях, и затем они называют "setuid" для изменения их идентификатора пользователя (т.е. полномочия отбрасывания). См. GNU C Библиотека: Пример Программы Setuid

Так или иначе, я рекомендовал бы книгу по предмету. Можно также погуглить для "слайдов безопасности Unix", дают некоторые хорошие хиты из Unis (те от моего Uni, к сожалению, не публично доступны).

0
ответ дан 24 February 2017 в 18:27

Другие вопросы по тегам:

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