Linux啟動與禁止SSH用戶及IP的登錄
來自: http://blog.csdn.net//chenleixing/article/details/46659959
下面就針對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用戶,系統就自動提示了。另外也可以在輸入密碼的時候提示,如果是這樣的話,我們修改如下文件即可
- 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 服務器守護進程配置文件
- 大綱
- /etc/ssh/sshd_config
- 描述
- sshd(8) 默認從 /etc/ssh/sshd_config 文件(或通過 -f 命令行選項指定的文件)讀取配置信息。
- 配置文件是由"指令 值"對組成的,每行一個。空行和以'#'開頭的行都將被忽略。
- 如果值中含有空白符或者其他特殊符號,那么可以通過在兩邊加上雙引號(")進行界定。
- [注意]值是大小寫敏感的,但指令是大小寫無關的。
- 當前所有可以使用的配置指令如下:
- AcceptEnv
- 指定客戶端發送的哪些環境變量將會被傳遞到會話環境中。[注意]只有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
- 這個指令后面跟著一串用空格分隔的用戶名列表(其中可以使用"*"和"?"通配符)。默認允許所有用戶登錄。
- 如果使用了這個指令,那么將僅允許這些用戶登錄,而拒絕其它所有用戶。
- 如果指定了 USER@HOST 模式的用戶,那么 USER 和 HOST 將同時被檢查。
- 這里只允許使用用戶的名字而不允許使用UID。相關的 allow/deny 指令按照下列順序處理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- AuthorizedKeysFile
- 存放該用戶可以用來登錄的 RSA/DSA 公鑰。
- 該指令中可以使用下列根據連接時的實際情況進行展開的符號:
- %% 表示'%'、%h 表示用戶的主目錄、%u 表示該用戶的用戶名。
- 經過擴展之后的值必須要么是絕對路徑,要么是相對于用戶主目錄的相對路徑。
- 默認值是".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) 在未收到任何客戶端回應前最多允許發送多少個"alive"消息。默認值是 3 。
- 到達這個上限后,sshd(8) 將強制斷開連接、關閉會話。
- 需要注意的是,"alive"消息與 TCPKeepAlive 有很大差異。
- "alive"消息是通過加密連接發送的,因此不會被欺騙;而 TCPKeepAlive 卻是可以被欺騙的。
- 如果 ClientAliveInterval 被設為 15 并且將 ClientAliveCountMax 保持為默認值,
- 那么無應答的客戶端大約會在45秒后被強制斷開。這個指令僅可以用于SSH-2協議。
- ClientAliveInterval
- 設置一個以秒記的時長,如果超過這么長時間沒有收到客戶端的任何數據,
- sshd(8) 將通過安全通道向客戶端發送一個"alive"消息,并等候應答。
- 默認值 0 表示不發送"alive"消息。這個選項僅對SSH-2有效。
- Compression
- 是否對通信數據進行加密,還是延遲到認證成功之后再對通信數據加密。
- 可用值:"yes", "delayed"(默認), "no"。
- DenyGroups
- 這個指令后面跟著一串用空格分隔的組名列表(其中可以使用"*"和"?"通配符)。默認允許所有組登錄。
- 如果使用了這個指令,那么這些組中的成員將被拒絕登錄。
- 這里的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
- 這里只允許使用組的名字而不允許使用GID。相關的 allow/deny 指令按照下列順序處理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- DenyUsers
- 這個指令后面跟著一串用空格分隔的用戶名列表(其中可以使用"*"和"?"通配符)。默認允許所有用戶登錄。
- 如果使用了這個指令,那么這些用戶將被拒絕登錄。
- 如果指定了 USER@HOST 模式的用戶,那么 USER 和 HOST 將同時被檢查。
- 這里只允許使用用戶的名字而不允許使用UID。相關的 allow/deny 指令按照下列順序處理:
- DenyUsers, AllowUsers, DenyGroups, AllowGroups
- ForceCommand
- 強制執行這里指定的命令而忽略客戶端提供的任何命令。這個命令將使用用戶的登錄shell執行(shell -c)。
- 這可以應用于 shell 、命令、子系統的完成,通常用于 Match 塊中。
- 這個命令最初是在客戶端通過 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 的情況下,
- 指定服務器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 進行遠程主機名匹配時,是否進行反向域名查詢。
- "yes"表示 sshd(8) 信任客戶端提供的主機名而不進行反向查詢。默認值是"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 提供的密碼必須通過 Kerberos KDC 認證,也就是是否使用Kerberos認證。
- 要使用Kerberos認證,服務器需要一個可以校驗 KDC identity 的 Kerberos servtab 。默認值是"no"。
- KerberosGetAFSToken
- 如果使用了 AFS 并且該用戶有一個 Kerberos 5 TGT,那么開啟該指令后,
- 將會在訪問用戶的家目錄前嘗試獲取一個 AFS token 。默認為"no"。
- KerberosOrLocalPasswd
- 如果 Kerberos 密碼認證失敗,那么該密碼還將要通過其它的認證機制(比如 /etc/passwd)。
- 默認值為"yes"。
- KerberosTicketCleanup
- 是否在用戶退出登錄后自動銷毀用戶的 ticket 。默認值是"yes"。
- KeyRegenerationInterval
- 在SSH-1協議下,短命的服務器密鑰將以此指令設置的時間為周期(秒),不斷重新生成。
- 這個機制可以盡量減小密鑰丟失或者黑客攻擊造成的損失。
- 設為 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
- 是否允許使用基于密碼的認證。默認為"yes"。
- PermitEmptyPasswords
- 是否允許密碼為空的用戶遠程登錄。默認為"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
- 是否使用強可信主機認證(通過檢查遠程主機名和關聯的用戶名進行認證)。僅用于SSH-1。
- 這是通過在RSA認證成功后再檢查 ~/.rhosts 或 /etc/hosts.equiv 進行認證的。
- 出于安全考慮,建議使用默認值"no"。
- RSAAuthentication
- 是否允許使用純 RSA 公鑰認證。僅用于SSH-1。默認值是"yes"。
- ServerKeyBits
- 指定臨時服務器密鑰的長度。僅用于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
- 指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"。
- 這種消息可以檢測到死連接、連接不當關閉、客戶端崩潰等異常。
- 可以設為"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 服務器顯示區,從而發生混淆。
- X11Forwarding
- 是否允許進行 X11 轉發。默認值是"no",設為"yes"表示允許。
- 如果允許X11轉發并且sshd(8)代理的顯示區被配置為在含有通配符的地址(X11UseLocalhost)上監聽。
- 那么將可能有額外的信息被泄漏。由于使用X11轉發的可能帶來的風險,此指令默認值為"no"。
- 需要注意的是,禁止X11轉發并不能禁止用戶轉發X11通信,因為用戶可以安裝他們自己的轉發器。
- 如果啟用了 UseLogin ,那么X11轉發將被自動禁止。
- X11UseLocalhost
- sshd(8) 是否應當將X11轉發服務器綁定到本地loopback地址。默認值是"yes"。
- sshd 默認將轉發服務器綁定到本地loopback地址并將 DISPLAY 環境變量的主機名部分設為"localhost"。
- 這可以防止遠程主機連接到 proxy display 。不過某些老舊的X11客戶端不能在此配置下正常工作。
- 為了兼容這些老舊的X11客戶端,你可以設為"no"。
- XAuthLocation
- 指定 xauth(1) 程序的絕對路徑。默認值是 /usr/X11R6/bin/xauth