Запретить пользователю видеть список домашних каталогов других пользователей

Запретить пользователю видеть список домашних каталогов других пользователей

Я хочу запретить пользователю видеть список домашних каталогов (других пользователей). По умолчанию пользователь не может получить доступ к домашнему каталогу другого пользователя, но может найти домашний каталог другого пользователя, как показано ниже:

[opc@instance-20210712-0826 home]$ cd /home
[opc@instance-20210712-0826 home]$ ls -lh
total 8.0K
drwx------. 10 opc       opc       4.0K Nov 14 22:52 opc
drwx------.  2 otheruser otheruser   62 Nov 28 18:19 otheruser
drwx------.  3 yaskur    yaskur    4.0K Nov 28 01:45 yaskur

Другим способом пользователь может видеть список других пользователей (на основе домашнего каталога). Я хочу предотвратить это. Это похоже на то, как это делают WHM/cPanel, если я вошел как пользователь, я не могу видеть домашний каталог другого пользователя:

[myuser@sng128 ~]$ cd /home
[myuser@sng128 home]$ ls -l
total 4
drwx--x--x 25 myuser myuser 4096 Nov 28 08:27 myuser

Я использую Oracle Linux, который похож на CentOS или Rocky Linux.

решение1

Ограничительные права доступа к файлам не мешают пользователю перечислять других пользователей и их домашние каталоги. getent passwdиз glibc выведет список пользователей, включая их домашние каталоги. Базовая getpwent()функция также может быть вызвана программой.

Чтобы полностью запретить любому пользователю перечислять домашние каталоги других пользователей, изолируйте пользователя. То есть, дайте ему собственный контейнер. Хотя «контейнер» может быть реализован различными способами: аппаратная виртуальная машина, программная виртуальная машина (пользовательский режим Linux), OpenVZ, chroot, контейнеры podman или пространства имен изоляции Linux User и PID в целом.

решение2

Наткнулся на это, когда искал решение для чего-то другого...

Я считаю, что можно просто сделать:

chmod 711 /home
chmod 711 /home/*

и это должно по крайней мере помешать другим пользователям перечислять каталог /home. Они не рекурсивны и будут защищать только /home и /home/userX или /home/userY от перечисления (ls) напрямую.

Конечно, непривилегированный пользователь может просто cat /etc/passwdпросмотреть всех пользователей в системе, и в этом случае это, вероятно, так же хорошо, как и перечисление каталога /home...

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

На сервере Ubuntu установку и настройку можно выполнить следующим образом (например, в скрипте firejail_install.sh):

#!/bin/bash

apt-get -y update
apt-get -y install firejail

if [ ! -f "/etc/firejail/disable-common.local" ]; then
    cat > "/etc/firejail/disable-common.local" <<EOF

# Firejail blacklist
blacklist /etc/passwd
blacklist /etc/letsencrypt
blacklist /etc/mysql
blacklist /etc/nginx
blacklist /etc/php
blacklist /etc/postfix
blacklist /etc/varnish
blacklist /var/lib/mysql
blacklist /var/run/php

# END
EOF

fi

Просто будьте осторожны с тем, что вы добавляете в черный список :)

В сочетании с правильными разрешениями для /home этого должно быть достаточно, чтобы лучше защитить вашу систему от посторонних глаз.

решение3

Удалить глобальное разрешение на чтение для /home

sudo chmod o-r /home

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

Связанный контент