Как изменить корневой каталог для пользователя Linux?

Как изменить корневой каталог для пользователя Linux?

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

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

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

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

решение1

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

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

решение2

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

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

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

решение3

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

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

Вот мой первоначальный ответ:

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

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

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

решение4

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

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, но less открывает /dev/tty, чтобы он мог получать нажатия клавиш от пользователя, чтобы иметь дело с перенаправлением stdin из конвейера.

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

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

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

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