RHEL 6.5でファイルへのchrooted SFTPアクセスを有効にする方法は?

RHEL 6.5でファイルへのchrooted SFTPアクセスを有効にする方法は?

RHEL 6.5サーバーへのchrooted SFTPアクセスを設定しようとしています。グループ内のすべてのユーザーと一致するようにsshd_configファイルを編集し、次のようにchrootする標準的な手順を実行しました。

Match group prisoners
    ChrootDirectory /home/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

と設定

Subsystem sftp internal-sftp

ユーザー "test" には次のディレクトリがあります。

[root@ip-10-0-1-158 ~]# ls -l /home/test
total 4
drwxrwxr-x. 3 root prisoners 4096 Jul 20 17:55 SFTP

(ディレクトリの所有権とアクセス権も再帰的に設定しました。)

そして正しいグループで:

[root@ip-10-0-1-158 ~]# sudo -u test id
uid=501(test) gid=498(prisoners) groups=498(prisoners) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

テストユーザーとしてsshセッションを介して/ home / test / SFTPディレクトリでファイルを編集または作成しようとすると、すべてが期待どおりに機能します。 WinSCP経由でログインすると正しく認証され、/home/testディレクトリの内容を表示できますが、変更することはできません。ただし、/home/test/SFTPディレクトリにあるファイルを表示、編集、または作成することはできません。

WinSCPエラーメッセージ:

Error listing directory '/SFTP'.
Permission denied.
Error code: 3
Error message from server: Permission denied

どんな助けでも大変感謝します。

注:RHEL 7で同様のsftp chrootアクセスを正常に確立しましたが、ユーザー権限がSFTPを介して機能しないような理由を理解するのが困難です。

答え1

注:RHEL 7で同様のsftp chrootアクセスを正常に確立しましたが、ユーザー権限がSFTPを介して機能しないような理由を理解するのが困難です。

SELinux ラベルが間違っている可能性があります。正しいことを確認し、次を使用して修正してください。

# restorecon -RF /

答え2

Debianシステムで私が設定する方法(プログラミングクラスのトレーニング)は次のとおりです。

まずユーザーを作成します。ここに私が使用するスクリプトがあります。ユーザーを追加し、ホームディレクトリを作成し、囚人タイプグループに入れ、いくつかの基本ファイルをコピーし、権限と所有権を設定し、SQLデータベースを作成するなどのタスクを実行します。あまりにも多く、最初の数行しか使用できません。

#!/bin/bash

# $1 is username to create
# call as   root@darkstar:~/ # ./script.sh username

# add the user and put them in the jailusers group, set their home 
# directory so it is at http://www.example.com/username 
# and set their shell to /bin/false so they can't ssh in
useradd -g jailusers -d /var/jailweb/www-example.com/$1 -s /bin/false $1
mkdir -p /var/jailweb/www-example.com/$1

# i copy some template files in for them - this is a programming class
cp /root/jailtemplate-filez/*php /var/jailweb/www-example.com/$1

# fix the ownership of them - the /var/jailweb/www-example.com has been
# chmodded as g+s so the webserver will be able to read all the files
# note that this is NOT the ideal way to deal with this, but was needed
# for my purposes
chown  $1.www-data /var/jailweb/www-example.com/$1
chown  $1.www-data /var/jailweb/www-example.com/$1/index.php
chmod -R 750 /var/jailweb/www-example.com/$1

# put their name on their front page
sed -i s/STUDENT/$1/g /var/jailweb/www-example.com/$1/index.php

# generate a "random" password for sftp login
salt="oh god there has to be a better way!"
lpass=`echo $1 $salt | md5sum | cut -c 5-15`

# generate a "different" "random" password
# for them to use for mysql access
mpass=`echo $1 $salt | md5sum | cut -c 13-22`
# and set it for the userlogin programmatically
echo $1:$lpass | chpasswd

# create a sql scritp file to create their mysql accounts and
# create a database for them, grant rights, etc
cat webusers-mysql_template | sed s/USERNAME/$1/g | sed s/PASS/$mpass/g >> webusersusers.sql

# put their mysql info into a php file in their web directory
cat dbinfo.php-template | sed s/USERNAME/$1/g | sed s/PASSWORD/$mpass/g > /var/jailweb/www-example.com/$1/dbinfo.php
# make sure the webserver can read it... this all SHOULD be setup for suexec
# and having each user in their own primary group... then the sticky bit, etc
# wouldn't be needed, but I'm lazy
chown $1.www-data /var/jailweb/www-example.com/$1/dbinfo.php
chmod 440 /var/jailweb/www-example.com/$1/*.php

# if there needs to be a directory the webserver can
# write to, uncomment these
#mkdir -p /var/jailweb/www-example.com/$1/writeable
#chown $1.www-data /var/jailweb/www-example.com/$1/writeable
#chmod 770 /var/jailweb/www-example.com/$1/writeable

次に、/etc/ssh/sshd_configプライマリSFTPプロバイダのコメントを外し、内部サブシステムを追加する必要があります。

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

最後に、/etc/ssh/sshd_configグループの試合を追加してください。私は少し異なるデフォルトを設定しましたumask

Match Group jailusers
        ChrootDirectory /var/jailweb
        ForceCommand internal-sftp -u 0027

私はホームディレクトリを含むディレクトリを指していることに注意してください/chroot

SSHデーモンを再起動するだけです。ユーザーは、/ usernameディレクトリからコンテンツを追加/編集/削除できる必要があります。共有ディレクトリを追加するには、ディレクトリを作成して所有権を変更する必要があります。

関連情報