Запретите Файлу IO для процесса за исключением FIFOs

Первая вещь, которую я попробовал бы, apt-get install ssh-askpass-gnome иначе, если у Вас нет того пакета (или некоторая альтернатива askpass программа) установленный, затем гном не может предложить Вам Ваш пароль, когда необходимо разблокировать ключ.

У Вас должен будет также быть Ваш DISPLAY переменный набор правильно:

$ echo $DISPLAY
:0.0

Кроме того, как Вы запускаете свой терминал? Могла быть проблема со способом, которым Вы запускаете терминальный сеанс и наследовалось ли это gnome-session. Это может произойти при использовании некоторой программы gnon-гнома для установки привязок клавиш.

Предположение Вас использует gnome-terminal можно проверить использование pstree. Здесь Вы видите, что корректное наследование происходит:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

Принимая во внимание, что на этой сессии это НЕ наследовалось gnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

Кроме того, проверьте это ssh-agent запускается gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
4
04.11.2013, 03:27
3 ответа

Если

  1. программа может быть изменена для создания системного вызова по Вашему выбору перед любым недоверяемым кодом (это могло бы быть сделано через LD_PRELOAD), и
  2. программа не должна делать никаких системных вызовов вне exit(), sigreturn(), read() и write()

затем можно использовать seccomp (статья Wikipedia). Допускать больше, что просто те системные вызовы там seccomp-bpf, который использует Фильтр пакетов Беркли для определения который системные вызовы позволить. libseccomp библиотека упрощает seccomp-bpf так (например), если Вы хотели позволить close() системный вызов:

seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);

Или для чего-то подобного chroot, но из которого нельзя убежать, Вы могли попробовать контейнеры Linux, OpenVZ или Linux VServer.

4
27.01.2020, 20:52
  • 1
    Есть ли любой способ позволить связанные вызовы другого non-IO (т.е.: waitpid(), time(), alarm(), pause(), uname(), mmap(), и т.д.)? –  haneefmubarak 04.11.2013, 03:53
  • 2
    Существует seccomp-bpf, который использует правила Фильтра пакетов Беркли определить который syscalls позволить. –  Matthew Cline 04.11.2013, 23:48
  • 3
    я больше искал что-то, где я мог указать syscalls. –  haneefmubarak 05.11.2013, 10:58
  • 4
    я предположил бы, что libseccomp позволит Вам просто указывать syscalls. –  Matthew Cline 05.11.2013, 14:14
  • 5
    Это будет работать. Добавьте это libseccomp позволит указывать syscalls к ответу, и я отмечу его как корректный. Спасибо Matthew! –  haneefmubarak 07.11.2013, 01:19

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

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

Сделать больше затем, что необходимо было бы серьезно изменить вещи в файловой системе. но:

chmod o-rwx/-R

Конечно, заблокирует вещи вниз. Но снова другие пользователи не смогут считать что-либо также.

Я предполагаю, что более важные вопросы спросить Ваш сам, "Почему мне нужно это ограничение?" Возможно, существует лучший способ получить Ваши цели?

1
27.01.2020, 20:52
  • 1
    Походит на слишком большую работу. Кажется, что ему не придется облокотиться на среду это очень. Также это перестало работать по той же причине a chroot не работает здесь также. Пользователь может играть в игры и "выровнять". –  slm♦ 04.11.2013, 00:22
  • 2
    Ture, но действительно необходимо посмотреть на то, почему Вам нужно это ограничение. Вероятно что Ваш по размышлению некоторой другой проблемы. –  coteyr 04.11.2013, 00:24
  • 3
    я не сомневаюсь, что, просто играю роль OP в рассмотрении этого. Ваша идея - то, что я имел бы, вероятно, пошел с, истина быть сказанным. Это проходит мои тесты того, чтобы быть довольно портативным (просто снимают установку учетной записи и нескольких chmods/chowns от boxA до boxB). –  slm♦ 04.11.2013, 00:26

Процесс не может убежать из chroot, если Вы делаете правильно, вещи, а именно, выполняют процесс под его собственным идентификатором пользователя (т.е. не должно быть никакого процесса, работающего как тот же пользователь вне chroot).

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

Если Вы не можете включить корень, можно использовать пространство имен, но Вам нужно недавнее ядро для этого (≥3.8). Сначала создайте пользовательское пространство имен, затем в нем chroot и изменение в идентификаторе пользователя в пространстве имен с необходимым отсутствием полномочий.

С другой стороны, это может быть сделано (с сотрудничеством корня) через концепции безопасности, такие как SELinux или AppArmor: отключите весь связанный с файловой системой syscalls кроме open, read, write, close и lseek, и ограничьте open к каталогу, содержащему FIFOs. Обязательно отключите ptrace также.

1
27.01.2020, 20:52
  • 1
    , который я не предполагаю, существует некоторый способ сделать второй путь без справки корня (или по крайней мере с корнем, только вовлекаемым однажды в своего рода установку)? –  haneefmubarak 05.11.2013, 10:57
  • 2
    @haneefmubarak Без включаемого корня, Вам нужно или недавнее ядро Linux для пользовательских пространств имен или перейти к полной виртуализации. (Если бы Вы были только нацелены на процессы сотрудничества, то Вы могли бы сделать это с LD_PRELOAD, но это может легко работаться вокруг злонамеренным процессом.) –  Gilles 'SO- stop being evil' 05.11.2013, 11:07
  • 3
    , Как злонамеренное обработало бы работу вокруг LD_PRELOAD? –  haneefmubarak 05.11.2013, 11:48
  • 4
    Кроме того, lwn связь разорвана. –  haneefmubarak 05.11.2013, 11:48
  • 5
    @haneefmubarak LD_PRELOAD только вызовы библиотеки перенаправлений. Процесс может сделать системные вызовы непосредственно, это не будет затронуто. Это не должно даже быть злонамеренно (хотя на практике это действительно имеет тенденцию работать в большинстве незлонамеренных ситуаций): в особенности LD_PRELOAD не имеет никакого эффекта на статически связанный двоичный файл. –  Gilles 'SO- stop being evil' 05.11.2013, 13:19

Теги

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