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命令参数
semanage - SELinux Policy Management tool
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
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 |
# View SELinux user mappings |
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 **(**为错误代码)