抜粋:https://blog.csdn.net/yanggd1987/article/details/54310686
需要
SSH経由踏み台マシンに一般ユーザーを着陸した後、その後、ssh経由でネットワーク内の他のサーバーにジャンプ。飛び石sshのみ、LS基本的なコマンドを提供するデータ伝送SCP、SFTP、ローカルパイプラインを防ぐために禁止され、ログインユーザは、サーバのデータを閲覧するユーザーを防ぐために、さらに特定のディレクトリにロックする必要があります。
通常、我々は、転送データにユーザーを制限するために、ディスククォータを使用しますが、独立したディスクパーティションのディスク割り当てなければなりません、ファイルのディレクトリにできないので、ルートディレクトリに置かれた場合、ユーザーのホームディレクトリは、独立して、マウントされている必要があり、コンフィギュレーション小さなディスククォータの効果。
chroot環境のSSH機能は、この問題に対する良い解決策になることができ。男のsshd_configのは、機能がchrootの「ChrootDirectory」は、このパラメータを達成するために設定する必要があります。
ChrootDirectory:ユーザーがchrootディレクトリを認証された後、定義され、ディレクトリとすべてのサブディレクトリの所有者は、これらのディレクトリを書き込むことができ、かつ、他のグループアカウントが書き込み可能でないルート、およびrootアカウントでなければなりません。chrootの後、sshdがユーザー自身のホームディレクトリにchrootディレクトリにユーザーの作業ディレクトリを送信します。該当する/ホーム/ユーザ名ディレクトリが存在しない場合は、chroot環境/ディレクトリに定義されているディレクトリChrootDirectoryに直接移動します
コンフィギュレーション
この実験は着陸後、中には/ var / chrootのロックにユーザーをテストするだけでsshを使用、LSはコマンドおよびその他の基本的なテストします。
まず、ユーザーが作成した
テストユーザーを作成します。1.(デフォルトのホームディレクトリを作成しないでください)
useraddの- Mテスト
passwdのテスト
ユーザーのホームディレクトリにchrootディレクトリを確立する2.
ます。mkdir -p / VAR / chroot環境/ホーム/ テスト のchown -R test.test / VAR / chroot環境/ホーム/ テスト のchmod 700 / VAR / chroot環境/ホーム/テスト
第二に、基本的なchroot環境を構築
注:基本的なchroot環境は、少なくとも1つのシェルを持っている(例えば、SH、bashの)と、必要なシステム・デバイス・ファイル(例:/ dev / nullには/ dev /ゼロ)、ユーザーがいくつかのコマンドを実行できるようにしたい場合は、あなたが準備する必要があり実行可能なコマンドとコマンド依存ライブラリを、対応します
-pます。mkdir / VAR / CHROOT CD / VAR / CHROOTの MKDIR {ビン、DEV、lib64に、など、}ホーム mknodをDEV / nullに C 1。 3。 mknodをDEV / ZERO C 1。 5人の。 そのような報告書の不足など#sshコマンドのニーズ、:PRNG IS 播種はない のmknod DEV /ランダムC 1。 8。 mknodをDEV / urandomのC 1。 9つの。 、このような報告書の不足など#sshコマンドのニーズは、:検証が失敗したホストキー はmknod DEV / TTY C 。5 0 #変更 / VAR / 所有者とそのサブディレクトリにchrootおよび権限変更 のchown -R&LT root.root /をVAR / CHROOT のchmod -R&LT 755 / VAR / CHROOTの #デバイスが許可し、これらのファイルを書き込むために、ユーザは、与えられたいくつかのコマンドを書きません chmodの0666 DEV / { nullに、ZERO、TTY} #コピーに/ etc / passwdと/ etc / groupファイルを/ VAR / chroot環境の/ etcと、すべてのユーザーを削除し、自分自身とルート以外占めています。将来的には符号付きの2つのファイルが、報告されずに"私は名前を持っていない持っている!" のCp -p / etc / passwdファイル/ VAR / chroot環境の/ etc / CP -p / etc / groupを/ VAR / chroot環境の/ etc /
猫の/ var / chroot環境の/ etc /グループ
ルート:X:0:
テスト:X:516:
猫の/ var / chroot環境の/ etc / passwdの
ルート:X:0:0:ルート:/ルート:/ binに/ bashのの
テスト:X :516:516 :: /ホーム/テスト:/ binに/ bashの
三、配置のssh
vimのは、/ etc / ssh / sshd_config
#それ以外の場合はエラーになり、最後に次の行を追加し
、ユーザーテストマッチを
ChrootDirectoryの/ var / chroot環境
#再起動SSH
サービスsshdが再起動し
、基本的なコマンドの4つのコピーを
、ユーザーのログイン後に利用できる持っている必要がありますシェル、したがって、使用/ binに/ bashの、などのls、MKDIR、などの他のコマンドがあるとして
注:/ binに/ lsのコマンドと/ usr / binに/ sshのコマンドは、ライブラリファイルディレクトリを使用するのと同じではありません、我々はスクリプトを実行する前に適切なパスを(この問題はスクリプトによって解決されている)を構築する必要がありますので、
LDD / binに/ lsの| awkは' {$ 3印刷} ' | grepを" / libに" | 並べ替え| uniqの /lib64/libacl.so。1 /lib64/libattr.so。1 /lib64/libcap.so。2 /lib64/libc.so。6 /lib64/libdl.so。2 /lib64/libpthread.so。0 /lib64/librt.so。1 /lib64/libselinux.so。1 LDDは/ usr / binに/ sshを| awkは' {$ 3印刷} ' | grepを" / libに" | 並べ替え| uniqの /lib64/libcom_err.so。2 /lib64/libcrypt.so。1 /lib64/libc.so。6 /lib64/libdl.so。2 /lib64/libfipscheck.so。1 / lib64に/ libfreebl3.so /lib64/libgssapi_krb5.so。2 /lib64/libk5crypto.so。3 /lib64/libkeyutils.so。1 /lib64/libkrb5.so。3 /lib64/libkrb5support.so。0 /lib64/libnsl.so。1 / lib64に/ libnspr4.so / lib64に/ libplc4.so / lib64に/ libplds4.so /lib64/libpthread.so。0 /lib64/libresolv.so。2 /lib64/librt.so。1 /lib64/libselinux.so。1 /lib64/libutil.so。1 /lib64/libz.so。1 /usr/lib64/libcrypto.so。10 は/ usr / lib64に/ libnss3.so /usr/lib64/libnssutil3.so
ここでは、スクリプトを使用します。
#!/ binに/ bashのが ある#Comment:chrootの後にsshの着陸、ユーザーにコマンドを追加し 、ファイルリストの実行を許可するには# cmdlist = " / binに/ bashの/ binに/ LS / binに/ CP / binに/ます。mkdir / binに/ MVを/ binに/ RM / binに/ rmdirをは/ usr / binに/ SSHは/ usr / binに/ ID " #1 CHROOTパス CHROOT_PATH = " の/ var / CHROOT 「 依存ライブラリの解析# lib_1用= `LDDの$ cmdlistを| awkの" {$を印刷1。 } ' | grepを" / libに" |分類| uniq` lib_2 = `LDD $に対するcmdlist | awkの' {} 3プリント$。" | grepを" / libに"|ソート| uniq` #コピーコマンドファイル 以下のために、私はにのために$ cmdlist 行う IF [ - !Dを`dirnameが$ {$ i` CHROOT_PATH}];その後、 MKDIR - P`は、$ {} $ i` CHROOT_PATH DIRNAME Fiの CP -a $ I $ I $} {CHROOT_PATH &&エコーを" 私は$ DONE " DONE #複製がライブラリ(i386のであるとしてx86_64版が、それはlib64にある場合、それは、libです)依存している ため J で$がlib_1 行う IFを [ - !D 'は$ CHROOT_PATH j`} $を{DIRNAME] ;次いで MKDIR - P `DIRNAME $ {} $ j` CHROOT_PATH Fiの CP -f J $ $ $ {J} CHROOT_PATH &&エコー" $ JはDONE " DONE ため Kで$ lib_2 行う 場合は [!- D `DIRNAME $ {chroot_path} $ K '];次に MKDIR - P` DIRNAME $ {chroot_path} $ K' Fiの CP -f $ K $ {chroot_path} $ K &&エコー" $ kが行わ" 完了
これまでのところ、我々はテストユーザーログインを使用することができた、とユーザーは/ var / chroot環境の/ home / testディレクトリにロックされている、あなたはまた、このようなLSとしてコマンドを使用することができます。mkdirが、今回はsshコマンドを使用することはできません。
sshのテスト@ 10.60。80.100 のbash - 4.1 $は、mkdirテスト はbash - 4.1 $のlsの テスト はbash - 4.1 $ sshをルート@ 10.60。80.101 あなたドン" トンのが存在は、離れて行きます!
システムが間違って報告できないことを、この手段(可能なタイプ/ ETCP / passwdファイルは、/ etc /グループは、/ etc / shadowが、は/ etc / gshadowの) ユーザデータベースのユーザー名をチェックして、正しいです。
通常のソリューションは、chrootディレクトリに対応するファイルをコピーすることです。
SSHの場合は、/ lib64に/ libnss_ *、chrootディレクトリの下に対応するディレクトリにこれらのファイルをコピーし、コピーすることができます。
ソリューション:
CP / lib64に/ libnss_ * lib64に/。
上記に加えて、我々は、環境プロファイルに起因して、「bashの-4.1 $」は、原因となっているにユーザログインのデフォルト値の後にテストを見ることができ、我々は次のように変更することができます。
CPの/ etc / bashrcに/ VAR / chroot環境の/ etc / CP /home/xxx/.bashrc / VAR / chroot環境/ホーム/テスト/ CP /home/xxx/.bash_profile / VAR / chroot環境/ホーム/テスト/
テスト
データの1 SCP送信
SCP login_union.pyテスト@ 10.60。80.100:/ホーム/ テスト テスト@ 10.10。65.100 " のパスワード: の/ etc / bashrcに:行65 :ID:コマンドが見つからない の/ etc / bashrcに:行65 :ID:コマンドが見つかりません bashの:scpコマンド:コマンドが見つからない 失われた接続を
私たちはインストールしないidコマンドを実行しているので、これの「/ etc / bashrcには:行65を示します。id:コマンドが見つかりません」と、 追加したスクリプトは/ usr / binに/ idはでき
伴う飛び石のscpコマンドにインストールされていない、リモートホストからの送信ヒントデータ「::SCP bashのコマンドが見つからないが 、」 この問題は簡単にすることができ、スクリプトで「は/ usr / binに/ SCP」コマンドを追加し解決します
データの2 SFTP送信
SFTPの使用を可能にするために、所望であれば、単に修正以下
vimのは/ etc / sshを/ sshd_configの サブシステムSFTPの内部 -sftp