我正在为一些朋友和小客户建立一个很小的托管公司,没什么大不了的。

我想让我的“客户”有权管理服务器上的文件。我讨厌FTP,因为它不安全,而且我认为它已经过时了。 (我知道,我知道,SFTP使用的是SSH)。但是我只是想知道是否有可能?

所以我不必在服务器上安装FTP服务,一切都会很棒!

#1 楼

从4.9版本开始,OpenSSH(在centos 5.x中不可用,但ChrootDirectory功能已向后移植)具有internal-sftp子系统: >
Subsystem sftp internal-sftp


将您的用户添加到sftponly组。您必须将用户的主目录更改为/,因为chroot和/home/user应该属于root。我还将/bin/false设置为用户的shell。

评论


哇!太棒了!我将对此进行测试,然后返回此处进行验证。非常感谢!

–汤米B.
2012年1月28日在20:48

为ChrootDirectory事物+1!

–凯尔
2012年1月30日18:30

完成此操作后,我的sftponly用户无法通过ssh访问,并且能够通过sftp连接。但是,它根本看不到任何文件!尽管这些文件对此用户具有权限。 :-(

–埃米利奥·尼古拉斯(EmilioNicolás)
15年1月15日在10:17

如果您要执行此操作,并在sshd_config中找到已经存在“ / usr / lib / openssh / sftp-server”的条目,请在此处检查:serverfault.com/questions/660160/…-internal-sftp是“较新的” ,变得更好,更轻松”

– Xosofox
15年7月16日在10:57

主目录不仅应由root拥有,还应具有755权限(没有写访问权限),这使此chroot附加收据在大多数情况下不可用。

– Victor Gavro
20 Mar 14 '22在12:12

#2 楼

有一个外壳可以轻松地执行此操作。它也可以chroot。

评论


如果您同时需要SFTP用户和SSH用户,这将非常有用。您只需将/ etc / passwd中的shell替换为仅限于SFTP的shell。

– Dragos
2012年2月23日在8:12



#3 楼

Checkout rssh是一个伪造的外壳,它允许sftp但拒绝ssh

有关RSSH的更多信息

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

您可以配置rssh允许/拒绝sft,scp等不同行为。

评论


真好这是最简单的配置方法,完全不需要接触sshd_config。只需在passwd文件中更改外壳并完成即可。

–桃文
18年8月22日在7:47

他们说rssh现在似乎已经过时了(debian buster中已经没有此软件包了),他们说是急于代替它。我没有尝试过,我正在使用internal-sftp转到openssh。

–user3132194
20年4月1日在9:59

#4 楼

您可以修改/ etc / passwd并为该用户提供伪造的外壳,以使他不能使用ssh。

评论


你测试了吗?

–splattne
2012年1月29日在8:49

当我尝试将shell设置为/ bin / false时,ssh或sftp都不起作用

–布拉德·梅斯(Brad Mace)
13年3月14日在22:34

/ bin / false禁止任何形式的登录,这不是正确的方法。 Rob Wouters的公认答案是如何限制用户仅使用SFTP,而不是更改外壳。如果您确实想更改外壳,则@Stone的连接将是一个好主意。

– jwbensley
2014年8月7日10:46



因此,假设/ bin / bash是不可接受的,并且/ bin / false或/ sbin / nologin拒绝访问,应该使用什么shell?

–普特尼克
17年11月20日在23:07

#5 楼

如上所述,我使用将用户外壳指定为/ bin / false的方法。但是,必须确保/ bin / shell在/ etc / shells中。然后它可以正常工作ssh = no ftp = ok。

我也使用vsftpd并将其添加到
/etc/vsftpd/vsftpd.conf
,以便ftp-ers不能看到自己的日期。

这些简单更改的优点是每个用户的ssh config都不会令人讨厌。

#6 楼

不要忘记查找行UsePAM yes并对其进行注释:由于不需要PAM的高级功能,因此很好。

评论


注释掉您不理解的行通常是一个坏主意。如果您不知道PAM的用途,只需将其设置为默认值即可。

–马修·布什(Matthew Bush)
20-11-10在5:22

#7 楼

如果您安装了scponlyrssh,将ssh配置为仅对某些选定用户启用sftp是一个好主意,并且可以正常工作。

rssh可以正常工作,除非您需要配置jail。尝试遵循CHROOT手册提供的说明是很疯狂的,导致在“每个用户监狱”下方“复制”系统可执行文件和库的大部分,包括rssh shell本身。
这是一种浪费空间的方法。

scponly需要对配置有深刻的了解,从而导致在监狱设置的情况下始终存在登录拒绝问题。 ,SSL / TLS对安全交易和登录的支持是使用“老旧但可以正常工作的” VSFTPD,它可以快速干净地安装并根据需要提供所有可配置性,最后但并非最不重要的是:它可以工作! />毛里齐奥。

#8 楼

不幸的是,所有答案都极具误导性:请执行以下操作:


首先创建sftp用户和组sftp
创建单独的目录作为SFTP文件的根目录:sudo mkdir -p /home/sftpdir
具有经过测试的sshd_config文件,出于安全原因,该文件允许通过端口22进行SSH,但也可以在随机端口上进行SFTP。



重新启动并检查sshd服务的状态

sudo服务sshd重新启动

服务sshd状态


创建Shell文件。添加执行以回显通知消息

sudo touch / bin / sftponly
echo -e'#!/ bin / sh \ necho“此帐户仅限于SFTP访问。 sudo tee -a / bin / sftponly


授予执行权限并追加到shell文件

sudo chmod a + x / bin / sftponly
echo “ / bin / sftponly” | sudo tee -a / etc / shells

最终测试,您应该无法连接。

使用带有SSH密钥和基本详细信息的SFTP客户端的模板:

sftp -v -oPort = $ RANDOM_PORT -i〜/ .ssh / $ SSH_KEY.pem sftpuser @ $ HOST