Содержание

Skip to end of metadata
Go to start of metadata


Данная статья подразумевает, что домашние каталоги пользователей размещены в файловой системе, поддерживающие расширенные атрибуты файловых объектов и списки контроля доступа (ACL), и что эта файловая система примонтирована с включенным использованием ACL. Файловая система Ext4, используемая в Astra Linux, по умолчанию соответствует этим требованиям. Проверить, поддерживает ли ваша файловая система ACL можно командой (вместо /dev/sda1 указать нужное имя дискового раздела):

sudo tune2fs -l /dev/sda1 | grep "Default mount options:"
При этом в строке вывода должен присутствовать параметр acl:

Default mount options: user_xattr acl

Данная статья применима к:

  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1

Исходные данные

В Astra Linux ялыки для рабочего стола каждого пользователя по умолчанию располагаются в подкаталогах каталога Desktops. Этот каталог и его подкаталоги автоматически создаются при первом входе пользователя в графическую сессию. Сам каталог Desktops по умолчанию располагается в домашнем каталоге пользователя и по умолчанию содержит 4 подкаталога (Desktop1, Desktop2, Desktop3, Desktop4), соответствующих четырём виртуальным столам пользователя, и содержащих ярлыки для каждого из этих рабочих столов.
Расположение каталога с ярлыками для рабочих столов указывается в файле домашнего каталога пользователя .config/user-dirs.dirs (параметр XDG_DESKTOP_DIR), и может быть при необходимости самостоятельно изменено пользователем. Типичное содержание файла .config/user-dirs.dirs:

 Click here to expand...
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Загрузки"
XDG_TEMPLATES_DIR="$HOME/Шаблоны"
XDG_PUBLICSHARE_DIR="$HOME/Общедоступные"
XDG_DOCUMENTS_DIR="$HOME/Документы"
XDG_MUSIC_DIR="$HOME/Музыка"
XDG_PICTURES_DIR="$HOME/Изображения"
XDG_VIDEOS_DIR="$HOME/Видео"

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


Запрет изменения рабочего стола

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

  1. Запретить пользователю изменять содержимое каталога Desktops и его подкаталогов, оставив при этом пользователю право читать содержимое этих каталогов;
  2. Запретить пользователю изменять расположение каталогов рабочего стола, т.е. запретить изменять файл .config/user-dirs.dirs, оставив ему при этом право читать содержимое файла;
  3. Запретить пользователю отменять установленные запреты, т.е. запретить пользователю изменять права доступа к вышеуказанным файловым объектам;
  4. Сохранить ограничения по чтению для прочих пользователей;
  5. Запретить удалять и переименовывать защищённые объекты.

Подробные шаги для выполнения указанных модификаций (в примерах используется имя пользователя username):

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

    sudo chown root:root ~username/.config/user-dirs.dirs
    sudo chown -R root:root ~username/Desktops

  2. Запретить всем пользователям читать и изменять файловые объекты, оставив разрешения на чтение и изменение только новому владельцу root и группе root:

    sudo chmod 660 ~username/.config/user-dirs.dirs
    sudo chmod -R o-rwx,ug+rwX ~username/Desktops

  3. Индивидуально разрешить пользователю читать файловые объекты. Для индивидуального изменения прав доступа используются ACL:

    sudo setfacl  -m u:username:r ~username/.config/user-dirs.dirs
    sudo setfacl  -R -m u:username:rX ~username/.config/user-dirs.dirs

  4. Дополнительно можно задать значения ACL "по умолчанию", которые будут автоматически применяться к создаваемым объектам:

    sudo setfacl -R -m d:u:${USER}:r ~username/.config/user-dirs.dirs
    sudo setfacl -R -m d:u:${USER}:rX ~username/.config/user-dirs.dirs

  5. Запретить переименование и удаление файловых объектов:

    sudo chattr +i ~username/.config/user-dirs.dirs
    sudo chattr +i ~username/.config/user-dirs.dirs

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

Пример сценария

Приведённый ниже примерный сценарий может быть сохранён в файл и вызван с именем пользователя в качестве аргумента:

#!/bin/bash
USER=$1
HOME="/home/$USER"

if [ -z "$USER" ] ; then
    echo "Укажите имя пользователя"
    exit 1
fi
sudo chown -R root:root           "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops"
sudo chmod -R o-rwx,gu+rwX        "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops"
sudo setfacl -R -m u:${USER}:rX   "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops"
sudo setfacl -R -m d:u:${USER}:rX "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops"
sudo chattr +i "$HOME/.config/user-dirs.dirs" "$HOME/Desktops"

  • No labels

9 Comments

  1. Доработанный скрипт с возможностью выбора уровня, для которого будет применена конфигурация:

    ./script имя_пользователя - применит конфигурацию для пользователя с меткой "0"

    ./script имя_пользователя 1 - применит конфигурацию для пользователя с меткой "1"

    ./script имя_пользователя 2 - применит конфигурацию для пользователя с меткой "2"

    ./script имя_пользователя 3 - применит конфигурацию для пользователя с меткой "3"


    p.s. можно конечно добавить и категории...

    Артем Абакумов   проверь у себя по результатам отпишись



    #!/bin/bash USER=$1 LVL=$2 if [ -z "$USER" ] ; then echo "Укажите имя пользователя" exit 1 fi if [ -z "$LVL" ] ; then HOME="/home/$USER" else HOME="/home/.pdp/$USER/"l"$LVL"i0c0x0t0x0"" fi sudo chown -R root:root "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops" sudo chmod -R o-rwx,gu+rwX "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops" sudo setfacl -R -m u:${USER}:rX "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops" sudo setfacl -R -m d:u:${USER}:rX "${HOME}/.config/user-dirs.dirs" "${HOME}/Desktops"
  2. Александр Левдонский  можно обновить статью по результату теста

  3. Создал пользователя user4 с уровнями от 0 до 3, при низкой целостности.

    До отработки скрипта, на каждом попробовал создать файл , скопировать и удалить ярлык.
    Применил скрипт с именем ./script user4 от 1 до 2, что бы не применяя для 3 уровня.

    Проверил user4 c 0 по 2 уровень не смог создать файл, скопировать или удалить ярлык. На 3 уровне смог, затем применил еще раз скрипт, для 3 уровня, после чего и на 3 ем уровне пользователь не смог создать файл, скопировать или удалить ярлык.

    Видео если интересно (замечания) : https://cloud.mail.ru/public/4Mkb/4C1d5aLmq

  4. Я правильно понимаю, что предложение "выполнить скрипт на каждом уровне конфиденциальности" рабочее, и его нужно внести в статью?

  5. Да, он рабочий. Но на высоком уровне целостности не проверялся (в теории высокий уровень целостности - предназначен для Администрирования).

  6. ОК, спасибо. Осталось придумать, как выполнить эти скрипты на разных уровнях конфиденциальности от имени администратора. Не сам же юзер на себя ограничения будет навешивать.

    И на разных категориях.

    И в домене.

  7. Кажется, есть более простой и более правильный способ запретить изменения:

    sudo chattr +i $USER/.config

    При этом пользователь не может ни переименовать ни удалить .config