我需要使用 putty 在 Linux 中创建一个只能访问特定文件夹的用户。我使用 useradd 创建了一个用户,但该用户可以访问主帐户中的所有文件夹。
答案1
您需要设置 ssh chroot jail。
看这操作说明。
作为@罗密欧问,我在这里包含了链接页面中的必要部分。
为用户创建目录:
# mkdir -p /home/test
该目录必须包含支持用户会话所需的文件和目录,这至少需要一个 shell(通常是 sh)和基本 /dev 节点(例如 null、zero、stdin、stdout、stderr 和 tty 设备):
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
从列表中了解两个数字 - 有主数字和次数字。使用 mknod 命令创建 /dev(执行不是下面的复制粘贴命令(仅作为示例,请使用正确的数字):
# mkdir -p /home/test/dev/
# cd /home/test/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`
设置权限:
# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
创建 bin 目录并将 /bin/bash 文件复制到其中:
# mkdir -p /home/test/bin
# cp /bin/bash /home/test/bin/
确定 bash 所需的共享库,并复制他们(做不是复制粘贴下面的命令(仅作为示例)到 lib 目录中:
# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
使用 useradd 命令创建 SSH 用户并为该用户设置安全密码:
# useradd tecmint
# passwd tecmint
创建 chroot jail 常规配置目录 /home/test/etc,并将更新的帐户文件(/etc/passwd 和 /etc/group)复制到此目录中:
# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
打开 sshd_config 文件并在文件中添加以下行。
# vi /etc/ssh/sshd_config
#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
保存文件并退出,然后重新启动 SSHD:
# systemctl restart sshd
测试 chroot jail 设置是否按预期工作。现在用户只能执行 bash 及其内置命令,例如(pwd、history、echo 等)。
# ssh [email protected]
为 SSH 用户创建主目录:
# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
在bin目录中安装ls、date、mkdir等几个用户命令:
# cp /bin/ls /home/test/bin/
# cp /bin/date /home/test/bin/
# cp /bin/mkdir /home/test/bin/
检查上述命令的共享库并将其移动到 chrooted jail 库目录中:
# 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} /home/test/lib64/
这就是结局。但是如果您只需要允许 sftp 连接,则在 /etc/ssh/sshd_config 文件中添加以下行:
#Enable sftp to chrooted jail
ForceCommand internal-sftp
保存文件并退出。然后重新启动 SSHD 服务:
# systemctl restart sshd