Для пользователя на хосте Linux мне нужно сделать все недоступным, кроме его домашнего каталога.

Я слышал, что это обычно делается путем изменения корневого каталога для пользователя (и установки его в домашний каталог пользователя), однако я не мог найти способ сделать это.

Я думал о команде chroot , но кажется, что она просто запускает указанную команду, рассматривая указанный каталог как корневой каталог. Таким образом, кажется, что chroot не то, что мне нужно.

Итак, мой вопрос: что это за команда, которая изменяет корневой каталог пользователя?

8 ответов8

3

Похоже, вы хотите изменить каталог HOME, а не корневой каталог. Root всегда будет / или / root.

usermod -d /path/to/new/homedir/ username
2

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

Конфигурация FTP-сервера может быть полезна для вас:http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html

Это полная настройка chroot, ограничивающая пользователей ftp этим каталогом chroot.

2

Я поддерживаю этот ответ, и мне все равно, получу ли я -1 за него. Это не то, что Unix может сделать для вас любым разумным способом. Вы просите что-то, что практически невозможно.

Но есть своего рода способ получить что-то вроде того, что вы просите, вроде. Используйте виртуальную машину. Настройте экземпляр виртуальной машины для данного пользователя и предоставьте ему только права входа в систему, а не хост-ОС.

Вот мой оригинальный ответ:

Просто используйте разрешения. Вот для чего они. Пользователь, как правило, не имеет доступа для записи чего-либо, кроме /tmp и своего домашнего каталога. И они должны иметь доступ на чтение к /bin/ , /usr/bin , /usr/lib и /lib иначе они вообще ничего не смогут сделать.

Если вы действительно хотите что-то более строгое, чем дают разрешения, то изучите настройку selinux, чтобы вы могли ограничить их дальше.

Использование chroot просто не даст вам того, что вы хотите. Это действительно сложно настроить, и есть способы обойти это.

1

см. руководство пользователя useradd . Вы должны использовать ключ -d .

1

Я думаю, если вы добавите

if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
    echo I am not a crook
else
    exec chroot $CWD
endif

до конца вашего /etc/profile вы можете получить то, о чем просите, но у него могут быть некоторые побочные эффекты, о которых я не знаю (захват оболочки /etc/profile может вызвать проблемы). В этом случае вам нужно будет создать файл /etc/jailbirds который представляет собой список пользователей, для которых вы хотите использовать chroot. Вам также нужно убедиться, что этот файл существует, и решить, что делать в случае ошибок при доступе к нему, чтобы другие пользователи (особенно root) не были заблокированы chroot.

Кроме того, это будет сложно. Пользователь не сможет получить доступ к /proc что приведет к тому, что многие утилиты оболочки (такие как ps , top и многие другие) не будут работать. Пользователь также не сможет получить доступ к /dev/null , что сломает много вещей.

Пользователь также не сможет получить доступ к /dev/tty который будет ломаться все less и more при использовании со стандартным вводом. Пользовательские приложения будут наследовать дескрипторы открытых файлов stdin, stdout и stderr от до chroot, но меньше открывают /dev /tty, чтобы пользователь мог получать нажатия клавиш для перенаправления stdin из канала.

Вы также не сможете получить доступ к каким-либо программам, общим библиотекам или множеству файлов, которые находятся в каталоге /etc (например, /etc /protocol), который используется многими программами.

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

Если вы попробуете мое предложение, я предлагаю вам быть очень осторожным. Было бы легко ошибиться и все испортить. Я не проверял это, кстати.

0

Создать гостевого пользователя

useradd -s /bin/sh -m guest

Установите для них оболочку, которая не зависит от сторонних библиотек

cd /home/guest
apt-get download busybox-static
dpkg -x *.deb .
rm *.deb
cd bin
./busybox --install .

Измените свой корневой каталог на /home /guest и запустите как гость

mkdir /home/guest/etc
grep guest /etc/passwd > /home/guest/etc/passwd
chroot /home/guest /bin/sh
exec env -i login -f guest

Внутри chroot вы можете установить и запустить ssh-сервер, чтобы пользователь мог войти удаленно; хотя вы можете столкнуться с проблемами, когда определенные приложения хотят получить доступ к файловой системе /proc и друзьям; в этом случае вы можете начать наступать на контейнеры lxc, пространства имен, виртуальные машины и т. д., где что-то вроде schroot или qemu становится более простым вариантом.

Если вы придерживаетесь собственного решения, вы можете столкнуться с проблемами безопасности, если вы не будете осторожны (например, случайно передаете право собственности на /home /guest /bin гостю, и в этом случае guest может получить права root при следующем вызове. корневой).

Я понятия не имею, являются ли вышеуказанные команды тем, что вы хотите, и / или они уязвимы для каких-либо дыр в безопасности. Надеюсь, они помогут, хотя.

0
usermod -d /path/to/new/homedir/ username

Это отвечает на ваш вопрос, но я не уверен, что это то, что вам нужно?

0

Я думаю, что вы немного смущены. Каталог /root будет доступен только пользователю root. Каждый пользователь, как правило, имеет свой собственный каталог HOME в /home /, а корневой пользователь системы будет иметь /root

Если вы хотите изменить каталог HOME, следуйте другим ответам или отредактируйте файл /etc /passwd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .