为一个用户设置简单的沙盒sftp

我正在为自己build造一个UVPS,只是作为一个简单的操场使用。 用户我需要sftp访问身份validation,但得到启动。 我相信这是由于我的强化,但可能是我只是不知道或不知道的东西。 任何人都可以帮助使用以下信息?

我已经安装了Ubuntu 10.04,并加强了它非常好(为我的非系统pipe理知识基础),但我有问题通过SFTP通过有限的用户设置连接成为唯一的SFTP用户(也可能会用于rsync / git / hg访问,但一次一件事)。 我想这个用户限于它的家 – 所以我把它放在sshd_config。

configuration完全由Sudo用户组成,我们称之为sudouser和一个sftp用户,我们称之为sftpuser

混淆sshd_config文件:

Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin no StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no PasswordAuthentication yes X11Forwarding no X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes UseDNS no AllowUsers sudouser sftpuser Match User sftpuser ChrootDirectory %h ForceCommand /usr/lib/openssh/sftp-server AllowTcpForwarding no 

我已经为sftpuser生成了一个rsa密钥对,将其公开放在〜sftpuser / .ssh /中,而sftpuser在它的.ssh目录中有700个,在公钥上是600。

当尝试通过Netbeans中的sftp连接时,我收到以下消息:

 Host '123.45.678.910' is known and mathces the RSA host key SSH_MSG_NEWKEYS sent SSH_MSG_NEWKEYS received SSH_MSG_SERVICE_REQUEST sent SSH_MSG_SERVICE_ACCEPT received Authentications that can continue: publickey,keyboard-interactive,password Next authentication method: publickey Authentication succeeded (publickey). Caught an exception, leaving main loop due to Connection reset Disconnecting from 123.45.678.910 port 22 QUIT Goodbye 

它也连接cyberduck,但立即断开连接。

任何人可能有兴趣帮助的其他细节。

iptable规则:

 *filter -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT 

杂项硬化

 dpkg-statoverride --update --add root sudoers 4750 /bin/su sudo sysctl -w net.ipv4.conf.all.accept_source_route=0 sudo sysctl -w net.ipv4.conf.default.accept_source_route=0 

 ============================================================ 

EDIT01:对poisonbit和Gilles的回应(因为有重叠)

在日志中,我确实看到这是一个所有权问题。 我的理解(或缺乏)是,当我adduser作为根,从/ etc / skeleton创build的权限和文件应该是正确的…为此 – 但现在我感到困惑。

这一切都是以root身份完成的。

 /usr/sbin/groupadd sudoers /usr/sbin/adduser sudouser mkdir ~sudouser/.ssh mv /tmp/uploadpackage/sudouser.pub ~sudouser/.ssh/authorized_keys chown -R sudouser:sudouser ~sudouser/.ssh chmod 700 ~sudouser/.ssh chmod 600 ~sudouser/.ssh/authorized_keys /usr/sbin/usermod -a -G sudoers sudouser :modified visudo: /usr/sbin/adduser sftpuser mkdir ~sftpuser/.ssh mv /tmp/uploadpackage/sftpuser.pub ~sftpuser/.ssh/authorized_keys chown -R sftpuser:sftpuser ~sftpuser/.ssh chmod 700 ~sftpuser/.ssh chmod 600 ~sftpuser/.ssh/authorized_keys 

检查权限,这是我看到的:

sudouser @ uvps:〜$ sudo ls -l /

 <snip> drwxr-xr-x 4 root root 4096 Apr 10 16:39 home <snip> 

sudouser @ uvps:〜$ ls -l / home

 drwxr-xr-x 4 sftpuser sftpuser 4096 Apr 10 17:03 sftpuser drwxr-xr-x 4 sudouser sudouser 4096 Apr 10 16:58 sudouser 

这些应该由根拥有?

有没有由adduser创build的文件/文件夹,需要做一个基本的用户?

我很抱歉,我有能力作为Linux的基本用户…但是,一旦你“明白了”,大多数情况是合乎逻辑的,我感觉我总是在阅读手册中的细节/怪癖的解释或者在做简单的事情。


 ============================================================ 

EDIT02:相关的/var/log/auth.log条目。

 Apr 11 00:18:22 uvps sshd[8694]: Accepted publickey for sftpuser from 109.87.654.321 port 55555 ssh2 Apr 11 00:18:22 uvps sshd[8694]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory Apr 11 00:18:22 uvps sshd[8694]: pam_unix(sshd:session): session opened for user sftpuser by (uid=0) Apr 11 00:18:22 uvps sshd[8706]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory Apr 11 00:18:22 uvps sshd[8706]: fatal: bad ownership or modes for chroot directory "/home/sftpuser" Apr 11 00:18:22 uvps sshd[8694]: pam_unix(sshd:session): session closed for user sftpuser Apr 11 00:18:22 uvps sshd[8694]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory 

pam消息似乎与Ubuntu Bug#155794有关,并且可能不起作用 – 另一方面, 致命条目 :p


 ============================================================ 

EDIT03:更新。

recursion地更改〜sftpuser的所有者导致validation失败。 通过将〜sftpuser / .ssh(-R)的所有权返回给sftpuser ,sftp客户端可以连接。 新的日志条目是:

 Apr 11 01:02:36 uvps sshd[8745]: Accepted publickey for sftpuser from 109.87.654.321 port 55555 ssh2 Apr 11 01:02:36 uvps sshd[8745]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory Apr 11 01:02:36 uvps sshd[8745]: pam_unix(sshd:session): session opened for user sftpuser by (uid=0) Apr 11 01:02:36 uvps sshd[8756]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory Apr 11 01:02:36 uvps sshd[8756]: subsystem request for sftp Apr 11 01:02:36 uvps sshd[8745]: pam_unix(sshd:session): session closed for user sftpuser Apr 11 01:02:36 uvps sshd[8745]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory 

所以也许 PAM bug(或者ubuntu提供的默认configuration)需要一些爱。 我正在阅读关于PAM的内容,这比我希望进入的只是为了获得一个简单的沙盒sftp操作符。 嗯。


 ============================================================ 

编辑04:合理的确认。

禁用sshd_config文件中的PAM使其工作。 所以在这一点上任何追随这个作为参考的将来应该能够得到这个没有PAM的。 至于PAM,我需要评估为什么我可能不需要它,如果/当我围绕它来确定它是否为我的用途提供任何实质性的好处,我会更新这个。

非常感谢贡献的人们……你们让我明白了这个问题,并明确表示我需要在伐木和分析日志方面做得更好。 坦率地说,使用ubuntudesktop / osx / windows从来没有真的让我需要花费大量时间在日志中。 configuration即使是一个简单的服务器,但是…谁可以相信答案? 大家帮忙


 ============================================================ 

EDIT05:怪癖?

重新启用PAM进行更深入的日志build议和重新加载SSH …一切继续工作,因为它与禁用PAM。 OO

子系统和ForceCommand更改下

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

 Subsystem sftp internal-sftp 

并改变

 ForceCommand /usr/lib/openssh/sftp-server 

 ForceCommand internal-sftp 

身份validation成功(publickey)。 所以它应该是在那之后…检查:

 ChrootDirectory Specifies the pathname of a directory to chroot(2) to after authentication. All components of the pathname must be root- owned directories that are not writable by any other user or group. After the chroot, sshd(8) changes the working directory to the user's home directory. ... 

是拥有root和700(drwx ——)的sftpuser用户(和父path)的家吗?

如果目录的所有者是好的,也可以写perms,那么你可以在/ var / log中searchssh服务器上的更多信息,或者从命令行尝试sftp客户端,添加-v选项,并向我们发送输出。