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

데비안 시스템에서 내가 설정하는 방법(프로그래밍 수업 교육)은 다음과 같습니다:

먼저 사용자를 생성합니다. 여기에 내가 사용하는 스크립트가 있습니다. 사용자를 추가하고, 홈 디렉토리를 생성하고, 죄수 유형 그룹에 넣고, 일부 기본 파일을 복사하고, 권한과 소유권을 설정하고, 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 디렉터리에서 콘텐츠를 추가/편집/삭제할 수 있어야 합니다. 공유 디렉터리를 추가하려면 디렉터리를 만들고 소유권을 변경해야 합니다.

관련 정보