在 CentOS 上创建 SFTP 用户并监禁到 chroot - 用户身份验证错误

zig*_*cko 18 sftp centos6.4

我有一个带有 Digital Ocean 的 CentOs 6.4 版,我想成功创建 SFTP 用户并将它们囚禁到用户自己的 chroot 主目录中,但我担心我会把它弄得一团糟。

我已经尝试了很多事情,太多了,无法在这里列出,因为大多数可能不正确或没有多大意义,但我觉得应该是正确的过程,我尝试过的是:-

创建一个组sftp:-

groupadd sftp
Run Code Online (Sandbox Code Playgroud)

创建一个用户并设置他们的主目录:-

useradd -d /var/www/vhosts/domain.com dummyuser
Run Code Online (Sandbox Code Playgroud)

为用户设置密码:-

passwd dummyuser
Run Code Online (Sandbox Code Playgroud)

将用户组更改为“sftp”:-

usermod -g sftp dummyuser
Run Code Online (Sandbox Code Playgroud)

将用户的外壳设置为/bin/false:-

usermod -s /bin/false dummyuser
Run Code Online (Sandbox Code Playgroud)

sshd_config( /etc/ssh/) 中编辑子系统:-

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到sshd_config文件底部:-

Match group sftp
    X11Forwarding no
    ChrootDirectory %h
    AllowTcpForwarding no
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

我确保以下所有目录都是root:root:-

/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试通过 SFTP 与用户dummyuser(在 WinSCP 中)登录到服务器,我会得到以下信息:-

Authentication log (see session log for details):
Using username "dummyuser".

Authentication failed.
Run Code Online (Sandbox Code Playgroud)

我想要实现的只是将用户监禁到他们的主目录。我还设置并配置了 vsftpd。用户可以正常登录,但可以访问整个服务器 - 我根本没有设法让监狱工作。

编辑

忘了提,然后我sshd也重新启动了:-

service sshd restart
Run Code Online (Sandbox Code Playgroud)

当 WinSCP 中产生错误时,他们的帮助页面在这里

记录结果

/var/log/secure
Run Code Online (Sandbox Code Playgroud)

我用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
Run Code Online (Sandbox Code Playgroud)

fak*_*ker 15

这是一个常见的陷阱:
直到 chroot 主目录的所有文件夹都必须归root用户所有并且只能由用户写入。
文件夹不能是组可写的 - 即使组是root.

  • 我刚刚学会了一个方便检查的技巧:`namei -l /var/www/vhosts` (4认同)

Guy*_*ert 5

我在 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
Run Code Online (Sandbox Code Playgroud)

退出并保存。

然后:

mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only  (take note the GID (Group ID).  Here, in my example it's 500)
Run Code Online (Sandbox Code Playgroud)

对于名为“testuser”的新用户(GID 500 的 sftp-only 组成员):

useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --shell /sbin/nologin testuser
Run Code Online (Sandbox Code Playgroud)

(我使用空的 /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
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我让它安全地访问管理网站的外部咨询公司。创建完所有这些后,您可以执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

可以根据需要对所有这些进行微调。

希望这有帮助!

Guy Boisvert IngTegration inc. http://www.ingtegration.com