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 디렉터리에서 콘텐츠를 추가/편집/삭제할 수 있어야 합니다. 공유 디렉터리를 추가하려면 디렉터리를 만들고 소유권을 변경해야 합니다.