在 Linux 中创建一个只能访问特定文件夹的用户

在 Linux 中创建一个只能访问特定文件夹的用户

我需要使用 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

相关内容