永发信息网

如何限制用户使用 SSH 登入系统

答案:2  悬赏:0  手机版
解决时间 2021-02-13 09:01
  • 提问者网友:富士山上尢
  • 2021-02-12 08:55
如何限制用户使用 SSH 登入系统
最佳答案
  • 五星知识达人网友:廢物販賣機
  • 2021-02-12 10:09
在linux中出于安全的需要,我们会禁止某些用户SSH登陆系统进行操作。我这里以centos操作系统为例记录下如何进行处理。
1、打开sshd的配置文件
vi /etc/ssh/sshd_config2、修改该配置文件,增加或修改如下行
# 禁止用户user1登陆,多个空格分隔DenyUsers user1 # 禁止用户组group1的所有用户登录,多个空格分隔DenyGroups group13、保存配置后,重启sshd
/etc/rc.d/init.d/sshd restart 完成上面的配置后,就可以禁止用户或用户组的用户进行登录了,第2步中的两个是可以只填一个的,可以根据需要进行调整。配置完毕后,在其他linux机器上使用如下命令进行测试:
# 使用ssh测试[root@ServerA ~]# ssh user1@192.168.1.168user1@192.168.1.168's password: Permission denied, please try again. # 使用sftp测试[root@ServerA ~]# sftp user1@192.168.1.168user1@192.168.1.168's password: Permission denied, please try again. 可以看到,确实被系统禁止了,从而也就完成了我们想要的控制了。但这个有一个缺陷是,无法禁止只允许sftp而不允许ssh,如果要这样做,估计只能够单独搭建ftp服务器,比如vsftp,后续再考虑这个。
全部回答
  • 1楼网友:玩家
  • 2021-02-12 11:35
高级ssh技巧: 在这篇文章中我将为你展示一些简单的技巧,帮助你提高你的ssh服务的安全。ssh服务器配置文件是/etc/ssh/sshd_conf。在你对它进行每一次改动后都需要重新启动ssh服务,以便让改动生效。 1、修改ssh监听端口 默认情况下,ssh监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有ssh服务,将ssh端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。 打开/etc/ssh/sshd_config文件并查找下面这样的行: port 22 修改端口号并重新启动ssh服务: /etc/init.d/ssh restart 2、仅允许ssh协议版本2 有两个ssh协议版本,仅使用ssh协议版本2会更安全,ssh协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面这样的行: protocol 2,1 修改为 protocol 2 3、仅允许特定的用户通过ssh登陆 你不一个允许root用户通过ssh登陆,因为这是一个巨大的不必要的安全风险,如果一个攻击者获得root权限登陆到你的系统,相对他获得一个普通用户权限能造成更大的破坏,配置ssh服务器不允许root用户通过ssh登陆,查找下面这样的行: permitrootlogin yes 将yes修改为no,然后重新启动服务。现在,如果你想使用特权用户,你可以先以其他用户登陆,然后再转换到root。 创建一个没有实际权限的虚拟用户是一个明智的选择,用这个用户登陆ssh,即使这个用户遭到破解也不会引起什么破坏,当创建这个用户时,确保它属于wheel组,因为那样你才能切换到特权用户。 如果你想让一列用户都能通过ssh登陆,你可以在sshd_config文件中指定它们,例如:我想让用户anze、dasa、kimy能通过ssh登陆,在sshd_config文件的末尾我添加下面这样一行: allowusers anze dasa kimy 4、创建一个自定义ssh banner 如果你想让任何连接到你ssh服务的用户看到一条特殊的消息,你可以创建一个自定义ssh banner,只需要创建一个文本文件(我的是/etc/ssh-banner.txt),然后输入你想的任何文本消息,如: *this is a private ssh service. you are not supposed to be here.* *please leave immediately. * 编辑好后,保存这个文件,在sshd_config中查找下面这样一行: #banner /etc/issue.net 取消掉注释【将#去掉】,然后将路径修改为你自定义的ssh banner文本文件。 5、使用dsa公钥认证 代替使用用户名和密码对ssh进行认证,你可以使用dsa公钥进行认证,注意你既可以使用登陆名,也可以使用dsa公钥进行认证,使用dsa公钥认证可以预防你的系统遭受字典攻击,因为你不需要用登陆名和密码登陆ssh服务,而是需要一对dsa密钥,一个公钥和一个私钥,在你本地机器上保存私钥,将公钥放在服务器上。当你发起一个ssh登陆会话时,服务器检查密钥,如果它们匹配的话,你就可以直接进入shell,如果它们不匹配,你的连接将被自动断开。 在本例中的私人计算机叫‘工作站1’,服务器叫‘服务器1’。在两个机器上我有相同的home目录,如果服务器和客户端上的home目录不同将不能工作,实现,你需要在你的私人计算机上创建一对密钥,命令:~$ ssh-keygen -t dsa,它将要求你为私钥输入一个密语,但是你可以保留为空,因为这不是一个推荐的做法。密钥对创建好了:你的私钥在~/.ssh/id_dsa,你的公钥在.ssh/id_dsa.pub。 接下来,拷贝~/.ssh/id_dsa.pub中的内容到‘服务器1’的~/.ssh/authorized_keys文件中,~/.ssh/id_dsa.pub的内容看起来象下面这样: ~$ cat .ssh/id_dsa.pub ssh-dss aaaab3nzac1kc3maaacbam7k7vkk5c90rsvohihdurovybngr7yeqtrdffcuvwmwc jydusngaic0ozkbwlnmdu+y6zojnpottpnpex0kroh79max8nzbbd4auv91lbg7z604ztdr lzvsfhci/fm4yrohge0fo7fv4lgcuilqa55+qp9vvco7qybdipdunv0laaaafqc/9iljqii7n m7akxibpdrqwknypqaaaieaq+ojc8+oyioexcw8qcb6ldibxjv0ut0rrutfvo1bn39cawz5pu fe7eplmr6t7ljl7jdkfea5de0k3wds 9/rd1tj6ufqsrc2qpzbn0p0j89lpijdmmsisqqako4m2fo2vjcgcwvsghiod0amrc7ngie6bta nihbbqri10rgl5gh4aaacajj1/rv7iktoyuvyqv3baz3jhoaf+h/dudtx+wutujpl+tfdf61rb woqraruhfrf0tu/rx4oozzadlqovafqrdnu/no0zge+wvxdd4ol1ymulrkqp8vc20ws5mlvp 34fst1amc0ynebp28eqi0xpefud0ixzztxthvlzia1/nuzy= anze@station1.example.com 如果文件~/.ssh/authorized_keys已经存在,请将上面的内容附加在该文件的后面。剩下的只是给该文件设置正确的权限了: ~$ chmod 600 ~/.ssh/authorized_keys 现在,配置sshd_config文件使用dsa密钥认证,确保你将下面三行前的注释去掉了: rsaauthentication yes pubkeyauthentication yes authorizedkeysfile %h/.ssh/authorized_keys 重新启动服务,如果你的配置没有错误,现在你就可以ssh到你的服务器,而且无需任何交互动作(如输入用户名和密码)就直接进入你的home目录了。 如果你只想使用dsa认证登陆,确保你在sshd_config中取消掉注释并修改passwordauthentication这一行,将yes改为no: passwordauthentication no 任何在服务器上没有公钥的人试图连接到你的ssh服务,它就被拒绝,给它显示如下一个拒绝提示信息: permission denied (publickey). 6、使用tcp wrappers仅允许指定的主机连接 如果你想在你的网络上只允许特定的主机才能连接到你的ssh服务,但又不想使用或弄乱你的iptables配置,那这个方法非常有用,你可以使用 tcp wrappers。在这个例子中对sshd进行tcp包裹,我将创建一条规则允许本地子网192.168.1.0/24和远程 193.180.177.13的自己连接到我的ssh服务。 默认情况下,tcp wrappers首先在/etc/hosts.deny中查找看主机是否允许访问该服务,接下来,tcp wrappers查找/etc/hosts.allow看是否有规则允许该主机服务指定的服务,我将在/etc/hosts.deny中创建一个规则,如下: sshd: all 这意味着默认情况下所有主机被拒绝访问ssh服务,这是应该的,否则所有主机都能访问ssh服务,因为tcp wrappers首先在hosts.deny中查找,如果这里没有关于阻止ssh服务的规则,任何主机都可以连接。 接下来,在/etc/hosts.allow中创建一个规则允许指定的主机使用ssh服务: sshd: 192.168.1 193.180.177.13 现在,只有来自192.168.1.0/24和193.180.177.13的主机能够访问ssh服务了,其他主机在连接时还没有到登陆提示符时就被断开了,并收到错误提示,如下: ssh_exchange_identification: connection closed by remote host 7、使用iptables允许特定的主机连接 作为tcp wrappers的一个代替品,你可以使用iptables来限制ssh访问(但可以同时使用这个两个的),这里有一个简单的例子,指出了如何允许一个特定的主机连接到你的ssh服务: ~# iptables -a input -p tcp -m state --state new --source 193.180.177.13 --dport 22 -j accept 并确保没有其他的主机可以访问ssh服务: ~# iptables -a input -p tcp --dport 22 -j drop 保存你的新规则,你的任务就完成了,规则是立即生效的 8、ssh时间锁定技巧 你可以使用不同的iptables参数来限制到ssh服务的连接,让其在一个特定的时间范围内可以连接,其他时间不能连接。你可以在下面的任何例子中使用/second、/minute、/hour或/day开关。 第一个例子,如果一个用户输入了错误的密码,锁定一分钟内不允许在访问ssh服务,这样每个用户在一分钟内只能尝试一次登陆: ~# iptables -a input -p tcp -m state --syn --state new --dport 22 -m limit --limit 1/minute --limit-burst 1 -j accept ~# iptables -a input -p tcp -m state --syn --state new --dport 22 -j drop 第二个例子,设置iptables只允许主机193.180.177.13连接到ssh服务,在尝试三次失败登陆后,iptables允许该主机每分钟尝试一次登陆: ~# iptables -a input -p tcp -s 193.180.177.13 -m state --syn --state new --dport 22 -m limit --limit 1/minute --limit-burst 1 -j accept ~# iptables -a input -p tcp -s 193.180.177.13 -m state --syn --state new --dport 22 -j drop
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯