希望你们能帮忙,看看我在这里做了些什么奇怪的事情,我试图用我设置的用户login,FileZilla显示了我:
Command: open "///@///" Command: Pass: ******** Status: Connected to /// Error: Connection closed by server with exitcode 1 Error: Could not connect to server
所以,我进入了auth.log,我看到这个:
Feb 12 11:08:49 sshd[12056]: Accepted password for /// from /// port /// ssh2 Feb 12 11:08:49 sshd[12056]: pam_unix(sshd:session): session opened for user /// by (uid=0) Feb 12 11:08:50 sshd[12164]: subsystem request for sftp by user /// Feb 12 11:08:50 sshd[12056]: pam_unix(sshd:session): session closed for user ///
这是有问题的用户的passwd条目:
///:x:666:666:///,,,:/chroot:/usr/bin/rssh
如果我尝试自己运行rssh,我得到了Allowed commands: sftp所以它似乎设置正确。 至于我设置为主文件夹的文件夹,它由用户所属的组“sftp”拥有。
显然,我在这里做错了什么,所以我应该尝试接近解决scheme的任何提示,我们感激。
编辑 :如果将/ usr / bin / rssh更改为/ bin / bash,那么它工作正常,但用户仍然可以浏览不理想的整个系统。 基本上,我希望用户直接进入一个目录,在读取文件的同时做任何他们想做的事情,但无法在文件系统中运行,运行其他二进制文件等等。
创build一个名为sftpusers的组。 只有属于这个组的用户才会自动被限制在这个系统的SFTP chroot环境中。
# groupadd sftpusers
假设您想要创build一个只允许在chroot环境中执行SFTP的用户访客用户,并且不应允许执行SSH。
以下命令将创buildguestuser,将此用户分配给sftpusers组,将/ incoming作为主目录,将/ sbin / nologin设置为shell(这将不允许用户ssh和获取shell访问)。
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
validation用户是否正确创build。
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
如果你想修改一个已经存在的用户并且让他成为一个sftp用户并且把他放在chroot sftp监狱里,那么执行以下操作:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
在相关说明中,如果您必须将文件从Windows传输到Linux,请使用此7大SFTP客户端列表中提到的任何一个sftp客户端。
您应该指示sshd使用sftp的internal-sftp(而不是默认的sftp-server)。
修改/ etc / ssh / sshd_config文件并注释掉以下行:
#Subsystem sftp /usr/libexec/openssh/sftp-server
接下来,将以下行添加到/ etc / ssh / sshd_config文件中
Subsystem sftp internal-sftp
它应该是这样的:
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
你只想把某些用户(即属于sftpusers组的用户)放在chroot jail环境中。 在/ etc / ssh / sshd_config的末尾添加以下行
Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
在上面:
由于我们已经将/ sftp指定为ChrootDirectory,所以创build这个目录(相当于你典型的/ home目录)。
# mkdir /sftp
现在,在/ sftp下,为属于sftpusers组的用户创build个人目录。 即只允许执行sftp并将在chroot环境中的用户。
# mkdir /sftp/guestuser
所以,/ sftp / guestuser相当于guest用户。 当guest用户访问系统并执行“cd /”时,他们将只能看到“/ sftp / guestuser”下的目录内容(而不是系统的真实内容)。 这是chroot的力量。
所以,在这个目录/ sftp / guestuser下,创build你喜欢的用户可以看到的任何子目录。 例如,创build一个传入目录,用户可以在其中传输文件。
# mkdir /sftp/guestuser/incoming
为了使chroot正常工作,您需要确保在上面创build的目录中正确设置适当的权限。
将用户权限设置为用户,并将其分组到sftpusers组中,如下所示。
# chown guestuser:sftpusers /sftp/guestuser/incoming
传入目录的权限将如下所示。
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
/ sftp / guestuser目录的权限将如下所示
# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
重新启动sshd:
# service sshd restart
testingchroot sftp环境。 正如你在下面看到的,当gusetuser做sftp,并且做“cd /”时,他们只会看到传入的目录。
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
当guest用户将任何文件从sftp传输到/ incoming目录时,它们将确实位于系统上的/ sftp / guestuser / incoming目录下。