Linux系统安装好后,默认会开启SSH服务以便远程配置。但使用默认端口22不安全,一般不建议使用默认端口,那就需要修改SSH默认端口。在RHEL7.0上修改和7.0以下类似,但要注意SELinux的修改。

  SSH 为 Secure Shell,由IETF的网络工作小组(Network Working Group)所制定;SSH 是建立在应用层和传输层基础上的一种安全协议。SSH传输数据是加密的,可以有效防止传输过程被截取数据保障安全。SSH的数据是经过压缩的,所以可以加快传输的速度。


修改步骤:

1、查看是否已安装SSH软件包,#rpm -qa|grep ssh

2、检查服务是否开启,# systemctl status sshd.service

3、检查进程运行状态,# ps -ef |grep sshd

4、检查程序运行端口,# netstat -anpl |grep sshd

5、修改sshd配置文件,# vi /etc/ssh/sshd_config 

   取消“#Port 22”前面的#号,另起一行新增Port 6022(自定义端口),wq保存退出。

6、重启SSH服务,# systemctl restart sshd.service

7、开放防火墙端口:

   添加端口,# firewall-cmd --zone=public --add-port=6022/tcp --permanent

   重新加载,# firewall-cmd --reload

   重启服务,# systemctl restart firewalld.service

   查看端口,# firewall-cmd --zone=public --list-all

8、修改SELinux端口:

   检查SELinux是否启用,# sestatus -v |grep SELinux

       SELinux status:  enabled    #表示启用

   检查semanage是否安装,# rpm -qa |grep policycoreutils-python

   若未安装,请先安装工具包# yum install policycoreutils-python

   查看当前selinux允许的端口,# semanage port -l |grep ssh

   添加新端口,# semanage port -a -t ssh_port_t -p tcp 6022

   检查是否添加成功,# semanage port -l |grep ssh

   重启SSH服务,# systemctl restart sshd.service


注意:

   SSH端口默认是22,如果要修改端口,可先增加一个端口,方法如上,使用新端口登录后再把22端口注释掉(注意同时修改防火墙# firewall-cmd --zone=public --remove-port=22/tcp --permanent,再重新加载# firewall-cmd --reload)。如果是增加端口号,需要先取消22端口的#号,再另起一行新增一个port端口。

   若想删除已停用的端口可使用-d删除命令,# semanage port -d -t ssh_port_t -p tcp 6022

   若想添加其他已定义的端口(如443)到SSH,可使用-m修改命令,# semanage port -m -t ssh_port_t -p tcp 443

   直接使用-a命令添加443端口会报错:ValueError: Port tcp/443 already defined

   一般停用默认端口后我们会想到从selinux中删除22端口,但在执行# semanage port -d -t ssh_port_t -p tcp 22命令后会报以下错误:ValueError: Port tcp/22 is defined in policy, cannot be deleted而无法删除。暂时无法实现。


PS:semanage命令参数

NAME

semanage - SELinux Policy Management tool

SYNOPSIS

semanage {login|user|port|interface|fcontext|translation} -l [-n] 
semanage login -{a|d|m} [-sr] login_name 
semanage user -{a|d|m} [-LrRP] selinux_name 
semanage port -{a|d|m} [-tr] [-p protocol] port | port_range 
semanage interface -{a|d|m} [-tr] interface_spec 
semanage fcontext -{a|d|m} [-frst] file_spec 
semanage translation -{a|d|m} [-T] level

OPTIONS

Tag Description
-a, --add

Add a OBJECT record NAME
-d, --delete

Delete a OBJECT record NAME
-f, --ftype

File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use -d to match only directories or -- to match only regular files.
-h, --help

display this message
-l, --list

List the OBJECTS
-L, --level

Default SELinux Level for SELinux use, s0 Default. (MLS/MCS Systems only)
-m, --modify

Modify a OBJECT record NAME
-n, --noheading

Do not print heading when listing OBJECTS.
-p, --proto

Protocol for the specified port (tcp|udp).
-r, --range

MLS/MCS Security Range (MLS/MCS Systems only)
-R, --role

SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
-P, --prefix

SELinux Prefix. Prefix added to home_dir_t and home_t for labeling users home directories.
-s, --seuser

SELinux user name
-t, --type

SELinux Type for the object
-T, --trans

SELinux Translation

EXAMPLE

# View SELinux user mappings
$ semanage user -l
# Allow joe to login as staff_u
$ semanage login -a -s staff_u joe
# Add file-context for everything under /web (used by restorecon)
$ semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
# Allow Apache to listen on port 81
$ semanage port -a -t http_port_t -p tcp 81


SELinux的运行状态修改:

SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。强制访问控制系统的用途在于增强系统抵御 0-Day ***(利用尚未公开的漏洞实现的***行为)的能力。所以它不是网络防火墙或 ACL 的替代品,在用途上也不重复。


SELinux运行状态:

# setenforce

usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

返回结果有两种:Enforcing和Permissive 

Permissive 代表仅记录安全警告但不阻止可疑行为,

Enforcing 代表记录警告且阻止可疑行为。

还有一种状态为Disabled,Disabled 代表 SELinux 被禁用。


查看SELinux运行状态:

1、# getenforceRHEL默认设置为Enforcing

2、# /usr/sbin/sestatus -v |grep SELinux如果SELinux status:为enable表示开启状态


设置SELinux运行状态:

# setenforce permissive 或# setenforce 0#设置SELinux 成为Permissive模式

# setenforce enforcing  或# setenforce 1#设置SELinux 成为Enforcing模式

以上操作可以立刻改变SELinux运行状态,在 Enforcing 和 Permissive 之间切换,结果保持至关机。

若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件/etc/selinux/config或/etc/sysconfig/selinux(链接文件,指向/etc/selinux/config)实现,将SELINUX=enforcing改为SELINUX=disabled(需要重启计算机)。

  注意当从 Disabled 切换到 Permissive 或者 Enforcing 模式后需要重启计算机。若要判断某一程序无法运行是否是selinux所致可以先将其设置为permisive再运行,如仍无法运行表明与其无关。


SELinux运行策略:

在/etc/selinux/config配置文件里,还有一个值SELINUXTYPE=targeted。通过改变变量SELINUXTYPE的值实现修改策略,targeted代表仅针对预制的几种网络服务和访问请求使用SELinux保护,mls代表所有网络服务和访问请求都要经过SELinux。RHEL默认设置为targeted,包含了对几乎所有常见网络服务的SELinux策略配置,已经默认安装并且可以无需修改直接使用。


常用命令:

sestatus #查看SELinux的状态

sestatus -b#查看application管理状态

getenforce#显示目前SELinux工作模式

setenforce 0#临时将SELinux模式设为宽容模式

setenforce 1#临时将SELinux模式设为强制模式

注:setenforce必需在SELinux enable状态才有用

ls -Z 文档名#查看SELinux对档案管理状态

ls -dZ 资料夹#查看SELinux对资料夹管理状态

chcon#变更档案、资料夹管理

getsebool#查看application管理状态

setsebool#变更application管理

restorecon#恢复成原有的SELinux type

semanage#安全性文件的查询与修改

semanage port -l |grep http#查看SELinux管理http套件所使用的端口

semanage port -a -t http_port_t -p tcp 90#加入90端口给httpd使用

注:必需安装policycoreutils-python套件,在加入Port时需先检查该port是否已经被使用了。

seinfo#查看政策中规则数量

注:必需安装setools-console套件

sealert -l **#SELinux错误信息详细列出,**为错误代码。

注:必需安装setroubleshoot及setroubleshoot-server套件,安装完后需要重启系统。


范例:

1.查找SELinux对FTP的管理状态(列出所有规则的种类),# sestatus -b |grep ftp

2.开放FTP匿名者写入权限,

# setsebool -P allow_ftpd_anon_write=1

ftpd_anon_write                             on

# setsebool -P allow_ftpd_anon_write=0

ftpd_anon_write                             off

3.查看test文件夹状态

# ls -dZ test

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 test

4.变更test文件夹设定

# chcon -t user_home_t test

# ls -dZ test

drwxr-xr-x. root root unconfined_u:object_r:user_home_t:s0 test

5.检查关于SELinux的错误

log文档:/var/log/messages,错误关键字setroubleshoot

先查看错误,# less /var/log/messages |grep setroubleshoot

根据错误描述找出详细问题,# sealert -l **(**为错误代码)