Вопрос или проблема
Если я установлю 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
устанавливает для директории такие права доступа:
- Владелец имеет полные права: чтение, запись и выполнение.
- Группа и другие пользователи не имеют никаких прав доступа.
Для директории права выполнять означают способность просматривать содержимое директории, то есть перемещаться внутрь неё или изменять её содержимое. Выполнение chmod 700
на директории /home/foo
обеспечивает, что только пользователь-владелец, в данном случае foo
, может просматривать и изменять её содержимое, включая поддиректории и файлы.
Пример
Рассмотрим следующую структуру директорий:
/home/foo
└── bar (777)
Здесь директория /home/foo
имеет права 700
, а поддиректория bar
— 777
. Это означает, что кто-то другой может иметь полный доступ к bar
, если как-то окажется внутри этой директории. Однако они не могут просто так попасть туда без помощи пользователя foo
или другого привилегированного процесса, например root
.
Применение
Теперь разберём возможные уязвимости и сценарии обхода ограничений:
-
Использование привилегированных процессов: как было показано, если пользователь
foo
войдёт вbar
и передаст туда процесс черезsu
в пользу другого пользователя, напримерbar
, последний сможет работать внутри этой директории, несмотря на ограниченные права на/home/foo
. -
Существование слабых мест в системе: уязвимости в разрешениях отдельных файлов или поддиректорий могут быть использованы, если их права доступа более либеральны, к примеру
777
илиrwxrwxrwx
. -
Дополнительные меры безопасности: чтобы избежать перечисленных сценариев, рекомендуется:
- Устанавливать права доступа на все поддиректории и файлы согласно принципу наименьших привилегий.
- С помощью команды
chmod -R o-rwx /home/foo
рекурсивно удалять все права у других пользователей на поддиректории и файлы. - Настроить умаску (umask) на более строгие значения, например
077
, чтобы по умолчанию создаваемые файлы имели максимально ограниченные права доступа.
-
Правильное управление владельцами: убедитесь, что все файлы внутри
/home/foo
принадлежат пользователюfoo
. Это исключит ситуации, когда определённые файлы доступны их владельцам, а не владельцу директорий, в которых они находятся.
Теоретически chmod 700
на директории закрывает все несанкционированные доступы для других пользователей, однако всегда стоит помнить о потенциальных способах обхода и предпринимать необходимые меры для их предотвращения. В частности, необходимо уделять внимание корректировке прав доступа не только на уровне директорий, но и на уровне файлов, а также регулярно проверять наличие привилегий и доступа у различных пользователей.