编辑

编辑

我有一个带有 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

相关内容