Бывает ситуации, когда нужно дать доступ на сервер, но не желательно допустить, чтобы он видел «лишнее». Для этого можно ограничить пользователя домашним каталогом по ssh и sftp. Что нужно сделать для этого:
1) Создать пользователя:
root@w34rw34:~ # adduser test
Username: test
Full name: test test
Uid (Leave empty for default):
Login group [test]:
Login group is test. Invite test into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/test]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]: yes
Lock out the account after creation? [no]:
Username : test
Password : <random>
Full Name : test test
Uid : 1005
Class :
Groups : test
Home : /home/test
Home Mode :
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (test) to the user database.
adduser: INFO: Password for (test) is: 34rfw34rfw34
Add another user? (yes/no): no
Goodbye!
2) В /etc/ssh/sshd_config добавляем следующие строчки:
Match user test
ChrootDirectory /home/test
Перестартуем sshd:
/etc/rc.d/sshd restart
3) Ниже приведенным скриптом создадим «пользовательское окружение», т.е. фактически создадим набор команд шелла, доступных пользователю:
#!/bin/sh
# В скрипт нужно передавать имя пользователя для которого создаем chroot окружение
if [ "$1" = "" ] ; then
echo " Usage: $0 [ username ]"
exit
fi
USER=$1
GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4`
HOME=/usr/home/$USER
# Задаем список бинаников, нужных для работы в chroot
BINS="
/usr/local/bin/mysql \
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/csh \
/bin/date \
/bin/df \
/bin/echo \
/bin/expr \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/usr/bin/awk \
/usr/bin/bzip2 \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/ee \
/usr/bin/fetch \
/usr/bin/find \
/usr/bin/grep \
/usr/bin/gunzip \
/usr/bin/gzip \
/usr/bin/less \
/usr/bin/sed \
/usr/bin/sort \
/usr/bin/scp \
/usr/bin/ssh \
/usr/bin/tail \
/usr/bin/tar \
/usr/bin/touch \
/usr/bin/vi \
/usr/bin/uname \
/usr/bin/uptime \
/usr/local/bin/mc \
/usr/local/bin/mcedit \
/usr/local/bin/mcmfmt \
/usr/local/bin/unrar \
/usr/local/bin/unzip \
"
# Создаем структуру каталогов chroot окружения
mkdir $HOME/bin
mkdir $HOME/etc
mkdir $HOME/home
mkdir $HOME/home/$USER
mkdir $HOME/lib
mkdir $HOME/libexec
mkdir $HOME/tmp
mkdir $HOME/usr
mkdir $HOME/usr/bin
mkdir $HOME/usr/local
mkdir $HOME/usr/local/bin
mkdir $HOME/usr/local/etc
mkdir $HOME/usr/local/share
mkdir $HOME/lib
# Копируем бинарники в chroot окружение
for item in $BINS;
do
cp $item $HOME$item
done
# Копируем всю папку /lib
cp /lib/* $HOME/lib/
# Определяем какие библиотеки необходимо скопировать chroot
for item in $BINS;
do
ldd $item |awk '{print $3}'|grep "." >> /tmp/libs
done
# Копируем библиотеки
for item in `cat /tmp/libs|sort|uniq`;
do
cp $item $HOME/lib/
done
# Копируем оставшиеся необходимые файлы и библиотеки
cp /etc/termcap $HOME/etc/termcap
cp /etc/resolv.conf $HOME/etc/resolv.conf
cp /etc/nsswitch.conf $HOME/etc/nsswitch.conf
cp -R /usr/local/share/mc $HOME/usr/local/share/mc
cp /libexec/ld-elf.so.1 $HOME/libexec/ld-elf.so.1
# Создадим /etc/motd для пользователя
echo "Welcome $USER" > $HOME/etc/motd
# Теперь /etc/profile для него же
echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile
echo 'export PS1="$ "' >> $HOME/etc/profile
# /etc/group тоже нужен свой
cat /etc/group | grep $GID > $HOME/etc/group
# Теперь внутри chroot создадим пользователя
cat /etc/master.passwd|grep "^$USER:" > $HOME/etc/master.passwd
pwd_mkdb -d $HOME/etc $HOME/etc/master.passwd
# Выставляем права
chown root:wheel $HOME
chmod 755 $HOME
chmod 755 $HOME
chown -R $USER:$GID $HOME/bin
chown -R $USER:$GID $HOME/etc
chown -R $USER:$GID $HOME/home
chown -R $USER:$GID $HOME/lib
chown -R $USER:$GID $HOME/libexec
chown -R $USER:$GID $HOME/tmp
chown -R $USER:$GID $HOME/usr
chmod 777 $HOME/tmp
# Убираем за собой
rm /tmp/libs
5) Если необходимо сделать доступными пользователю еще какието папки (например из /usr/local/www/apache2, можно воспользоваться командой локального монтирования:
mount_nullfs /usr/local/www/apache24/sites/abc/ /home/test/home/test/site/