OpenSSH и chroot

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: OpenSSH и chroot

Непрочитанное сообщение FenX » 2009-05-22 14:16:23

Semen, попробуй так:
/etc/ssh/sshd_config

Код: Выделить всё

Subsystem	sftp	/usr/libexec/sftp-server

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Semen
проходил мимо

Re: OpenSSH и chroot

Непрочитанное сообщение Semen » 2009-05-22 20:30:22

Всё так же :(
Хотя обычный пользователь заходит нормально...

tyler56
сержант
Сообщения: 198
Зарегистрирован: 2009-06-03 18:10:15

Re: OpenSSH и chroot

Непрочитанное сообщение tyler56 » 2009-06-03 18:37:53

Провереный способ.
Если версия openssh ниже 4.9p1, обновляем порты и ставим

Код: Выделить всё

cd /usr/ports/security/openssh-portable/
make install clean
В /etc/rc.conf правим

Код: Выделить всё

#sshd_enable="YES"
sshd_program="/usr/local/sbin/sshd"
openssh_enable="YES"
В /usr/local/etc/ssh/sshd_config правим

Код: Выделить всё

#Subsystem      sftp    /usr/local/libexec/sftp-server
Subsystem       sftp    internal-sftp
если нужно включить sftp.

Для каждого узера подвергаемого chroot добавляем

Код: Выделить всё

Match User guest1
        ChrootDirectory /home/chroot
        AllowTCPForwarding no
        X11Forwarding no
Рестартим openssh

Само сабой добавляем этого узера с шелом /bin/sh и произвольным хомяком (принципиальным является путь в ChrootDirectory )

Код: Выделить всё

pw useradd -m -d /home/guest1 -s /bin/sh -n guest1
Создаем скрипт

Код: Выделить всё

#!/bin/sh
#
# Usage: ./make_crot.sh [username]

# Here specify the apps you want into the enviroment
APPS="/usr/bin/tar \
        /usr/bin/man /usr/bin/find \
        /usr/bin/gzip /usr/bin/gunzip /usr/bin/ee \
        /usr/local/bin/mc /usr/local/bin/mcmfmt \
        /usr/local/bin/mcedit /usr/sbin/chown \
        /bin/rmdir /bin/chmod /bin/tcsh /bin/sh \
        /bin/ls /bin/mkdir /bin/mv \
        /bin/pwd /bin/rm /usr/bin/id /usr/bin/ssh /usr/bin/ldd \
        /bin/cp /bin/echo /bin/cat /bin/date \
        /bin/pwd /bin/ln /bin/link /bin/ps /usr/local/bin/unzip \
        /usr/bin/sed /usr/bin/grep \
        /sbin/ldconfig /usr/sbin/mtree \
        /usr/bin/uname /usr/bin/diff /usr/bin/tr /usr/bin/sort \
        /usr/bin/awk /usr/bin/nawk  /usr/bin/less /usr/local/bin/unrar \
        /usr/bin/tail /usr/bin/bzip2 /usr/bin/openssl /usr/bin/du"

# Sanity check
if [ "$1" = "" ] ; then
        echo "    Usage: ./make_crot.sh [ username ] [ homedir ]"
        exit
fi
if [ "$2" = "" ] ; then
        echo "    Usage ./make_crot.sh [ username ] [ homedir ]"
        exit
fi

# Obtain username and HomeDir
CHROOT_USERNAME=$1
#HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME"  | cut -d':' -f 6`
HOMEDIR=$2
GROUP_ID=`/usr/bin/groups $CHROOT_USERNAME`

if [ ! -x ${HOMEDIR} ] ; then
        /bin/mkdir ${HOMEDIR}
fi
/bin/mkdir ${HOMEDIR}/libexec
/bin/mkdir ${HOMEDIR}/etc
/bin/mkdir ${HOMEDIR}/bin
/bin/mkdir ${HOMEDIR}/sbin
/bin/mkdir ${HOMEDIR}/usr
/bin/mkdir ${HOMEDIR}/usr/bin
/bin/mkdir ${HOMEDIR}/usr/sbin
/bin/mkdir ${HOMEDIR}/usr/lib
/bin/mkdir ${HOMEDIR}/usr/local
/bin/mkdir ${HOMEDIR}/usr/local/etc
/bin/mkdir ${HOMEDIR}/usr/share
/bin/mkdir ${HOMEDIR}/usr/local/bin
/bin/mkdir ${HOMEDIR}/usr/local/lib
/bin/mkdir ${HOMEDIR}/usr/local/share
/bin/mkdir ${HOMEDIR}/dev
/bin/mkdir ${HOMEDIR}/usr/libexec
/bin/mkdir ${HOMEDIR}/tmp
/bin/mkdir ${HOMEDIR}/var
/bin/mkdir ${HOMEDIR}/var/cron
/bin/mkdir ${HOMEDIR}/var/cron/tabs
/bin/mkdir ${HOMEDIR}/var/run
/bin/mkdir ${HOMEDIR}/var/tmp

/bin/chmod 777 ${HOMEDIR}/tmp
/bin/chmod 777 ${HOMEDIR}/var/tmp
# Create short version to /usr/bin/groups
# On some system it requires /bin/sh, which is generally unnessesary in a chroot cage
/bin/echo "#!/bin/sh" > ${HOMEDIR}/usr/bin/groups
/bin/echo "/usr/bin/id -Gn ${CHROOT_USERNAME}" >> ${HOMEDIR}/usr/bin/groups
/bin/echo "/usr/bin/id -Gn root" >> ${HOMEDIR}/usr/bin/groups
/bin/chmod +x ${HOMEDIR}/usr/bin/groups

# Add some users to ./etc/passwd
/bin/echo "root:*:0:0::0:0:Charlie &:/root:/sbin/nologin" > ${HOMEDIR}/etc/master.passwd
/usr/bin/grep /etc/master.passwd -e "^${CHROOT_USERNAME}" >> ${HOMEDIR}/etc/master.passwd

/usr/bin/grep /etc/passwd -e "^${CHROOT_USERNAME}" > ${HOMEDIR}/etc/passwd
/usr/bin/grep /etc/group -e "^${GROUP_ID}" > ${HOMEDIR}/etc/group
/bin/echo "wheel:*:0:root" >> ${HOMEDIR}/etc/group

/bin/cp /etc/pwd.db ${HOMEDIR}/etc/pwd.db
/bin/cp /etc/spwd.db ${HOMEDIR}/etc/spwd.db

/usr/sbin/pwd_mkdb -d ${HOMEDIR}/etc ${HOMEDIR}/etc/master.passwd
# Copy the apps and the related libs
for prog in $APPS;  do
        /bin/cp $prog ${HOMEDIR}$prog
        # obtain a list of related libraryes
        /usr/bin/ldd $prog > /dev/null
        if [ "$?" = 0 ] ; then
                LIBS=`/usr/bin/ldd $prog | awk '{ print $3 }'`
                for l in $LIBS; do
                        /bin/mkdir ${HOMEDIR}`/usr/bin/dirname $l` > /dev/null 2>&1
                        /bin/cp -f $l ${HOMEDIR}$l
                done
        fi
done

# From some strange reason these 3 libraries are not in the ldd output, but without them
# some stuff will not work, like usr/bin/groups
/bin/cp -f /libexec/ld-elf.so.1         ${HOMEDIR}/libexec/ld-elf.so.1
/bin/cp -f /etc/manpath.config          ${HOMEDIR}/etc/manpath.config
/bin/cp -f /etc/termcap                 ${HOMEDIR}/etc/termcap
/bin/cp -f /etc/motd                    ${HOMEDIR}/etc/motd
/bin/cp -R /usr/local/share/mc          ${HOMEDIR}/usr/local/share/mc
/bin/echo "export TERMCAP=/etc/termcap" >> ${HOMEDIR}/.profile
/bin/echo "setenv TERMCAP /etc/termcap" >> ${HOMEDIR}/.cshrc

/sbin/mknod ${HOMEDIR}/dev/null c 2 2
/sbin/mknod ${HOMEDIR}/dev/sa0 c 2 2
Ставим права и вылолняем

Код: Выделить всё

./make_chroot.sh guest1 /home/chroot/
Вручную доделываем

Код: Выделить всё

chown -R root:wheel /home/chroot
Проверено на 7.0.
Последний раз редактировалось tyler56 2009-06-03 18:43:20, всего редактировалось 1 раз.

Аватара пользователя
zidi
рядовой
Сообщения: 31
Зарегистрирован: 2009-06-07 11:03:11

Re: OpenSSH и chroot

Непрочитанное сообщение zidi » 2009-06-07 11:26:24

доброго времени суток.
Со вчерашнего дня пытаюсь разобраться, задача как мне кажется не сложная, думаю частично связана с этой веткой обсуждения, по крайней мере гугля так же думает ;-)
немного о системе:
фря 7.1, openssh не ставил, собственно ничего особенного.
Задача такая:
есть пользователь в системе не в группе wheel, который должен по удалёнке ходить по ssh на этот сервер, но не мог выходить дальше своей домашней директории, а мог только ребутить сервак в случае необходимости.
со всем вроде понятно, но единственное не получается - закрыть пользователя в home диретории. FTP никакого нет и не надо пока что.
В этой же ветке форума писали:
вообще, в 7й ветке, родной ssh системы изначально поддерживает ChrootDirectory
так что думаю, что ставить доп. порт, нет необходимости...
Как сделать, что куда скопировать, где что подправить?
Если нужны будут какие-нибудь дополнительные данные... предоставлю.
Заранее спасибо!

ViktorichZ
сержант
Сообщения: 152
Зарегистрирован: 2008-10-30 12:15:26

Re: OpenSSH и chroot

Непрочитанное сообщение ViktorichZ » 2009-06-07 20:16:50

ну так сделайте ему chroot и положите ему туда необходимый бинарник (/sbin/shutdown )

Аватара пользователя
zidi
рядовой
Сообщения: 31
Зарегистрирован: 2009-06-07 11:03:11

Re: OpenSSH и chroot

Непрочитанное сообщение zidi » 2009-06-07 20:23:04

сделал, вроде бы дело сдвинулось.... положил бинарники и либы /usr/local/bin/sudo и /sbin/shutdown, но при попытке под этим пользователем выполнить sudo shutdown -r now , выдаёт sudo:must be setuid root. Проблема была с правами на директорию с sudo, сделал
chown root:wheel /директори_с_sudo
chmod 4755 /директори_с_sudo
Но и сейчас:
sudo: uid цыфра does not exist in the passwd file
Хотя пользователь с таким uid (цыфра) присутствует в /etc/passwd

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: OpenSSH и chroot

Непрочитанное сообщение FenX » 2009-06-07 23:19:49

а сама база данныйх присутствует в чруте?
посмотри пост от tyler56.
поизучай его, там всё расписано что и куда.

Аватара пользователя
zidi
рядовой
Сообщения: 31
Зарегистрирован: 2009-06-07 11:03:11

Re: OpenSSH и chroot

Непрочитанное сообщение zidi » 2009-06-08 0:53:47

а сама база данныйх присутствует в чруте?
я файлик passwd в чрут/etc/ пробовал кидаь, не помогло.
А на счёт поста tyler56, он конечно хороший, но там он ставит openssh
cd /usr/ports/security/openssh-portable/
make install clean
а я хотел без дополнительных установок.
Может ещё есть преложения?

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: OpenSSH и chroot

Непрочитанное сообщение FenX » 2009-06-08 13:38:26

так я же сказал - полистай скрипт, который он там привёл.
очень полезная инфа.

не обязательно весь его пост делать до точности.
тем более, что в 7.1 уже идет новая версия ssh.

Гость
проходил мимо

Re: OpenSSH и chroot

Непрочитанное сообщение Гость » 2009-11-12 13:52:54

Делал все по статье chroot заработал как по ssh так и по sftp, но вот одновременно для одного пользователя не работает. Если делаю так
Match group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
то работает sftp только, а если так
Match group sftponly
ChrootDirectory %h
AllowTcpForwarding no
X11Forwarding no
то ssh а по sftp не заходит.
Народ помогите разобраться как сделать чтоб то и то работало, а то два логина не хочится заводить.

fbd
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-10-27 15:07:27

OpenSSH и chroot

Непрочитанное сообщение fbd » 2012-01-28 8:36:43

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

мои настройки:
Subsystem sftp internal-sftp -f AUTH -l VERBOSE

# Example of overriding settings on a per-user basis
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -f AUTH -l VERBOSE

fbd
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-10-27 15:07:27

Re: OpenSSH и chroot

Непрочитанное сообщение fbd » 2012-01-30 8:09:11

для юзеров попадающих в "ForceCommand internal-sftp" лог не работает
как это можно исправить !!!