我有一个带有 Digital Ocean 的 CentOs 6.4 版,并希望成功创建 SFTP 用户并将他们监禁到用户自己的 chroot 主目录,但我担心我会把这件事弄得一团糟。
我尝试了很多东西,实在太多了,无法在此处列出,因为大多数可能不正确或没有多大意义,但我觉得应该是正确的过程,我尝试过的是:-
创建一个组sftp
:-
groupadd sftp
创建一个用户并设置他们的主目录:-
useradd -d /var/www/vhosts/domain.com dummyuser
为用户设置密码:-
passwd dummyuser
将用户组更改为“sftp”:-
usermod -g sftp dummyuser
将用户的外壳设置为/bin/false
:-
usermod -s /bin/false dummyuser
sshd_config
编辑( )中的子系统/etc/ssh/
:-
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
将以下内容添加到sshd_config
文件底部:-
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
我确保以下所有目录都是root:root
:-
/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
如果我然后尝试使用用户dummyuser
(在 WinSCP 中)通过 SFTP 登录到服务器,我会得到以下信息:-
Authentication log (see session log for details):
Using username "dummyuser".
Authentication failed.
我想要实现的只是将用户监禁到他们的主目录。我还设置和配置了 vsftpd。用户可以正常登录,但可以访问整个服务器 - 我根本没有设法让监狱工作。
编辑
忘了说,然后我sshd
也重新启动了:-
service sshd restart
当 WinSCP 中产生错误时,他们的帮助页面在这里。
记录结果
/var/log/secure
我将实际的服务器名称替换为server_name
.
Apr 28 14:20:56 server_name sshd[9944]: Accepted password for dummyuser from 80.194.255.4 port 44402 ssh2
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session opened for user dummyuser by (uid=0)
Apr 28 14:20:56 server_name sshd[9946]: fatal: bad ownership or modes for chroot directory component "/var/www/vhosts/"
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session closed for user dummyuser
这是一个常见的陷阱:
直到 chroot 主目录的所有文件夹都必须归用户所有并且只能由
root
用户写入。文件夹不能是组可写的 - 即使组是
root
.我在 CentOS 6.5 上找到并成功配置了 sftp: http ://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
编辑 sshd 配置:
vim /etc/ssh/sshd_config
退出并保存。
然后:
对于名为“testuser”的新用户(GID 为 500 的 sftp-only 组的成员):
(我使用空的 /etc/skel2 所以默认情况下 CentOS 不会复制 .bashrc 等)
所以在这个例子中,我让它安全访问管理网站的外部咨询公司。您可以在创建所有这些之后:
可以根据需要微调所有这些。
希望这有帮助!
Guy Boisvert IngTegration inc. http://www.ingtegration.com