本專題我將討論一下開源服務,隨着開源社區的日趨豐富,開源軟件、開源服務,已經成爲人類的一種公共資源,發展勢頭可謂一日千里,因此不可不知。SSHD服務,在咱們的linux服務器上常常用到,很重要,涉及到服務器的安全,對這個服務的安全配置要高度重視。本文將從如下三個方面進行闡述開源服務及ssh服務。linux
一、 瞭解服務的做用:名稱,功能,特色算法
二、 安裝shell
三、 配置文件位置,端口vim
四、 服務啓動關閉的腳本安全
五、 此服務的使用方法服務器
六、 修改配置文件,實戰舉例網絡
七、 排錯(從下到上,從內到外)。 session
SSHD服務ssh
介紹:SSH 協議:安全外殼協議。爲 Secure Shell 的縮寫。SSH 爲創建在應用層和傳輸層基礎上的安全協議。ide
做用:sshd服務使用SSH協議能夠用來進行遠程控制, 或在計算機之間傳送文件
相比較以前用telnet方式來傳輸文件要安全不少,由於telnet使用明文傳輸,是加密傳輸。
服務安裝:
須要安裝OpenSSH 四個安裝包:
OpenSSH軟件包,提供了服務端後臺程序和客戶端工具,用來加密遠程控件和文件傳輸過程當中的數據,並由此來代替原來的相似服務。
安裝包:
OpenSSH 服務須要4 個軟件包
openssh-askpass-5.3p1-118.1.el6_8.x86_64 #支持對話框窗口的顯示,是一個基於X 系統的密碼診斷工具
openssh-ldap-5.3p1-118.1.el6_8.x86_64 #這個包不是必須的,我在yum install openssh* -y 安裝時,順帶將這個包裝了。
openssh-5.3p1-118.1.el6_8.x86_64 #包含OpenSSH 服務器及客戶端須要的核心文件
openssh-clients-5.3p1-118.1.el6_8.x86_64 #OpenSSH 客戶端軟件包
openssh-server-5.3p1-118.1.el6_8.x86_64 #OpenSSH 服務器軟件包
這四個軟件包在咱們的RHEL鏡像軟件安裝包裏有。
[root@xiaolyu77 ~]# ll /mnt/Packages/openssh*
-r--r--r-- 3 root root 264144 Nov 25 2013 /mnt/Packages/openssh-5.3p1-94.el6.x86_64.rpm
-r--r--r-- 2 root root 55748 Nov 25 2013 /mnt/Packages/openssh-askpass-5.3p1-94.el6.x86_64.rpm
-r--r--r-- 3 root root 411336 Nov 25 2013 /mnt/Packages/openssh-clients-5.3p1-94.el6.x86_64.rpm
-r--r--r-- 3 root root 318860 Nov 25 2013 /mnt/Packages/openssh-server-5.3p1-94.el6.x86_64.rpm
[root@xiaolyu77 ~]#
說明:這裏我給出個人xshell的配色方案,由於做爲程序人,成天對着一個白底黑字仍是黑底黃字,對眼睛的傷害很是大。
個人配色方案是眼科專家給出的,最利於眼睛保護的。xshell最佳配色方案下載 下載完成後,直接在xshell中導入便可。
由於在上一篇博文中我已經講了如何配置本地和在線yum源,這裏直接用yum安裝方式來安裝openssh軟件包。
yum install openssh* -y
由於個人openssh安裝過,而我又配置了網絡yum源,因此這裏會更新舊的安裝包。
確認軟件包是否已經安裝:
rpm -qa | grep openssh
查看軟件安裝生產的文件:
rpm -ql openssh
OpenSSH 配置文件
ll /etc/ssh
OpenSSH 經常使用配置文件有兩個/etc/ssh/ssh_config 和/etc/ssh/sshd_config。
ssh_config 爲客戶端配置文件
sshd_config 爲服務器端配置文件
服務啓動關閉腳本:
方法1:
service sshd restart/stop/start/status
方法2:
/etc/init.d/sshd restart/stop/start/status
設置開機啓動服務:
chkconfig sshd on
chkconfig --list sshd
如何使用ssh來遠程鏈接主機:
方法1、
一、ssh [遠程主機用戶名] @[遠程服務器主機名或IP地址]
若是用root進程登陸遠程主機能夠這樣:就是直接寫要登陸遠程主機的ip地址,不用帶遠程主機的用戶名。
root用戶登陸:
[root@xiaolyu77 ~]# ssh 192.168.31.76
查看生成的knows-hosts文件。
cat .ssh/known_hosts
普通用戶登陸:
[root@xiaolyu76 ~]# useradd xiao && echo 123456 | passwd --stdin xiao
由於我第一次用root用戶登陸,.ssh/known_hosts文件已經生成,因此當我再用普通用戶xiao登陸時,不會出現RSA指紋簽名的信息。
下面我刪掉/root/.ssh/known_hosts文件,再用普通用戶登錄一下。
從新換一個窗口登陸77主機,發現/root/.ssh/knows_hosts文件又從新生成了。
總結:
1. 第一次登陸服務器時系統沒有保存遠程主機的信息,爲了確認該主機身份會提示用戶是否繼續連接,輸入yes 後登陸,這時系統會將遠程服務器信息寫入用戶目錄下: $HOME/.ssh/known_hosts 文件中,下次再進行登陸時由於保存有該主機信息就不會再提示了.
若是是root用戶,known_hosts會寫在/root/.ssh/known_hosts文件中。
2. RSA算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。
方法2、
ssh -l [遠程主機用戶名] [遠程服務器主機名或IP 地址]
[root@xiaolyu77 ~]# ssh -l xiao xiaolyu76
說明:兩種登陸方式效果相同,推薦第一種,由於第一種登陸方法和大多數服務的登陸方法相同,本人也習慣用第一種。
介紹下配置文件,以及須要安全調優的地方
注:參數前面有#,表示是默認值。 固然#號也表示注示。
/etc/ssh/sshd_config 配置文件
說明:這裏以xiaolyu76做爲服務器,xiaolyu77做爲客戶端。
#下面是系統默認的sshd_config的配置文件:
[root@xiaolyu76 ~]# cat /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options change a # default value. #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: # Disable legacy (protocol version 1) support in the server for new # installations. In future the default will change to require explicit # activation of protocol 1 Protocol 2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 1024 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys #AuthorizedKeysCommand none #AuthorizedKeysCommandRunAs nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no #KerberosUseKuserok yes # GSSAPI options #GSSAPIAuthentication no GSSAPIAuthentication yes #GSSAPICleanupCredentials yes GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. #UsePAM no UsePAM yes # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none # no default banner path #Banner none # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # ForceCommand cvs server
1. 端口:Port 22
設置sshd 監聽端口號
# SSH 預設使用 22 這個port,也可使用多個port,即重複使用 port 這個設定項目!
# 例如想要開放 sshd 端口爲 22和 222 ,則多加一行內容爲: Port 222 便可
# 而後從新啓動 sshd 這樣就行了。 建議修改 port number 爲其它端口。防止別人暴力破解。
eg:修改sshd服務默認監聽的端口爲222
vim /etc/ssh/sshd_config
將Port 22修改成Port 222
重啓sshd服務: service sshd restart
測試sshd服務的端口是否已經改變了: netstat -tlunp | grep sshd
修改完端口默認端口後,登陸方法:
ssh -p 222 192.168.31.76 #-p後面跟的就是修改後的端口號。
2. 設置sshd 服務器綁定的本地IP 地址。
當本地有多個網卡時,就會出現多個ip地址,能夠選擇一個ip地址做爲sshd服務器的ip地址。
固然了,0.0.0.0 表示本地全部的ip地址。
ListenAddress 是監聽本地ip地址的,而不是遠端ip地址的。
這個值能夠寫成本地某一個 ip地址或全部地址(0.0.0.0)。
#Protocol 2
選擇的 SSH 協議版本,能夠是 1 也能夠是 2 ,CentOS 5.x 預設是僅支援 V2。出於安全考慮,設置爲最新的協議版本
#HostKey /etc/ssh/ssh_host_key
設置包含計算機私人密匙的文件
#SyslogFacility AUTHPRIV
當有人使用 SSH 登入系統的時候,SSH 會記錄信息,這個信息要記錄的類型爲AUTHPRIV。
在這個配置文件中,沒有看到登陸系統的默認日誌存放路徑,那麼登陸系統的默認日誌存放在哪?
sshd服務日誌存放在: /var/log/secure 。
ls /var/log/secure
例: 爲何sshd配置文件中沒有指定日誌,但日誌卻存放在了: /var/log/secure ?
vim /etc/rsyslog.conf
就是在這個/etc/rsyslog.conf定義了sshd服務日誌的存放路徑。
#LogLevel INFO
# 登陸記錄的等級!INFO級別以上。
3.下面是安全調優的重點:
#LoginGraceTime 2m
# 當使用者連上 SSH server 以後,會出現輸入密碼的畫面
# 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則默認時間爲秒!
能夠根據實際狀況來修改實際
# PermitRootLogin yes
#是否容許 root 登入!預設是容許的,可是建議設定成 no !
真實的生產環境服務器,是不容許root帳號登錄的!!!
#PasswordAuthentication yes
# 密碼驗證固然是須要的!因此這裏寫 yes,也能夠設置爲no
#在真實的生產服務器上,根據不一樣安全級別要求,有的是設置不須要密碼登錄的,經過認證的祕鑰來登錄
# PermitEmptyPasswords no
# 若上面那一項若是設定爲 yes 的話,這一項就最好設定爲 no ,
# 這個項目在是否容許以空的密碼登入!固然不準!
# PrintMotd yes
# 登入後是否顯示出一些信息呢?例如上次登入的時間、地點等等,預設是 yes
# 亦便是打印出 /etc/motd 這個文檔的內容。
例:給sshd服務添加一些警告信息
#服務器端: [root@xiaolyu76 ~]# cat /etc/motd [root@xiaolyu76 ~]# echo 'Warning ! From now on, all of your operations have been recorded!'> /etc/motd #客戶端: [root@xiaolyu77 ~]# ssh -p222 xiaolyu76 root@xiaolyu76's password:
Last login: Mon Sep 19 02:08:16 2016 from xiaolyu77 Warning ! From now on, all of your operations have been recorded!
# PrintLastLog yes
# 顯示上次登入的信息!預設也是 yes !實際生產上也是yes! 從上面能夠明顯的看到這個參數的效果。
# UseDNS yes
#通常來講,爲了要判斷客戶端來源是正常合法的,所以會使用 DNS 去反查客戶端的主機名
# 不過若是是在內網互連,這項目設定爲 no 會讓聯機速度比較快。