CentOS 7 で chrooted SSH を作成する適切な方法

CentOS 7 で chrooted SSH を作成する適切な方法

chroot された SFTP を作成する方法についてのチュートリアルはたくさんありますが、FTP と phpMyAdmin をあれこれいじるよりも、、、と実行する方がはるかに速いため、SSH を使用したいと思います。wgetこのunzip方法は、(手動の魔法なしで) クリーンかつ拡張可能である必要があり、パッケージを簡単に追加およびアップグレードできます。mysqlmysqldumpldd

答え1

幸運なことに、私はそれを実現する方法を思いつくことができました。

ステップ1: chrootされたユーザーのグループを追加する

groupadd chrootusers

ステップ2: SSHを構成する

nano /etc/ssh/sshd_config

交換する

Subsystem     sftp    /usr/libexec/openssh/sftp-server

Subsystem     sftp    internal-sftp

最後に貼り付け

Match Group chrootusers
  ChrootDirectory /home/%u

走る

systemctl restart sshd
systemctl status sshd

ステップ3: ユーザーを追加する

peter希望するユーザー名に変更します。

export NEW_USER_NAME=peter

useradd ${NEW_USER_NAME}
usermod -G chrootusers -d / ${NEW_USER_NAME}
passwd ${NEW_USER_NAME}

ステップ4: パッケージをインストールし、必要なディレクトリ構造を作成する

yum --installroot=/home/${NEW_USER_NAME} --releasever=7 --nogpg --disablerepo='*' --enablerepo=base install centos-release openssh-clients wget vi nano zip unzip tar mariadb findutils iputils bind-utils rsync

ステップ5: マウントprocしてdev

echo "none /home/${NEW_USER_NAME}/proc proc defaults 0 0" >> /etc/fstab
echo "/dev /home/${NEW_USER_NAME}/dev none bind 0 0" >> /etc/fstab

走る

mount -a

ステップ6: DNSサーバーを構成する

echo "nameserver 8.8.8.8" >> /home/${NEW_USER_NAME}/etc/resolv.conf
echo "nameserver 8.8.4.4" >> /home/${NEW_USER_NAME}/etc/resolv.conf

それだけです。

$NEW_USER_NAME現在のセッションにバインドされていることに注意してください。

別のユーザーを追加する場合は、手順 3 から開始します。

後でさらにパッケージをインストールするには、手順 4 と同じコマンドを使用します。


SSH を使用してログインすると、次のようなメッセージが表示されますcannot find name for user ID x。これらは無視しても問題ありませんが、削除したい場合は、chroot でユーザーを複製する必要があります。

export NEW_USER_ID=$(id -u ${NEW_USER_NAME})
export NEW_USER_GROUP_ID=$(id -g ${NEW_USER_NAME})

chroot /home/${NEW_USER_NAME} /bin/bash -c 'useradd -u ${NEW_USER_ID} ${NEW_USER_NAME}'
chroot /home/${NEW_USER_NAME} /bin/bash -c 'groupadd -g ${NEW_USER_GROUP_ID} chrootusers'

関連情報