Достаточно ли команды chmod 700 для предотвращения произвольного доступа к подкаталогам?

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

Если я установлю chmod 700 для домашнего каталога пользователя (в Linux), гарантирует ли это, что другие непривилегированные пользователи не смогут получить доступ ни к одному подкаталогу или файлу в этом домашнем каталоге? Или есть скрытые исключения из этого?

Чтобы быть конкретным, если у меня есть каталог /home/foo с правами 700, и в нем есть подкаталог “bar” с правами 777, сможет ли какой-либо другой пользователь в системе читать “bar”? Или гарантировано, что он не будет доступен для чтения?

Да. Чтобы другой пользователь мог пройти в любые подкаталоги, ему нужно прочитать базовый каталог. Если у него нет прав (например, 700), он не сможет ничего там прочитать. Также убедитесь, что базовый каталог (/home/foo) принадлежит пользователю foo. Пользователь bar не должен иметь возможность получить к нему доступ.

В основном правильно, как сказал vmfarms, однако другой пользователь все же может получить доступ к дереву с правами 777 (или аналогичными), если его текущая рабочая директория установлена туда привилегированным процессом, таким как пользователь foo или root.

foo$ tree
.
└── secure
    └── subdir1

secure имеет права 700, но subdir1 имеет права 777

Теперь bar не может напрямую получить доступ к secure и его содержимому.

Однако, если мы, как foo, войдем в secure/subdir1 и сделаем процесс принадлежащим bar, например, через su, bar сможет без проблем получить доступ к поддереву, расположенном в subdir1.

foo$ cd secure/subdir1
foo$ su bar
bar$ touch file-from-bar
bar$ exit
foo$ ls -l
total 0
-rw-r--r-- 1 bar bar file-from-bar

Установка прав 700 на каталог — это только первый шаг в правильном направлении.

Если /home/foo имеет права 700, а /home/foo/bar — 777, любой все еще может записывать в бар, если он знает, что он там есть, так как у них нет прав на просмотр /home/foo. Вот почему иногда нужно запустить chmod -R o-rwx /home/foo. Также, чтобы избежать будущих проблем, установите umask на что-то более ограничительное, например, 077 или 027, в зависимости от ваших потребностей.

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

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

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

Теория

Файловая система в Linux основывается на концепции контроля доступа через права владельца, группы и других пользователей. Команда chmod 700 устанавливает для директории такие права доступа:

  1. Владелец имеет полные права: чтение, запись и выполнение.
  2. Группа и другие пользователи не имеют никаких прав доступа.

Для директории права выполнять означают способность просматривать содержимое директории, то есть перемещаться внутрь неё или изменять её содержимое. Выполнение chmod 700 на директории /home/foo обеспечивает, что только пользователь-владелец, в данном случае foo, может просматривать и изменять её содержимое, включая поддиректории и файлы.

Пример

Рассмотрим следующую структуру директорий:

/home/foo
└── bar (777)

Здесь директория /home/foo имеет права 700, а поддиректория bar777. Это означает, что кто-то другой может иметь полный доступ к bar, если как-то окажется внутри этой директории. Однако они не могут просто так попасть туда без помощи пользователя foo или другого привилегированного процесса, например root.

Применение

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

  1. Использование привилегированных процессов: как было показано, если пользователь foo войдёт в bar и передаст туда процесс через su в пользу другого пользователя, например bar, последний сможет работать внутри этой директории, несмотря на ограниченные права на /home/foo.

  2. Существование слабых мест в системе: уязвимости в разрешениях отдельных файлов или поддиректорий могут быть использованы, если их права доступа более либеральны, к примеру 777 или rwxrwxrwx.

  3. Дополнительные меры безопасности: чтобы избежать перечисленных сценариев, рекомендуется:

    • Устанавливать права доступа на все поддиректории и файлы согласно принципу наименьших привилегий.
    • С помощью команды chmod -R o-rwx /home/foo рекурсивно удалять все права у других пользователей на поддиректории и файлы.
    • Настроить умаску (umask) на более строгие значения, например 077, чтобы по умолчанию создаваемые файлы имели максимально ограниченные права доступа.
  4. Правильное управление владельцами: убедитесь, что все файлы внутри /home/foo принадлежат пользователю foo. Это исключит ситуации, когда определённые файлы доступны их владельцам, а не владельцу директорий, в которых они находятся.

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

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

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