Другое

Запрет удаления папки в Linux без блокировки записи

Узнайте, как запретить удаление папки в Linux, сохраняя права на чтение и запись. Рассматриваем ACL, права родительской директории и другие методы защиты от случайного удаления.

Как запретить удаление папки в Linux? У меня есть папка Documents/Keychains, которую я не хочу случайно удалить или удалить её содержимое, но при этом мне нужны права на чтение и запись (чтобы не вводить пароли каждый раз). Существует ли аналог атрибута +i, который бы запрещал только удаление, а не другие операции?

Чтобы запретить удаление папки в Linux, сохраняя при этом права на чтение и запись, существуют несколько эффективных методов. Самый надежный способ — использование атрибута непрерываемости (immutable) с модификацией для предотвращения только удаления, а не других операций.

Содержание


Базовые методы защиты

Для предотвращения случайного удаления папки Documents/Keychains можно использовать несколько подходов:

  1. Изменение прав доступа к родительской директории — управление правами на запись в родительской папке
  2. Использование атрибута immutable (+i) — установка защищенного состояния файла
  3. ACL (Access Control Lists) — расширенные списки контроля доступа
  4. Создание специальных оберток или symlink — физическое ограничение доступа

Каждый метод имеет свои преимущества и ограничения, рассмотрим их подробнее.


Атрибут непрерываемости (+i) и его ограничения

Атрибут +i (immutable) является самым известным способом защиты файлов и директорий от любых изменений:

bash
# Установка атрибута +i
chattr +i Documents/Keychains

# Проверка атрибутов
lsattr Documents/Keychains

# Снятие атрибута +i
chattr -i Documents/Keychains

Однако у этого подхода есть существенное ограничение: атрибут +i запрещает любые изменения, включая:

  • Создание новых файлов
  • Модификацию существующих файлов
  • Переименование файлов
  • Изменение прав доступа

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

Важно: Атрибут +i работает только на файловых системах, которые поддерживают расширенные атрибуты, например ext2, ext3, ext4, XFS.


Использование прав родительской директории

Более гибкий подход — управление правами доступа к родительской директории. Для предотвращения удаления нужно контролировать право w (write) в родительской папке:

bash
# Проверка текущих прав
ls -ld Documents/

# Изменение прав, чтобы только владелец мог изменять содержимое
chmod 750 Documents/

Однако это не решает полностью проблему, так как владелец папки все равно сможет удалить её содержимое.

Более эффективный метод — использовать комбинацию прав:

bash
# Устанавливаем права на родительскую директорию
chmod 750 Documents/

# Удаляем право на запись для группы и других
# Теперь только владелец может изменять содержимое

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


ACL (Access Control Lists)

ACL предоставляет более гибкий контроль доступа, чем стандартные права Unix:

bash
# Установка ACL
setfacl -m u:user_name:rwx Documents/Keychains

# Запрет удаления для всех, кроме владельца
setfacl -m d:u:everyone:-wx Documents/Keychains

# Проверка ACL
getfacl Documents/Keychains

ACL позволяют精细 настраивать права для разных пользователей и групп. Для вашей ситуации можно:

  1. Дать полные права владельцу
  2. Дать права на чтение и запись для нужных пользователей
  3. Запретить право на удаление для всех, кроме владельца
bash
# Пример настройки ACL
setfacl -R -m u:owner:rwx,g:users:rwx,o:--- Documents/Keychains
setfacl -R -m d:u:owner:rwx,g:users:rwx,o:--- Documents/Keychains

Еще один интересный подход — использование символических ссылок или специальных оберток:

bash
# Создание защищенной папки с ограниченным доступом
mkdir -p /secure/Keychains_backup
cp -r Documents/Keychains/* /secure/Keychains_backup/

# Создание symlink для удобного доступа
ln -s /secure/Keychains_backup ~/Keychains_access

# Удаление оригинальной папки
rm -rf Documents/Keychains

Таким образом, содержимое физически находится в защищенном месте, а доступ осуществляется через symlink.


Практическое применение для Documents/Keychains

Для вашей конкретной ситуации с папкой Documents/Keychains рекомендую следующий подход:

bash
# 1. Установка ACL с запретом удаления
setfacl -R -m u:$USER:rwx,g:$USER:rwx,o:--- Documents/Keychains
setfacl -R -m d:u:$USER:rwx,g:$USER:rwx,o:--- Documents/Keychains

# 2. Создание специального скрипта-обертки
cat > /usr/local/bin/protect_keychains.sh << 'EOF'
#!/bin/bash
# Скрипт для защиты папки Keychains от удаления

KEYCHAINS_DIR="$HOME/Documents/Keychains"

if [ -d "$KEYCHAINS_DIR" ]; then
    echo "Установка защиты для папки Keychains..."
    setfacl -R -m u:$USER:rwx,g:$USER:rwx,o:--- "$KEYCHAINS_DIR"
    setfacl -R -m d:u:$USER:rwx,g:$USER:rwx,o:--- "$KEYCHAINS_DIR"
    echo "Защита установлена. Папка не может быть удалена."
else
    echo "Папка Keychains не найдена: $KEYCHAINS_DIR"
fi
EOF

chmod +x /usr/local/bin/protect_keychains.sh

# 3. Добавление в автозагрузку
echo "@reboot /usr/local/bin/protect_keychains.sh" | crontab -

Этот скрипт автоматически настраивает ACL при загрузке системы, обеспечивая постоянную защиту.


Рекомендации и лучшие практики

Для оптимальной защиты вашей папки Documents/Keychains рекомендую:

  1. Использовать ACL вместо простых прав — они обеспечивают более гибкий контроль
  2. Регулярно проверять права доступа — убедитесь, что настройки работают правильно
  3. Создать резервные копии — перед применением защиты сделайте бэкап содержимого
  4. Документировать изменения — сохраните настройки для возможного восстановления

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

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

Источники

  1. man chattr - Linux manual page for file attributes
  2. man setfacl - Linux manual page for ACL
  3. Understanding Linux File Permissions and Access Control
  4. How to Protect Files and Directories in Linux
  5. Extended Attributes and ACLs in Linux
Авторы
Проверено модерацией
Модерация