以下就针对SSH方面讨论一下。假设有人特别关注Linux环境的安全性,第一就从login方面来进行讨论
1:Linux启动或禁止SSH root用户的登录
2:Linux限制SSH用户
事实上这些东西就是改动一个系统的配置文件
- [root@rhsde ~]# vi /etc/ssh/sshd_config
我们能够查看
- #PermitRootLogin yes
把前面的#号去掉,yes改动为no就可以
yes 就是能够使用SSH方式的root登录
no就是禁止使用SSH方式的root登录
- login as: root
- root@192.168.220.165's password:
- Access denied
- root@192.168.220.165's password:
另外假设须要限制SSH方式的用户登录 改动例如以下參数
- AllowUsers arcsde
arcsde是我操作系统的用户,假设没实用户能够手动加入AllowUsers
这种话,仅仅能arcsde登录了
其它用户登录不了了(oracle)
- login as: oracle
- oracle@192.168.220.165's password:
- Access denied
- oracle@192.168.220.165's password:
以上改动完配置文件,必须又一次启动SSH服务才干生效
- [root@rhsde ~]# /etc/init.d/sshd restart
- Stopping sshd: [ OK ]
- Starting sshd: [ OK ]
可能会有人会问到假设我设置了,每次都是Access denied,有没有一些能够进行信息的提示。这肯定能够啊
我们能够改动例如以下文件
- [root@rhsde ~]# vi /etc/issue.net
然后加入例如以下信息
- ###############################################################
- # Welcome to redhatserver #
- # All connections are monitored and recorded #
- # Disconnect IMMEDIATELY if you are not an authorized user! #
- # Please tel 400-819-2881
- ###############################################################
我们仍然须要改动sshd_config里面的參数
- Banner /etc/issue.net
后面相应的就是相关文件的路径。重新启动服务就可以
然后我们測试一下
- login as: root
- Red Hat Enterprise Linux Server release 5.5 (Tikanga)
- Kernel \r on an \m
- ###############################################################
- # Welcome to redhatserver #
- # All connections are monitored and recorded
- #
- # Disconnect IMMEDIATELY if you are not an authorized user! #
- #Please tel 400-819-2881
- ###############################################################
- root@192.168.220.165's password:
当我们输入root用户,系统就自己主动提示了。
另外也能够在输入password的时候提示。假设是这种话。我们改动例如以下文件就可以
- vi /etc/motd
启动或禁止用户IP登录
除了能够禁止某个用户登录,我们还能够针对固定的IP进行禁止登录,这里面事实上就是改动了配置文件
查看 /etc/hosts.allow配置文件。设置同意登录的IP
- [root@rhsde ~]# more /etc/hosts.allow
- #
- # hosts.allow This file describes the names of the hosts which are
- # allowed to use the local INET services, as decided
- # by the '/usr/sbin/tcpd' server.
- #
- sshd:192.168.220.164:allow
查看/etc/hosts.deny文件。设置sshd:ALL
- [root@rhsde ~]# more /etc/hosts.deny
- #
- # hosts.deny This file describes the names of the hosts which are
- # *not* allowed to use the local INET services, as decided
- # by the '/usr/sbin/tcpd' server.
- #
- # The portmap line is redundant, but it is left to remind you that
- # the new secure portmap uses hosts.deny and hosts.allow. In particular
- # you should know that NFS uses portmap!
- sshd:ALL
也就是说,我们禁止全部IP,可是同意相关IP登录。
另外,假设对sshd_config文件里的配置參数感兴趣能够參考:http://doc.licess.org/openssh/sshd_config.html
- SSHD_CONFIG(5) OpenBSD Programmer's Manual SSHD_CONFIG(5)
- 名称
- sshd_config - OpenSSH SSH server守护进程配置文件
- 大纲
- /etc/ssh/sshd_config
- 描写叙述
- sshd(8) 默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。
- 配置文件是由"指令 值"对组成的。每行一个。空行和以'#'开头的行都将被忽略。
-
假设值中含有空白符或者其它特殊符号。那么能够通过在两边加上双引號(")进行界定。
-
[注意]值是大写和小写敏感的。但指令是大写和小写无关的。
- 当前全部能够使用的配置指令例如以下:
- AcceptEnv
-
指定client发送的哪些环境变量将会被传递到会话环境中。
[注意]仅仅有SSH-2协议支持环境变量的传递。
- 细节能够參考 ssh_config(5) 中的 SendEnv 配置指令。
-
指令的值是空格分隔的变量名列表(当中能够使用'*'和'?'作为通配符)。
也能够使用多个 AcceptEnv 达到相同的目的。
-
须要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。
因为这个原因。该指令应当小心使用。
-
默认是不传递不论什么环境变量。
- AddressFamily
-
指定 sshd(8) 应当使用哪种地址族。
取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。
- AllowGroups
- 这个指令后面跟着一串用空格分隔的组名列表(当中能够使用"*"和"?"通配符)。默认同意全部组登录。
-
假设使用了这个指令,那么将仅同意这些组中的成员登录,而拒绝其他全部组。
-
这里的"组"是指"主组"(primary group),也就是/etc/passwd文件里指定的组。
-
这里仅仅同意使用组的名字而不同意使用GID。
相关的 allow/deny 指令依照下列顺序处理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- AllowTcpForwarding
-
是否同意TCP转发。默认值为"yes"。
-
禁止TCP转发并不能增强安全性,除非禁止了用户对shell的訪问。由于用户能够安装他们自己的转发器。
- AllowUsers
-
这个指令后面跟着一串用空格分隔的username列表(当中能够使用"*"和"?
"通配符)。默认同意全部用户登录。
- 假设使用了这个指令,那么将仅同意这些用户登录,而拒绝其他全部用户。
-
假设指定了 USER@HOST 模式的用户。那么 USER 和 HOST 将同一时候被检查。
-
这里仅仅同意使用用户的名字而不同意使用UID。
相关的 allow/deny 指令依照下列顺序处理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- AuthorizedKeysFile
-
存放该用户能够用来登录的 RSA/DSA 公钥。
- 该指令中能够使用下列依据连接时的实际情况进行展开的符号:
- %% 表示'%'、%h 表示用户的主文件夹、%u 表示该用户的username。
- 经过扩展之后的值必需要么是绝对路径。要么是相对于用户主文件夹的相对路径。
- 默认值是".ssh/authorized_keys"。
- Banner
- 将这个指令指定的文件里的内容在用户进行认证前显示给远程用户。
-
这个特性仅能用于SSH-2。默认什么内容也不显示。"none"表示禁用这个特性。
- ChallengeResponseAuthentication
-
是否同意质疑-应答(challenge-response)认证。默认值是"yes"。
- 全部 login.conf(5) 中同意的认证方式都被支持。
- Ciphers
-
指定SSH-2同意使用的加密算法。
多个算法之间使用逗号分隔。能够使用的算法例如以下:
- "aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
- "3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
- 默认值是能够使用上述全部算法。
- ClientAliveCountMax
- sshd(8) 在未收到不论什么client回应前最多同意发送多少个"alive"消息。默认值是 3 。
- 到达这个上限后,sshd(8) 将强制断开连接、关闭会话。
- 须要注意的是,"alive"消息与 TCPKeepAlive 有非常大差异。
- "alive"消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是能够被欺骗的。
- 假设 ClientAliveInterval 被设为 15 而且将 ClientAliveCountMax 保持为默认值。
-
那么无应答的client大约会在45秒后被强制断开。这个指令仅能够用于SSH-2协议。
- ClientAliveInterval
- 设置一个以秒记的时长,假设超过这么长时间没有收到client的不论什么数据。
- sshd(8) 将通过安全通道向client发送一个"alive"消息,并等候应答。
-
默认值 0 表示不发送"alive"消息。
这个选项仅对SSH-2有效。
- Compression
-
是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。
- 可用值:"yes", "delayed"(默认), "no"。
- DenyGroups
-
这个指令后面跟着一串用空格分隔的组名列表(当中能够使用"*"和"?"通配符)。默认同意全部组登录。
- 假设使用了这个指令,那么这些组中的成员将被拒绝登录。
- 这里的"组"是指"主组"(primary group),也就是/etc/passwd文件里指定的组。
- 这里仅仅同意使用组的名字而不同意使用GID。相关的 allow/deny 指令依照下列顺序处理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- DenyUsers
- 这个指令后面跟着一串用空格分隔的username列表(当中能够使用"*"和"?"通配符)。默认同意全部用户登录。
- 假设使用了这个指令,那么这些用户将被拒绝登录。
- 假设指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同一时候被检查。
- 这里仅仅同意使用用户的名字而不同意使用UID。相关的 allow/deny 指令依照下列顺序处理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- ForceCommand
-
强制运行这里指定的命令而忽略client提供的不论什么命令。
这个命令将使用用户的登录shell运行(shell -c)。
-
这能够应用于 shell 、命令、子系统的完毕,通经常使用于 Match 块中。
- 这个命令最初是在client通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。
- GatewayPorts
- 是否同意远程主机连接本地的转发端口。默认值是"no"。
-
sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其他远程主机连接到转发端口。
- GatewayPorts 指令能够让 sshd 将远程端口转发绑定到非loopback地址,这样就能够同意远程主机连接了。
- "no"表示仅同意本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address),
- "clientspecified"表示同意客户端选择将远程端口转发绑定到哪个地址。
- GSSAPIAuthentication
-
是否同意使用基于 GSSAPI 的用户认证。默认值为"no"。
仅用于SSH-2。
- GSSAPICleanupCredentials
-
是否在用户退出登录后自己主动销毁用户凭证缓存。
默认值是"yes"。仅用于SSH-2。
- HostbasedAuthentication
-
这个指令与 RhostsRSAAuthentication 类似。可是仅能够用于SSH-2。
推荐使用默认值"no"。
- 推荐使用默认值"no"禁止这样的不安全的认证方式。
- HostbasedUsesNameFromPacketOnly
- 在开启 HostbasedAuthentication 的情况下,
- 指定server在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时。是否进行反向域名查询。
- "yes"表示 sshd(8) 信任client提供的主机名而不进行反向查询。默认值是"no"。
- HostKey
- 主机私钥文件的位置。假设权限不正确,sshd(8) 可能会拒绝启动。
- SSH-1默认是 /etc/ssh/ssh_host_key 。
- SSH-2默认是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。
- 一台主机能够拥有多个不同的私钥。"rsa1"仅用于SSH-1,"dsa"和"rsa"仅用于SSH-2。
- IgnoreRhosts
- 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。
- 只是 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。
- IgnoreUserKnownHosts
- 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。
-
默认值是"no"。为了提高安全性,能够设为"yes"。
- KerberosAuthentication
- 是否要求用户为 PasswordAuthentication 提供的password必须通过 Kerberos KDC 认证。也就是是否使用Kerberos认证。
- 要使用Kerberos认证,server须要一个能够校验 KDC identity 的 Kerberos servtab 。默认值是"no"。
- KerberosGetAFSToken
- 假设使用了 AFS 而且该用户有一个 Kerberos 5 TGT,那么开启该指令后,
-
将会在訪问用户的家文件夹前尝试获取一个 AFS token 。
默觉得"no"。
- KerberosOrLocalPasswd
- 假设 Kerberos password认证失败,那么该password还将要通过其他的认证机制(比方 /etc/passwd)。
- 默认值为"yes"。
- KerberosTicketCleanup
-
是否在用户退出登录后自己主动销毁用户的 ticket 。
默认值是"yes"。
- KeyRegenerationInterval
-
在SSH-1协议下。短命的server密钥将以此指令设置的时间为周期(秒),不断又一次生成。
- 这个机制能够尽量减小密钥丢失或者黑客攻击造成的损失。
- 设为 0 表示永不又一次生成。默觉得 3600(秒)。
- ListenAddress
- 指定 sshd(8) 监听的网络地址。默认监听全部地址。能够使用以下的格式:
- ListenAddress host|IPv4_addr|IPv6_addr
- ListenAddress host|IPv4_addr:port
- ListenAddress [host|IPv6_addr]:port
- 假设未指定 port ,那么将使用 Port 指令的值。
- 能够使用多个 ListenAddress 指令监听多个地址。
- LoginGraceTime
-
限制用户必须在指定的时限内认证成功。0 表示无限制。
默认值是 120 秒。
- LogLevel
-
指定 sshd(8) 的日志等级(具体程度)。
可用值例如以下:
- QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
- DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更具体、更罗嗦的日志输出。
-
比 DEBUG 更具体的日志可能会泄漏用户的敏感信息,因此反对使用。
- MACs
- 指定同意在SSH-2中使用哪些消息摘要算法来进行数据校验。
-
能够使用逗号分隔的列表来指定同意使用多个算法。
默认值(包括全部能够使用的算法)是:
- hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
- Match
-
引入一个条件块。块的结尾标志是还有一个 Match 指令或者文件结尾。
- 假设 Match 行上指定的条件都满足。那么随后的指令将覆盖全局配置中的指令。
-
Match 的值是一个或多个"条件-模式"对。
可用的"条件"是:User, Group, Host, Address 。
- 仅仅有下列指令能够在 Match 块中使用:AllowTcpForwarding, Banner,
- ForceCommand, GatewayPorts, GSSApiAuthentication,
- KbdInteractiveAuthentication, KerberosAuthentication,
- PasswordAuthentication, PermitOpen, PermitRootLogin,
- RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
- X11Forwarding, X11UseLocalHost
- MaxAuthTries
-
指定每一个连接最大同意的认证次数。
默认值是 6 。
-
假设失败认证的次数超过这个数值的一半。连接将被强制断开,且会生成额外的失败日志消息。
- MaxStartups
- 最大同意保持多少个未认证的连接。默认值是 10 。
- 到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。
- PasswordAuthentication
- 是否同意使用基于password的认证。默觉得"yes"。
- PermitEmptyPasswords
- 是否同意password为空的用户远程登录。默觉得"no"。
- PermitOpen
- 指定TCP端口转发同意的目的地,能够使用空格分隔多个转发目标。默认同意全部转发请求。
- 合法的指令格式例如以下:
- PermitOpen host:port
- PermitOpen IPv4_addr:port
- PermitOpen [IPv6_addr]:port
-
"any"能够用于移除全部限制并同意一切转发请求。
- PermitRootLogin
- 是否同意 root 登录。可用值例如以下:
-
"yes"(默认) 表示同意。
"no"表示禁止。
-
"without-password"表示禁止使用密码认证登录。
-
"forced-commands-only"表示仅仅有在指定了 command 选项的情况下才同意使用公钥认证登录。
-
同一时候其他认证方法所有被禁止。
这个值经常使用于做远程备份之类的事情。
- PermitTunnel
- 是否同意 tun(4) 设备转发。可用值例如以下:
-
"yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默认)。
- "yes"同一时候蕴含着"point-to-point"和"ethernet"。
- PermitUserEnvironment
- 指定是否同意 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。
- 默认值是"no"。假设设为"yes"可能会导致用户有机会使用某些机制(比方 LD_PRELOAD)绕过訪问控制。造成安全漏洞。
- PidFile
-
指定在哪个文件里存放SSH守护进程的进程号。默觉得 /var/run/sshd.pid 文件。
- Port
- 指定 sshd(8) 守护进程监听的端口号,默觉得 22 。能够使用多条指令监听多个端口。
- 默认将在本机的全部网络接口上监听,可是能够通过 ListenAddress 指定仅仅在某个特定的接口上监听。
- PrintLastLog
-
指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。
默认值是"yes"。
- PrintMotd
- 指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。默认值是"yes"。
- Protocol
- 指定 sshd(8) 支持的SSH协议的版本。
-
'1'和'2'表示只支持SSH-1和SSH-2协议。
"2,1"表示同一时候支持SSH-1和SSH-2协议。
- PubkeyAuthentication
- 是否同意公钥认证。仅能够用于SSH-2。默认值为"yes"。
- RhostsRSAAuthentication
- 是否使用强可信主机认证(通过检查远程主机名和关联的username进行认证)。仅用于SSH-1。
-
这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。
- 出于安全考虑,建议使用默认值"no"。
- RSAAuthentication
- 是否同意使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。
- ServerKeyBits
-
指定暂时server密钥的长度。
仅用于SSH-1。默认值是 768(位)。
最小值是 512 。
- StrictModes
-
指定是否要求 sshd(8) 在接受连接请求前对用户主文件夹和相关的配置文件进行宿主和权限检查。
- 强烈建议使用默认值"yes"来预防可能出现的低级错误。
- Subsystem
-
配置一个外部子系统(比如,一个文件传输守护进程)。
仅用于SSH-2协议。
- 值是一个子系统的名字和相应的命令行(含选项和參数)。比方"sft /bin/sftp-server"。
- SyslogFacility
- 指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是:
- DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
- TCPKeepAlive
-
指定系统是否向client发送 TCP keepalive 消息。默认值是"yes"。
- 这样的消息能够检測到死连接、连接不当关闭、client崩溃等异常。
- 能够设为"no"关闭这个特性。
- UseDNS
-
指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实相应。
默认值为"yes"。
- UseLogin
-
是否在交互式会话的登录过程中使用 login(1) 。
默认值是"no"。
-
假设开启此指令。那么 X11Forwarding 将会被禁止,由于 login(1) 不知道怎样处理 xauth(1) cookies 。
- 须要注意的是。login(1) 是禁止用于远程运行命令的。
- 假设指定了 UsePrivilegeSeparation 。那么它将在认证完毕后被禁用。
- UsePrivilegeSeparation
- 是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。
-
认证成功后。将以该认证用户的身份创建还有一个子进程。
-
这样做的目的是为了防止通过有缺陷的子进程提升权限。从而使系统更加安全。
- X11DisplayOffset
-
指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。
默认值是 10 。
-
这个能够用于防止 sshd 占用了真实的 X11 server显示区,从而发生混淆。
- X11Forwarding
-
是否同意进行 X11 转发。
默认值是"no"。设为"yes"表示同意。
- 假设同意X11转发而且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。
-
那么将可能有额外的信息被泄漏。
因为使用X11转发的可能带来的风险,此指令默认值为"no"。
-
须要注意的是,禁止X11转发并不能禁止用户转发X11通信,由于用户能够安装他们自己的转发器。
- 假设启用了 UseLogin ,那么X11转发将被自己主动禁止。
- X11UseLocalhost
-
sshd(8) 是否应当将X11转发server绑定到本地loopback地址。默认值是"yes"。
- sshd 默认将转发server绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。
- 这能够防止远程主机连接到 proxy display 。只是某些老旧的X11client不能在此配置下正常工作。
- 为了兼容这些老旧的X11client。你能够设为"no"。
- XAuthLocation
-
指定 xauth(1) 程序的绝对路径。
默认值是 /usr/X11R6/bin/xauth