Как создать очень ограниченного пользователя в Linux

Вопрос или проблема

Мне нужно, чтобы пользователь в моей системе Linux выполнял некоторые команды в .bash_profile. Но я не хочу, чтобы этот пользователь имел доступ к sftp, ftp и другим протоколам. Также нельзя выполнять какие-либо команды, кроме некоторых в .bash_profile.

Поэтому я хочу создать пользователя, который не сможет использовать никакой протокол, кроме ssh, и не сможет выполнять никакие команды, кроме команд из .bash_profile. Что мне делать?

Обновление:

Я попробовал rbash, но, похоже, я могу выйти из него, набрав bash.

[root@centos-7 ~]# which rbash
/usr/bin/rbash
[root@centos-7 ~]# ls
a  anaconda-ks.cfg
[root@centos-7 ~]# cd a
[root@centos-7 a]# pwd
/root/a
[root@centos-7 a]# cd
[root@centos-7 ~]# rbash
[root@centos-7 ~]# cd a
rbash: cd: restricted
[root@centos-7 ~]# bash
[root@centos-7 ~]# cd a
[root@centos-7 a]# pwd
/root/a

1. Создайте ограниченную оболочку.

cp /bin/bash /bin/rbash

  1. Измените оболочку целевого пользователя на ограниченную оболочку

При создании пользователя:

# useradd -s /bin/rbash localuser

Для существующего пользователя:

# usermod -s /bin/rbash localuser

Для более подробной информации, пожалуйста, ознакомьтесь со статьей KBase 8349

Затем пользователь localuser оказывается в chroot и не может получить доступ к ссылкам за пределами своей домашней директории /home/localuser

  1. Создайте каталог в /home/localuser/, например, programs

    mkdir /home/localuser/programs

  2. Теперь, если вы проверите, пользователь localuser может получить доступ ко всем командам, выполнение которых он разрешил. Эти команды берутся из переменной окружения PATH, которая задается в /home/localuser/.bash_profile. Измените её следующим образом.

    cat /home/localuser/.bash_profile
    .bash_profile

    Получите псевдонимы и функции
    если [ -f ~/.bashrc ]; то
    . ~/.bashrc
    fi
    Специфичные для пользователя программы окружения и запуска
    PATH=$HOME/programs
    export PATH

Здесь переменная PATH устанавливается в каталог ~/programs, так как /usr/local/bin связывается с /home/username/bin и /bin связывается с /home/username/bin, поэтому заменяйте это.

  1. Теперь после входа с именем пользователя localuser, пользователь не может выполнить даже простую команду. Вывод будет таким,

    [localuser@example ~]$ ls
    -rbash: ls: command not found
    [localuser@example ~]$ less file1
    -rbash: less: command not found
    [localuser@example ~]$ clear
    -rbash: clear: command not found
    [localuser@example ~]$ date
    -rbash: date: command not found
    [localuser@example ~]$ ping redhat.com
    -rbash: ping: command not found

  2. Теперь создайте символические ссылки на команды, которые требуются пользователю localuser для выполнения в каталоге /home/localuser/programs

    ln -s /bin/date /home/localuser/programs/
    ln -s /bin/ls /home/localuser/programs/
    ll /home/localuser/programs/
    total 8
    lrwxrwxrwx 1 root root 9 Oct 17 15:53 date -> /bin/date
    lrwxrwxrwx 1 root root 7 Oct 17 15:43 ls -> /bin/ls

Здесь представлены примеры использования команд date и ls

  1. Снова войдите с именем пользователя localuser и попробуйте выполнить команды.

    [localuser@example ~]$ date
    Mon Oct 17 15:55:45 IST 2011
    [localuser@example ~]$ ls
    file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 programs
    [localuser@example ~]$ clear
    -rbash: clear: command not found

  2. Можно добавить еще один шаг, чтобы ограничить пользователя от внесения изменений в его .bash_profile, так как пользователи могут его изменить.

Выполните следующую команду, чтобы сделать файл .bash_profile пользователя localuser неизменяемым, так что root/localuser не сможет его изменить, пока root не уберет это право.

# chattr +i /home/localuser/.bash_profile

Чтобы убрать неизменяемый флаг,

# chattr -i /home/localuser/.bash_profile

Сделайте файл .bash_profile неизменяемым, чтобы пользователь localuser не мог изменять пути окружения.

Ответ или решение

Создание ограниченного пользователя в Linux – это задача, требующая аккуратного подхода для соблюдения баланса между предоставлением необходимых инструментов и ограничением избыточных привилегий. Это особенно важно в ситуациях, когда требуется предотвратить доступ пользователя к различным сетевым протоколам и командам, за исключением специально определенного набора. В данном руководстве мы рассмотрим, как правильно создать такого пользователя, используя возможности ограниченной оболочки (restricted shell), а также настройку окружения.

Теория

Многие системы Linux предлагают специальную оболочку, известную как rbash (restricted bash), которая позволяет ограничивать возможности пользователя в командной строке. В отличие от обычной оболочки Bash, rbash запрещает выполнение ряда команд, включая смену директории, изменение значений переменных PATH и другую модернизацию окружения.

Однако, как указано в описании проблемы, есть потенциал для обхода ограничений rbash, например, через вызов команды bash, которая позволяет выйти за рамки ограниченной среды. Основная задача здесь – обеспечить, чтобы пользователь оставался в рамках установленных ограничений.

Пример

  1. Создание ограниченной оболочки:

    Создайте копию bash по следующему пути:

    # cp /bin/bash /bin/rbash

    Далее измените оболочку целевого пользователя на restricted shell:

    Для нового пользователя:

    # useradd -s /bin/rbash localuser

    Для уже существующего пользователя:

    # usermod -s /bin/rbash localuser
  2. Ограничение окружения пользователя:

    Теперь нам необходимо настроить пользовательскую среду таким образом, чтобы была доступна только определенная команда, как указано в .bash_profile. Для этого создайте специальную директорию для программ:

    mkdir /home/localuser/programs

    Затем настройте .bash_profile пользователя таким образом, чтобы путь PATH указывал только на эту директорию:

    # cat /home/localuser/.bash_profile
    if [ -f ~/.bashrc ]; then
     . ~/.bashrc
    fi
    PATH=$HOME/programs
    export PATH

    Это изменение гарантирует, что ни одна команда не будет выполнена, если она не находится в директории /home/localuser/programs.

  3. Создание символических ссылок на разрешенные команды:

    На этом этапе необходимо создать символические ссылки внутри директории программ на команды, которые разрешено выполнять пользователю. Пример с командами date и ls:

    ln -s /bin/date /home/localuser/programs/
    ln -s /bin/ls /home/localuser/programs/

    Эти команды будут доступны пользователю при входе.

  4. Защита .bash_profile:

    Для предотвращения изменений в файле .bash_profile пользователем, можно установить на него атрибут immutable, что сделает его неизменяемым без соответствующих привилегий:

    # chattr +i /home/localuser/.bash_profile

    Чтобы снять этот атрибут, если потребуется внести изменения:

    # chattr -i /home/localuser/.bash_profile

Применение

После выполнения этих шагов, пользователь localuser сможет работать только в жестко регламентированном окружении. При каждом входе такая настройка ограничит выполнение только предусмотренного круга команд, а применение атрибута immutable на .bash_profile обеспечит сохранность этих настроек.

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

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

Оцените материал
Добавить комментарий

Капча загружается...