Linux中通过chroot机制为SFTP用户指定访问目录

淘宝广告

有个部门说是有大量的视频文件要存储,至少需要1T空间,赤裸裸地征用我的资源啊,但是又不得不给,只好在我的备份服务器上给他们建个ftp,由他们自己上传。

当然,为了系统安全,一定要把这个用户锁定在其存储目录下,这时候,我就需要用到chroot机制了。

创建 SSH chroot

创建用户所在根目录

mkdir -p /data/staffUpload/

复制包含支持用户会话所必需的文件和目录

ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

使用 mknod 命令创建 /dev 下的文件

mkdir -p /data/staffUpload/dev/
cd /data/staffUpload/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

备注:

  • -m:指定文件权限位
  • c:字符文件
  • 数字:分别是文件指向的主要号和次要号

设置根目录权限

chown root:root /data/staffUpload
chmod 755 /data/staffUpload
ls -ld /data/staffUpload

注意:根目录及根目录下非SFTP用户的文件(夹)的所有者必须为root用户,且对普通用户或用户组不可写

设置 SSH chroot 交互式 shell

创建bin目录并复制bash

mkdir -p /data/staffUpload/bin
cp -v /bin/bash /data/staffUpload/bin/

复制bash需要用到的共享库

ldd /bin/bash
mkdir -p /data/staffUpload/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /data/staffUpload/lib64/

创建并配置 SSH 用户

创建sftp用户组

groupadd sftp

创建SSH用户

useradd -g sftp sftp
passwd sftp

禁止用户ssh登录(如果需要的话)

usermod -s /sbin/nologin sftp

复制新的账号文件

mkdir /data/staffUpload/etc
cp -vf /etc/{passwd,group} /data/staffUpload/etc/

注意:每次向系统添加SSH用户时,都需要将新帐户文件复制到该目录

修改 SSH 配置文件

编辑sshd_config

vi /etc/ssh/sshd_config

在尾部适当位置添加如下参数

Match User sftp
ChrootDirectory /data/staffUpload/sftp/

保存并退出,重启sshd

systemctl restart sshd

配置用户环境

为SSH用户创建一个主目录

mkdir -p /data/staffUpload/sftp/sftp-test
chown -R sftp:sftp /data/staffUpload/sftp/sftp-test
chmod -R 700 /data/staffUpload/sftp/sftp-test

添加用户命令

cp -v /bin/ls /data/staffUpload/bin/
cp -v /bin/date /data/staffUpload/bin/
cp -v /bin/mkdir /data/staffUpload/bin/

检查以上命令的共享库并将它们移到 chroot 的库目录中:

ldd /bin/ls
cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /data/staffUpload/lib64/

强制用户sftp登录

在/etc/ssh/sshd_config用户Match位置添加如下参数

ForceCommand internal-sftp

systemctl restart sshd

测试 SSH chroot 是否成功

因为我禁止用户ssh登录,所以只能通过FTP软件登录来测试,登录后如果不能进入其他文件夹则表示设置成功。如果未禁止ssh登录,用户也无法跳出当前目录,而且只能执行 bash 以及它内置的命令(如pwd、history、echo等)。

赞 (0) 打赏

滔滔不绝 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏