当前位置: 首页 > 科技观察

如何在Linux中限制SSH用户对指定目录的访问

时间:2023-03-19 20:29:19 科技观察

将SSH用户会话限制在特定目录,尤其是在Web服务器上,这样做有多种原因,但最明显的是为了系统安全。为了将SSH用户锁定在某个目录下,我们可以使用chroot机制。在Linux等类Unix系统中更改根目录(chroot)是一种将特定用户操作与其他Linux系统解耦的手段;使用称为chrootedjail的新根目录更改当前运行的用户进程及其子进程显然是根目录。在本教程中,我们将向您展示如何在Linux中限制SSH用户访问指定目录。请注意,我们将以root用户身份运行所有命令,如果您以普通用户身份登录服务器,请使用sudo命令。第一步:创建SSHchrootjail1.使用mkdir命令开始创建chrootjail:#mkdir-p/home/test2.接下来根据sshd_config手册找到需要的文件。ChrootDirectory选项指定在身份验证后要chroot到的目录。该目录必须包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要一个shell(通常是sh)和基本的/dev节点,例如null、zero、stdin、stdout、stderr和tty设备:#ls-l/dev/{null,zero,stdin,stdout,stderr,random,tty}列出所需的文件3.现在,使用mknod命令在/dev下创建文件。在下面的命令中,-m标志用于指定文件权限位,c表示字符文件,这两个数字是文件指向的主次编号。#mkdir-p/home/test/dev/#cd/home/test/dev/#mknod-m666nullc13#mknod-m666ttyc50#mknod-m666zeroc15#mknod-m666randomc18创建/dev和需要的文件4.在此之后,在Setappropriatechroot监狱中的权限。请注意,chroot监狱及其子目录和子文件必须由root用户拥有,普通用户或用户组不可写:#chownroot:root/home/test#chmod0755/home/test#ls-ld/home/testsetting目录权限第2步:为SSHchrootjail设置交互式shell5.首先,创建bin目录并将/bin/bash复制到bin中:#mkdir-p/home/test/bin#cp-v/bin/bash/home/test/bin/将文件复制到bin目录6.现在,确定bash所需的共享库并将它们复制到lib64,如下所示:#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/拷贝共享库文件第三步:创建并配置SSH用户7.现在,使用useradd命令创建SSH用户并设置安全密码:#useraddtecmint#passwdtecmint8。创建一个chrootjail通用配置目录/home/test/etc并将更新的帐户文件(/etc/passwd和/etc/group)复制到该目录中:#mkdir/home/test/etc#cp-vf/etc/{passwd,group}/home/test/etc/复制密码文件注意:每次给系统增加SSH用户,需要将更新后的账号文件复制到/home/test/etc目录下。第4步:配置SSH以使用chrootjail9.现在打开sshd_config文件。#vi/etc/ssh/sshd_config在此文件中添加或修改以下行。#定义要使用chroot监狱的用户MatchUsertecmint#指定chroot监狱ChrootDirectory/home/test配置SSHchroot监狱保存文件退出,重启sshd服务:#systemctlrestartsshd或#servicesshdrestart第五步:测试SSH的chroot监狱10.这次,测试chrootjail的设置是否如愿成功:#sshtecmint@192.168.0.10-bash-4.1$ls-bash-4.1$date-bash-4.1$uname测试SSH用户chrootjail从上面的截图我们可以看到SSH用户被锁定在chroot监狱中,不能使用任何外部命令,如(ls、date、uname等)。用户只能执行bash及其内置命令(如:pwd、history、echo等):#sshtecmint@192.168.0.10-bash-4.1$pwd-bash-4.1$echo"Tecmint-FastestGrowingLinuxSite"-bash-4.1$historySSH内置命令第六步:创建用户家目录,添加Linux命令11.从前面的步骤可以看出,用户被锁定在根目录下,我们可以为SSH创建一个家目录用户(以及所有未来的用户这样做):#mkdir-p/home/test/home/tecmint#chown-Rtecmint:tecmint/home/test/home/tecmint#chmod-R0700/home/test/home/tecmint创建SSH用户家目录12.接下来在bin目录下安装几个用户命令,比如ls,date,mkdir:#cp-v/bin/ls/home/test/bin/#cp-v/bin/date/home/test/bin/#cp-v/bin/mkdir/home/test/bin/给SSH用户13添加命令,接下来查看上面命令的共享库,将它们移动到chrootjail的库目录下:#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/复制共享库第7步:测试sftpwithchrootjail14.***用sftp做一个测试;测试你之前安装的命令是否可用。在/etc/ssh/sshd_config中添加以下行:#Enablesftp'schrootjailForceCommandinternal-sftp保存并退出文件。接下来重启sshd服务:#systemctlrestartsshd或#servicesshdrestart15,现在使用ssh测试,你会得到以下错误:#sshtecmint@192.168.0.10TestSSHChrootJailTryusingsftp:#sftptecmint@192.168.0.10TestsFTPSSHusersuggestion阅读:使用chrootjail将sftp用户限制在主目录中。就是这样!在文中,我们向您展示了如何在Linux中将ssh用户限制在指定目录(chroot监狱)。请在评论框中告诉我们您的想法。关于作者:AaronKili是Linux和F.O.S.S爱好者,即将成为Linux系统管理员、Web开发人员和当前的TecMint内容创建者,他喜欢使用计算机工作并相信分享知识。