Ограничение пользователя SSH / SFTP домашним каталогом FreeBSD 10.4
Бывает ситуации, когда нужно дать доступ на сервер, но не желательно допустить, чтобы он видел «лишнее». Для этого можно ограничить пользователя домашним каталогом по ssh и sftp. Что нужно сделать для этого:
1) Создать пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 добавляем следующие строчки:
1 2 |
Match user test ChrootDirectory /home/test |
Перестартуем sshd:
1 |
/etc/rc.d/sshd restart |
3) Ниже приведенным скриптом создадим «пользовательское окружение», т.е. фактически создадим набор команд шелла, доступных пользователю:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#!/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, можно воспользоваться командой локального монтирования:
1 |
mount_nullfs /usr/local/www/apache24/sites/abc/ /home/test/home/test/site/ |