我有一个带有 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
将用户的 shell 设置为/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
如果我尝试使用用户(在 WinSCP 中)通过 SFTP 登录服务器dummyuser
,我会得到以下信息:-
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
答案1
这是一个常见的陷阱:
所有文件夹直到 chroot home 都必须由用户拥有且只能由root
用户写入。
这些文件夹不能由组写入 - 即使该组是root
。
答案2
我在 CentOS 6.5 上找到并成功配置了 sftp: http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
编辑 sshd 配置:
vim /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server (comment out the default with "#")
add:
Subsystem sftp internal-sftp
Match Group sftp-only
ChrootDirectory /var/www/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
退出并保存。
然后:
mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only (take note the GID (Group ID). Here, in my example it's 500)
对于名为“testuser”的新用户(sftp-only 组的成员,GID 为 500):
useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --shell /sbin/nologin testuser
(我使用空的 /etc/skel2,因此 CentOS 默认不复制 .bashrc 等)
mkdir -p /var/www/testuser/home/testuser
chown root:sftp-only /var/www/testuser
chmod 750 /var/www/testuser
chown root:root /var/www/testuser/home
chmod 755 /var/www/testuser/home
chown testuser:sftp-only /var/www/testuser/home/testuser
chmod 770 /var/www/testuser/home/testuser
因此,在此示例中,我将其设置为向管理网站的外部咨询公司提供安全访问权限。创建完所有这些内容后,您可以执行以下操作:
mkdir /var/www/testuser/home/testuser/www.somesite.com
chown testuser:apache /var/www/testuser/home/testuser/www.somesite.com
chmod xxx (permissions to the website as needed, usually 750 so apache would get read access)
人们可以根据需要对这一切进行微调。
希望这有帮助!
Guy Boisvert IngTegration inc. http://www.ingtegration.com