Как ограничить оболочку пользователей, позволяющую выполнить программные оболочки

Другое голосование за OpenVPN здесь. Мы использовали его в моем предыдущем задании, и это было горное тело, и у нас было меньше проблем с ним по сравнению с PPTP и туннелями VPN IPSEC, которые мы используем в моем текущем задании. Также трудно разбить гибкость, которую предлагает OpenVPN. Но OpenVPN действительно имеет одно слабое место, по-моему. Это в настоящее время не поддерживается многими смартфонами. На самом деле я не знаю ни о ком, которые делают. Я действительно знаю, что существуют люди, пытающиеся портировать его на iPhone, но я не уверен, где тот проект.

Вы не упоминали, какие клиенты Ваше vpn решение должно было поддерживать. Таким образом с этим в памяти, если необходимо избежать сторонних клиентов или нуждаться в поддержке смартфона затем, PPTP может быть лучшим соответствием. Windows, OSX и много смартфонов у всех есть собственные клиенты PPTP. Poptop является проектом Linux, который реализует PPTP.

9
задан 1 December 2009 в 15:13
9 ответов

Ваш вопрос должен быть:

Я не доверяю своим пользователям. Немые видят что-то в Интернете и испытывают его, не понимая то, что он делает. Окольным нравится шпионить вокруг и смотреть на другие файлы народов и красть их идеи. И ленивое, не запускайте меня на ленивых.

Как я защищаю свою систему и своих пользователей от моих пользователей?


Во-первых, Unix имеет очень очень всестороннюю систему полномочий файловой системы. Это, кажется, достойное учебное руководство на полномочиях файловой системы Unix. Суть этого - то, что каталоги могут быть установлены таким образом, что пользователь может войти в каталог и может запустить программы из того каталога, но не может просмотреть содержание того каталога. Если Вы делаете это, например, на / домой, если пользователь выполняет ls на / домой, они добираются, разрешение отклонило ошибку.

Если Вы действительно боитесь своих пользователей и хотите засунуть их в супермакс. тип ограниченной среды, используйте что-то как тюрьмы freebsd или зоны solaris - каждый пользователь получает их собственную адаптацию, сделанную средой. Поскольку добавленные точки используют ZFS, таким образом, можно взять снимок среды, когда они входят в систему поэтому, если они удаляют свои файлы, можно просто вытащить их из снимка.

11
ответ дан 2 December 2019 в 22:18

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

Конечно, это только было бы столь же безопасно как программа и сценарии оболочки; на практике этот вид ограниченной оболочки обычно не безопасен против умного взломщика.

4
ответ дан 2 December 2019 в 22:18

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

3
ответ дан 2 December 2019 в 22:18

Если Вы хотите, чтобы пользователь только смог выполнить определенные сценарии/двоичные файлы, можно использовать ограниченную оболочку. Это (поскольку статья Wikipedia упоминает) не абсолютно безопасно, но если можно гарантировать, что никакое приложение не позволило работать, может выполнить новую оболочку затем, это - хорошая альтернатива.

Для установки, пользователи ограничили оболочку, набор /bin/rbash (или подобный, большинство оболочек переходит к ограниченному режиму, когда двоичный файл называют r *** именем*) как пользовательская оболочка. Затем редактирование **.bashrc (или эквивалентный) и набор $PATH к каталогу, где все позволенные двоичные файлы/сценарии хранятся.

2
ответ дан 2 December 2019 в 22:18

Да, это возможно, но на практике потребовалась бы большая работа и планирование. Можно создать сценарии и сделать, чтобы они работали как привилегированное использование, затем удалили все полномочия от рассматриваемого пользователя. Или, можно установить оболочку пользователя на что-то вроде собственного создания, которое позволяет им сделать только, что Вы явно позволяете.

Однако стандартные полномочия в Linux делают почти невозможным для обычного пользователя "вредить системе". Какой вред Вы пытаетесь предотвратить? Это тривиально для предотвращения пользователей от способности установить программное обеспечение или запустить программы за пределами их корневого каталога, и можно использовать chroot для блокировки вниз системы еще больше.

1
ответ дан 2 December 2019 в 22:18
  • 1
    Я пытаюсь предотвратить возможные команды как комната-rf / мусорное ведро, ls / домой /*, комната-rf/usr/bin, ls/......................... –   1 December 2009 в 14:32
  • 2
    Можно предотвратить тех, которые используют стандартные полномочия файла Linux... –  ChristopheD 1 December 2009 в 14:52

Да, просто измените полномочия на этих командах.

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

Что не подходит из полномочий по умолчанию для обычных пользователей на Linux?

0
ответ дан 2 December 2019 в 22:18

Можно хотеть попробовать [lshell][1] (ограниченная оболочка).

lshell является оболочкой, кодированной в Python, который позволяет Вам ограничить среду пользователя ограниченными наборами команд, принять решение позволить/запретить любую команду по SSH (например, SCP, SFTP, rsync, и т.д.), зарегистрировать команды пользователя, ограничение синхронизации реализации, и т.д.

[1]: http://lshell.ghantoos.org/Overview lshell

1
ответ дан 2 December 2019 в 22:18

Чтобы полностью выполнить то, что вы просите, необходимо наличие трех вещей:

  1. Специальная оболочка, в которой отсутствуют интересующие вас команды . Это сложно сделать, но если вы действительно не хотите, чтобы пользователи имели доступ к некоторым примитивам оболочки, это единственный способ удалить их.
  2. Правильно установите права доступа к файлам . Не хотите, чтобы пользователи повредили систему? Установите разрешения, чтобы они не могли повредить систему, даже если у них есть нужные инструменты. Из этих трех шагов это самый простой.
  3. Используйте технологию принудительного контроля доступа, такую ​​как AppArmor . MAC-адреса, такие как AppArmor и SELinux, встраивают разрешения в ядро. Это мешает пользователям запускать нужные инструменты, даже если они где-то их находят (например, права доступа к файлам, не позволяйте им использовать их за пределами ограниченного ящика).

Ремень, подтяжки и скобяной пистолет для хорошей меры. Здесь сложно ошибиться.

AppArmor интересен тем, что MAC для конкретного исполняемого файла наследуется всеми его дочерними элементами. Задайте для входа пользователя значение / bin / bash-bob , установите профиль AppArmor для этого конкретного двоичного права, и единственный способ выйти из тюрьмы разрешений - использовать эксплойты ядра. Если какой-то сценарий ленивой установки оставил / var / opt / vendor / tmp доступным для глобальной записи по какой-то глупой причине, пользователь, использующий / bin / bash-bob в качестве своей оболочки , выиграет Не могу писать туда . Установите профиль bash-bob, чтобы разрешить запись только в их домашний каталог и / tmp , и такие ошибки разрешения не могут быть использованы. Даже если они каким-то образом найдут пароль root, профиль AppArmor для / bin / bash-bob будет по-прежнему применяться даже после того, как они su после su и bash процесс, который он порождает, является дочерним по отношению к / bin / bash-bob .

Сложнее всего построить этот профиль AppArmor.

  1. Создайте профиль AppArmor для / bin / bash-bob и установите его в режим аудита.
  2. Установите логин-оболочку Боба на / bin / bash-bob
  3. Войдите как Боб. Делайте все, что вы хотите, чтобы Боб мог делать.
  4. Используйте журнал аудита для создания профиля AppArmor (у SUSE есть инструменты для этого, но не уверен в других дистрибутивах Linux). Это чудовищно утомительно, но должно произойти, если вам нужен такой уровень безопасности. профиль AppArmor для / bin / bash-bob будет по-прежнему применяться даже после того, как они su с момента появления su и процесса bash , которые он порождает являются дочерними по отношению к / bin / bash-bob .

    Сложнее всего построить этот профиль AppArmor.

    1. Создайте профиль AppArmor для / bin / bash-bob и установите его в режим аудита.
    2. Установите логин-оболочку Боба на / bin / bash-bob
    3. Войдите как Боб. Делайте все, что вы хотите, чтобы Боб мог делать.
    4. Используйте журнал аудита для создания профиля AppArmor (у SUSE есть инструменты для этого, но не уверен в других дистрибутивах Linux). Это чудовищно утомительно, но должно произойти, если вам нужен такой уровень безопасности. профиль AppArmor для / bin / bash-bob будет по-прежнему применяться даже после того, как они su с момента появления su и процесса bash , которые он порождает являются дочерними по отношению к / bin / bash-bob .

      Сложнее всего построить этот профиль AppArmor.

      1. Создайте профиль AppArmor для / bin / bash-bob и установите его в режим аудита.
      2. Установите логин-оболочку Боба на / bin / bash-bob
      3. Войдите как Боб. Делайте все, что вы хотите, чтобы Боб мог делать.
      4. Используйте журнал аудита для создания профиля AppArmor (у SUSE есть инструменты для этого, но не уверен в других дистрибутивах Linux). Это чудовищно утомительно, но должно произойти, если вам нужен такой уровень безопасности.

        Самое сложное - это создание профиля AppArmor.

        1. Создайте профиль AppArmor для / bin / bash-bob и установите его в режим аудита.
        2. Установите логин-оболочку Боба на / bin / bash-bob
        3. Войдите как Боб. Делайте все, что вы хотите, чтобы Боб мог делать.
        4. Используйте журнал аудита для создания профиля AppArmor (у SUSE есть инструменты для этого, но не уверен в других дистрибутивах Linux). Это чудовищно утомительно, но должно произойти, если вам нужен такой уровень безопасности.

          Самое сложное - это создание профиля AppArmor.

          1. Создайте профиль AppArmor для / bin / bash-bob и установите его в режим аудита.
          2. Установите логин-оболочку Боба на / bin / bash-bob
          3. Войдите как Боб. Делайте все, что вы хотите, чтобы Боб мог делать.
          4. Используйте журнал аудита для создания профиля AppArmor (у SUSE есть инструменты для этого, но не уверен в других дистрибутивах Linux). Это чудовищно утомительно, но должно произойти, если вам нужен такой уровень безопасности.
            1. Вы будете делать такие вещи, как:
              • Утверждение доступа для чтения к большинству системных библиотек
              • Утверждение прав на чтение и выполнение для нескольких выбранных разрешенных системных команд
              • Утверждение доступа на запись к временным пространствам
              • Утверждение создания сокета, если необходимо
          5. Установите
          6. Войдите в систему как Боб, делайте что-нибудь.
          7. Внесите изменения.

          На мой взгляд, вам нужны только шаги 2 и 3, поскольку в комбинации они оба предотвращают возможность делать что-либо вредное за пределами тщательно сконструированного блока, который вы установили на обоих этих шагах.

9
ответ дан 2 December 2019 в 22:18

The way I usually implement this kind of restrictions requires that several conditions are met, otherwise the restriction can be easily circumvented:

  • The user does not belong to the wheel group, the only one authorized to use su (enforced via PAM).
  • The user is given a properly secured rbash with a read-only PATH pointing to a private ~/bin, this ~/bin/ directory contains links to simple utilities:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • the user is given a restricted, read-only environment (think of stuff like LESSSECURE, TMOUT, HISTFILE variables).

  • the user is mapped to the SELinux user staff_u and given rights to execute commands as other user as required via sudo.
  • the user's /home, /tmp and possibly /var/tmp are polyinstantiated via /etc/security/namespace.conf:

    /tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
    /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
    $HOME $HOME/$USER.inst/ tmpdir:create root
    

    Also, /etc/security/namespace.init makes all skeletal files readonly for the user and owned by root.

This way you can choose whether $USER can execute any command on his/her own behalf (via a link in the private ~/bin directory, provisioned via /etc/skel, as explained above), on behalf of other user (via sudo) or none at all.

1
ответ дан 2 December 2019 в 22:18

Теги

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