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

40069
Dennis Williamson

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

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

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

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

0
http://www.linuxquestions.org/questions/linux-general-1/lock-user-in-home-dir-161374/#post3532924 Incognito 13 лет назад 0
@ user257493 Как я понял, в `/ etc / security / chroot.conf` я добавил строки вроде:` user1 / home / user1`, и `/ home / user1` будет рутом для user1, верно? Должен ли я перезапустить что-нибудь, чтобы изменения в `/ etc / security / chroot.conf` вступили в силу? 13 лет назад 0
я думаю, что этот вопрос требует уточнения ... JT.WK 13 лет назад 1
Если вы сделаете все недоступным, кроме домашнего каталога, пользователь даже не сможет запускать команды, так как эти команды отсутствуют в его домашнем каталоге nos 13 лет назад 0
Я дал вам новый ответ на ваш вопрос. Я не думаю, что вам понравится, хотя. Omnifarious 13 лет назад 0

8 ответов на вопрос

3

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

usermod -d /path/to/new/homedir/ username 
Мне нужно менять рут, а не дом. 13 лет назад 0
2
Omnifarious

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

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

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

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

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

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

`@ Omnifarious` Мне нужен user1, чтобы не видеть остальной мир. Решение этой проблемы с разрешениями означает изменение остального мира, а не изменение user1. Мне нужно решение, которое решает проблему, изменяя user1, а не остальной мир. Да, если корневой каталог пользователя user1 является его домашним каталогом, он не имеет прямого доступа к каталогам, таким как `/ bin`, но я могу создать символическую ссылку на` / bin` в домашнем каталоге пользователя user1, таким образом решив, что он может видеть, и что он не может. 13 лет назад 0
@Vahagn: символические ссылки позволят пользователю получить доступ к вещам за пределами своей chroot-тюрьмы. Жесткие ссылки будут, но они не могут охватывать файловые системы. `cd / home / new_guy; ln -s / bin ./bin; chroot. ls bin` 13 лет назад 1
2
Louis

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

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

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

1
Benoit

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

Мне нужно менять рут, а не дом. 13 лет назад 0
1
nategoose

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

if grep "\\<$\\>" /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
Brian Huenefeld
usermod -d /path/to/new/homedir/ username 

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

Мне нужно менять рут, а не дом. 13 лет назад 0
0
JT.WK

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

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

пользователь root - это бог; можно увидеть и сделать что угодно где угодно. Пользователь Puny может видеть и делать только свой домен; остальная часть вселенной отрицается. bbaja42 13 лет назад 0
0
user741756

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

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 при следующем вызове. корневой).

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

Похожие вопросы