- SSH访问控制
SSH:是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能
- /etc/ssh/ssh-config 客户端配置文件
- /etc/ssh/sshd_config 服务器端配置文件
1、服务器端常用配置项
Port 22 # ssh服务端口,建议改为不常用的端口
Protocol # 启用SSH V2版协议
ListenAddress 1.1.1.1 # 设置允许访问此主机的IP地址。如果不设定,可以通过此主机所有的网卡的IP地址进行访问ssh服务
PermitRootLogin no # 禁止root登录
UseDNS no # 不解析客户机地址
MaxAuthTries 3 # 连接输入密码认证次数,超过三次,禁止登录
LoginGraceTime 1m # 登录失败超时时间,等待一分钟后重新尝试连接
2、黑白名单
vim /etc/ssh/sshd_config (Shift+g跳到文件末尾)
AllowUsers root@123.123.123.123 test # 仅允许123这个主机上使用root用户登录,以及所有主机使用test用户登录
DenyUsers root@123.123.123.123 test # 仅不允许123这个主机上使用root用户登录,以及所有主机禁止使用test用户登录,其他用户不受限制
AllowGroups 允许组
DenyGroups 不允许组
3、SSH认证登录(口令、密钥对)
65 PasswordAuthentication yes # 密码认证登录,默认开启
43 #PubkeyAuthentication yes # 密钥对认证登录,默认注释的(公钥加密,私钥解密)
47 AuthorizedKeysFile .ssh/authorized_keys # 客户端存放的密钥文件
ssh-keygen # 创建密钥文件,全部回车
cd /root/.ssh/ # 创建密钥后的文件路径
id_rsa(私钥文件) id_rsa.pub(公钥文件)
ssh-copy-id root@1.1.1.1 # 将自己的公钥文件传送给服务器
- 用户账号安全
1、使用chage工具设置账号有效期
chage -E 2022-12-31 test1
chage -l test1 # 查看test1用户的密码有效期等信息
-d 0 强制修改密码,将最近日期时间更改为0,表示第一次登陆时必须强制修改密码
-E yyyy-mm-dd 指定失效日期,-1取消
其他选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
2、使用passwd命令对账号进行锁定、解锁
passwd -l test1 # 将test1用户锁定
-l 锁定; -u 解锁; -S 查看状态;
3、设置默认添加用户的配置
文件路径:/etc/login.defs
grep -v "#" /etc/login.defs # 显示文件内除注释行以外的行
MAIL_DIR /var/spool/mail # 用户的邮箱目录
PASS_MAX_DAYS 99999 # 密码最大有效期
PASS_MIN_DAYS 0 # 密码最小有效期
PASS_MIN_LEN 5 # 密码最小长度
PASS_WARN_AGE 7 # 密码的警告天数
UID_MIN 1000 # uid号最小值
UID_MAX 60000 # uid号最大值
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000 # gid号最小值
GID_MAX 60000 # gid号最大值
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes # 创建家目录
UMASK 077 # 默认权限,相反的是700
USERGROUPS_ENAB yes # 创建同名的用户组
ENCRYPT_METHOD SHA512 # 用户密码的加密算法
4、伪装登陆提示
配置文件路径:/etc/issue、/etc/issue.net,可隐藏操作系统版本和系统内核版本
5、文件系统安全
chattr-增、删属性、lsattr-查看属性
控制方式:+、-、=
属性i:不可变(immutable) 属性a:仅可追加(append only)
例:
chattr +i /etc/hosts # 给/etc/hosts/文件赋予不可变属性
6、禁用非必要的服务
RHEL5/RHEL6版本管理服务:chkconfig httpd on|off
service httpd start|stop|restart|status
RHEL7版本管理服务:systemctl start|stop|restart|status|enable|disable httpd
- 防暴力破解SSH
1、修改SSHD配置文件
vim /etc/pam.d/sshd # 这是Centos7版本命令
增加如下内容:
auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
# pam_tally2.so 模块名称
# deny=3 设置普通用户和root用户连续错误登录的最大次数,超过最大次数,则锁定该用户
# unlock_time=60 用户锁定时间,单位s
# even_deny_root 也限制root用户
# root_unlock_time=60 root用户锁定时间,单位s
服务器端用户解锁方法:
pam_tally2 -u root -r
pam_tally2 --user 用户名 --reset # 清空指定用户的错误登录次数
2、Centos8版本禁用账号
vim /etc/pam.d/system-auth
增加如下内容,必须添加至指定行:
auth required pam_faillock.so even_deny_root preauth silent audit deny=3 unlock_time=300
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so even_deny_root authfail audit deny=3 unlock_time=300
account required pam_faillock.so
faillock # 查看所有用户的尝试失败登录次数,valid值,v表示有效,i表示无效
faillock --user admin # 只查看admin用户
faillock --user 用户名 --reset # 解锁一个用户账户
faillock --reset # 解锁所有用户
3、修改ssh端口号和限制登入次数
vim /etc/ssh/sshd_config
Port 22 # 更改默认的ssh端口
MaxAuthTries=6 # 将默认的6次改为3,即登入3次就断开
---Centos8版本的system-auth配置如图:
- 防火墙黑名单
last -f /var/run/utmp 或者 last # 查看登入成功的用户日志
last -f /var/log/btmp 或者 lastb # 查看登入失败的用户日志
使用firewall封禁IP:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='1.1.1.1' reject" # 封禁1.1.1.1这个IP地址
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='1.1.1.0/24' reject" # 封禁1.1.1.0-1.1.1.255之间的IP
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.10' port port=80 protocol=tcp accept" # 只允许这个IP的80端口进行访问
firewall-cmd --reload # 重新载入生效
firewall-cmd --list-rich-rules # 查看封禁的IP
- 服务器禁PING
1、修改配置文件
vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1 # 表示禁Ping
net.ipv4.icmp_echo_ignore_all = 0 # 表示启用Ping
sysctl -p # 查看
2、使用防火墙禁ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
firewall-cmd --reload # 重启生效
firewall-cmd --list-all # 查看防火墙规则
firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop' # 取消禁ping规则
3、使用iptables禁ping
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP # 禁用ping
iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP # 启用ping
--icmp-type 8:指定ICMP类型为8
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码
- 用户切换与提权
1、su
su - 用户 # 切换用户的同时也切换环境变量,su 用户是只切换用户,不切换环境变量
su - -c "命令" 用户 # 以目标用户身份去执行某条命令
cat /var/log/secure # 安全日志文件,可以查看su验证和shell终端的开启与关闭
2、sudo提权
主配置文件:/etc/sudoers
查看当前用户允许执行哪些命令:sudo -l
提权格式:普通用户名 主机名列表=命令列表(用户名前面加%的话,表示用户组;命令必须填写绝对路径)
案例:
test localhost,testserver=/sbin/ifconfig,/sbin/yum,!/sbin/iptables,!/sbin/useradd
(第一个test是普通用户,第二个testserver是主机名;允许ifconfig,yum,不允许iptables,useradd)
test localhost,testserver=/sbin/ifconfig,/sbin/yum,NOPASSWD:ALL
(NOPASSWD:ALL表示切换用户以及查看权限等不需要输入自己的命令)
test localhost,testserver=/usr/bin/systemctl * httpd,/usr/bin/vim /var/www/html/index.html
(允许test用户启动,停止,重启httpd服务;以及允许更改httpd服务首页内容)
3、启用日志文件,记录用户的提权操作
vim /etc/sudoers # 按shift+g跳转至文件末尾输入
Default logfile="/var/log/sudo.log"
4、使用别名做用户提权(别名名称必须使用大写字母)
User_Alias 定义用户别名
Host_Alias 定义主机别名
Cmnd_Alias 定义命令别名
案例:
User_Alias USERS=test,test1,test2,test3,test4
Host_Alias HOSTNAME=localhost,testserver
Cmnd_Alias COMMAND=/usr/bin/yum,/usr/bin/cd,/usr/sbin/useradd,/usr/sbin/userdel
- SELINUX
SELinux是一套强化Linux安全的扩展模块,美国国家安全局主导开发;运作机制:集成到Linux2.6内核以上,操作系统提供可定制的策略,管理工具
主要软件包:
selinux-policy,selinux-policy-targeted,libselinux-utils,libselinux-utils,coreutils,policycoreutils
sestatus # 查看selinux的状态,参数有enabled,enforcing,targeted
touch /.autorelabel # 开启SELinux服务的需先创建文件,然后重启服务器,
getenforce # 查看状态
setenforce 0 # 设置selinux的状态为Permissive(宽松模式)
setenforce 1 # 设置selinux的状态为Enforcing(启用模式)
1、安全上下文
参数-Z
ls -lZ /etc/passwd # 查看文件的安全上下文
ls -ldZ /home/ # 查看目录的安全上下文
ps -aux -Z # 查看进程的安全上下文
安全上下文属性构成
用户:角色:访问类型:选项...
例:
system_u:object_r:net_conf_t:s0
system_u:object_r:root_t:s0
system_u:system_r:virt_qemu_ga_t:s0
system_u:system_r:httpd_t:s0
注意:
在开启SELinux时,一般操作规律
- 移动的文件,原有的上下文属性不变
- 创建、复制的文件,自动继承目标位置的上下文
2、修改访问类型,-t指定访问类型,-R递归修改
chcon -t httpd_sys_content_t /var/www/html/test.html # 修改文件的访问类型
chcon -R -t httpd_sys_content_t /var/www/html/ # 修改目录的访问类型
restorecon /var/www/html/test.html # 恢复文件的访问类型为默认的
restorecon -R /var/www/html/ # 恢复目录的访问类型为默认的
小技巧
touch /.autorelabel
reboot
# 这个方法可以恢复系统内所有访问类型不正确的文件,重启后,autorelabel文件消失
3、SELinux布尔值(功能开关)
getsebool -a # 列出所有的布尔值,-P 永久更改
setsebool -P ftpd_anon_write on # 开启布尔值状态为on
setsebool -P ftpd_full_access on # 设置状态为on;在开启SELinux的时候同样允许上传下载
4、查看日志进行排错
yum -y install setroubleshoot* # 安装日志软件
grep setroubleshoot /var/log/messages | tail -1 # 重启服务失败的话,可查看最新的报错
"run"关键字后面就是建议执行的命令
执行之后,再次执行"Do"后面的建议的命令,即可