1.Linux基本防护措施
与用户相关的配置文件
/etc/passwd   /etc/shadow  /etc/group /etc/gshadow  /etc/login.defs /etc/skel
 
与用户相关的命令 
chage   passwd
 
伪装登录提示
/etc/issue、 /etc/issue.net
 
文件系统安全
普通权限 r w x  
特殊权限 suid sgid 粘滞位
访问控制列表  facl
 
给文件加特殊属性  i 和 a  
对应的管理命令 lsattr  chattr
 
1.1 修改用户zhangsan的账户属性,设置为2020-12-31日失效(禁止登录)
正常情况下,未过期的账号可以正常登录,使用chage可以修改账户有效期。
chage命令的语法格式:
chage –l  账户名称           //查看账户信息
chage –E 时间 账户名称  //修改账户有效期
]# chage -l zhangsan
]# chage -E 2010-10-10 zhangsan
尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。
]# chage -E 2020-12-31 zhangsan
]# chage -l zhangsan
 
定义默认有效期
/etc/login.defs这个配置文件,决定了账户密码的默认有效期。
]# cat /etc/login.defs
PASS_MAX_DAYS    99999           //密码最长有效期
PASS_MIN_DAYS    0                    //密码最短有效期
PASS_MIN_LEN    5                      //密码最短长度
PASS_WARN_AGE    7                 //密码过期前几天提示警告信息
UID_MIN                  1000              //UID最小值
UID_MAX                 60000           //UID最大值
 
1.2  临时锁定用户zhangsan的账户,使其无法登录,验证效果后解除锁定
]# passwd -l zhangsan  //锁定用户账号zhangsan
]# passwd -S zhangsan  //查看状态status
验证用户zhangsan已无法登录,说明锁定生效
]# passwd -u zhangsan  //解锁用户账号
 
1.3 修改tty登录的提示信息,隐藏系统版本
]# vim /etc/issue      //修改文件内容
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid
查看效果:
]# reboot
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid
mysql50 login: 
 
1.4 锁定文件/etc/resolv.conf、/etc/hosts
语法格式:
# chattr +i  文件名     //锁定文件(无法修改、删除等)
# chattr -i  文件名      //解锁文件
# chattr +a  文件       //锁定后文件仅可追加
# chattr -a  文件名     //解锁文件
# lsattr 文件名           //查看文件特殊属性
 
]# chattr +i /etc/resolv.conf
]# chattr +a /etc/resolv.conf 
]# lsattr /etc/resolv.conf 
----ia---------- /etc/resolv.conf
 
测试文件锁定效果
]# rm -rf /etc/resolv.conf
rm: 无法删除"/etc/resolv.conf": 不允许的操作
]# echo xyz > /etc/resolv.conf
-bash: resolv.conf: 权限不够
 
2.使用sudo分配管理权限
 
使用su命令临时切换账户身份,并执行命令
允许softadm管理系统服务的权限
允许用户useradm通过sudo方式添加/删除/修改除root以外的用户账号
允许wheel组成员以特权执行所有命令
为sudo机制启用日志记录,以便跟踪sudo执行操作
 
2.1 使用su命令临时切换账户身份,并以root执行命令
2.1.1 su(Substitute User)命令可以快速切换账户身份,普通用户切换账户身份时需要输入密码,root使用su命令切换任何身份都不需要密码,如法格式如下:
# su - [账户名称]
# su - [账户名称] -c '命令'  
 
]# su - zhangsan(root直接切换)
 
]$ whoami
zhangsan
]$ su - lisi(需要密码)
密码:
 
2.1.2 以普通身份创建文件(如果没有普通账户则需要先创建),以root身份重启服务
]# su - zhangsan -c "touch /tmp/test.txt"  //管理员切换普通用户
]# ll /tmp/test.txt 
-rw-rw-r-- 1 zhangsan zhangsan 0 2月  19 09:13 /tmp/test.txt
//以管理员重启服务
]# su - zhangsan
]$ su - -c "systemctl restart sshd"  或者
]$ su - root(可省略) -c "systemctl restart sshd" 
密码:
 
2.2 允许softadm管理系统服务的权限
2.2.1 修改/etc/sudoers配置
修改/etc/sudoers可以直接使用vim编辑该文件,或使用visudo命令修改该文件。
为softadm授予相关脚本的执行权限,允许通过systemctl工具来管理系统服务。
如果没有softadm账户可以先创建该账户。
 
]# useradd softadm
]# vim /etc/sudoers   //修改文件后,需要使用wq强制保存
...
root      ALL=(ALL)   ALL(原来有,下面追加)
softadm   ALL=(ALL)   /usr/bin/systemctl
//授权softadm以root身份执行systemctl命令(ALL包括root)
 
2.2.2 切换为softadm用户,并验证sudo执行权限
设置密码
chpasswd命令使用起来很简洁
]# echo "softadm:123456" | chpassw
使用passwd命令,也可以实现非交互式修改密码
]# echo "123456" | passwd --stdin "softadm"
 
]# su - softadm
]$ sudo -l(查看配置权限)
… …
[sudo] password for softadm:   //输入softadm的密码
.. ..
用户 softadm 可以在该主机上运行以下命令:
    (ALL) /usr/bin/systemctl
]$ systemctl start httpd        //不用sudo时启动服务失败
Authentication is required
.. ..
]$ sudo systemctl restart httpd //通过sudo启动服务成功
 
2.3 允许用户useradm通过sudo方式添加/删除/修改除root以外的用户账号
2.3.1 修改/etc/sudoers配置
为useradm授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*。
]# useradd useradm
]# vim /etc/sudoers
.. ..
useradm ALL=(ALL)  /usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,
 !/usr/sbin/user* * root
 
2.3.2 切换为useradm用户,验证sudo权限
可以通过sudo方式来添加/删除/修改普通用户:
]$ sudo -l
.. ..
用户useradm可以在该主机上运行以下命令:
(root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
!/usr/sbin/user* * root
]$ sudo useradd newuser01    //可以添加用户
]$ sudo passwd newuser01     //可以修改普通用户的口令
更改用户 newuser01 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
 
但是不能修改root用户的密码:
]$ sudo passwd root
对不起,用户 useradm 无权以 root 的身份在 localhost 上执行 /usr/bin/passwd root。
 
2.4 允许wheel组成员以特权执行所有命令
 
此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。
实现时参考下列操作(如果没有普通用户则先创建该账户):
]# vim /etc/sudoers
.. ..
%wheel ALL=(ALL)  ALL
]# usermod -a -G wheel zengye(将用户zengye加入wheel组)
]# id zengye
uid=1007(zengye) gid=1007(zengye) 组=1007(zengye),10(wheel)
]# su - zengye
]$ sudo -l
.. ..
用户 zengye 可以在 mysql50 上运行以下命令:
    (ALL) ALL
 
2.5 为sudo机制启用日志记录,以便跟踪sudo执行操作
 
1)修改/etc/sudoers配置,添加日志设置
]# visudo
Defaults  logfile="/var/log/sudo"(添加)
.. ..
2)以root(默认有所有权限)执行sudo操作
]# sudo -l                      //查看授权的sudo操作
]# sudo systemctl status httpd  //查看授权的sudo操作
3)确认日志记录已生效
]# tail /var/log/sudo 
Feb 19 10:10:58 : root : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=list
Feb 19 10:11:10 : root : TTY=pts/0 ; PWD=/root ; USER=root ;
    COMMAND=/bin/systemctl status httpd
 
3. 提高SSH服务安全
 
配置基本安全策略(禁止root、禁止空口令)
针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录
实现密钥验证登录(私钥口令)、免密码登入
确认密钥验证使用正常后,禁用口令验证
 
3.1 配置基本安全策略
 
1)调整sshd服务配置,并重载服务
]# vim /etc/ssh/sshd_config
.. ..
Protocol 2               //SSH协议
PermitRootLogin no       //禁止root用户登录
PermitEmptyPasswords no  //禁止密码为空的用户登录
UseDNS  no               //不解析客户机地址
LoginGraceTime  1m       //登录限时
MaxAuthTries  3          //每连接最多认证次数
.. ..
]# systemctl restart sshd
 
2)测试基本安全策略
尝试以root用户SSH登录,失败:
]# ssh root@192.168.4.50
root@192.168.4.50's password:
Permission denied, please try again.
将服务器上用户kate(如无该账户则先创建)的密码设为空,尝试SSH登录,也会失败:
]# passwd -d kate     //清空用户口令
清除用户的密码 kate。
passwd: 操作成功
]# ssh kate@192.168.4.50
kate@192.168.4.50's password:
Permission denied, please try again.
 
3.2 针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录
1)调整sshd服务配置,添加AllowUsers策略,仅允许用户zhangsan、tom、useradm,其中useradm只能从网段192.168.4.0/24登录。
 
注意:如果没有这些用户,需要提前创建用户并设置密码。
白名单 仅允许白名单列表里的用户连接ssh服务
用户设置   AllowUsers  root@192.168.4.254  nb
用户组设置 AllowGroups 用户组名
 
黑名单 没有在黑名单列表里的用户可以连接ssh服务
用户设置   DenyUsers  nb1 nb2 nb3
用户组设置 DenyGroups 用户组名
 
]# vim /etc/ssh/sshd_config
.. ..
AllowUsers zhangsan tom useradm@192.168.4.0/24  //定义账户白名单,追加到文件里
##DenyUsers   USER1  USER2                      //定义账户黑名单
##DenyGroups  GROUP1 GROUP2                     //定义组黑名单
##AllowGroups  GROUP1 GROUP2                    //定义组白名单
]# systemctl restart sshd
 
2)验证SSH访问控制,未授权的用户将拒绝登录。
]# ssh useradm@192.168.4.50         //已授权的用户允许登录
useradm@192.168.4.5's password:
]$ exit
]# ssh root@192.168.4.50            //未授权的用户被拒绝登录
root@192.168.4.5's password:
Permission denied, please try again.(PermitRootLogin no)
 
3.3 实现密钥对验证登录(私钥口令)、免密码登入
 
1)准备客户机测试环境(4.51)
为客户机的用户root建立SSH密钥对
使用ssh-keygen创建密钥对,将私钥口令设为空(直接回车):
]# ssh-keygen
]# ls -lh ~/.ssh/id_rsa* 
-rw------- 1 root root 1.7K 2月  15 15:04 /root/.ssh/id_rsa
-rw-r--r-- 1 root root  394 2月  15 15:04 /root/.ssh/id_rsa.pub
 
2)将客户机上用户root的公钥部署到SSH服务器(51)
以用户root登入客户机,使用ssh-copy-id命令将自己的公钥部署到服务器:
]# ssh-copy-id root@192.168.4.50
 
3)在服务器上确认客户机用户root上传的公钥信息(50)
默认部署位置为目标用户的家目录下 ~/.ssh/authorized_keys文件:
]# tail -2 ~/.ssh/authorized_keys
 
4)在客户机上测试SSH密钥对验证
在客户机用户root的环境中,以远程用户root登入192.168.4.50主机时,无需验证口令即可登入(因为私钥口令为空):
]# ssh root@192.168.4.50   //免交互直接登入
 
3.4 确认密钥验证使用正常后,禁用口令验证
 
调整sshd服务配置,将PasswordAuthentication设为no(50)
]# vim /etc/ssh/sshd_config
.. ..
PasswordAuthentication no          //将此行yes改成no
]# systemctl restart sshd
 
4.SELinux安全防护
 
*****************************
查看安全上下文  
用户:角色:访问类型:选项...
 
]# ls -lZ  文件名
]# ls  -ld 目录名
]# ps  -aux  -Z  |  grep  进程名
 
一般操作规律
移动的文件,原有的上下文属性不变
复制的文件,自动继承目标位置的上下文
创建新文件,自动继承父目录上下文
 
修改文件的上下文
]# chcon    -t  访问类型  文件名
]# chcon -R -t  访问类型  目录名
 
恢复上下文
]# restorecon     文件名
]# restorecon -R  目录名
 
SELinux布尔值(bool) 功能开关
查看布尔值
]# getsebool  -a  或  getsebool  -a | grep  服务名
修改布尔
]# setsebool  -P  选项=on|off
**********************************

将Linux服务器的SELinux设为enforcing强制模式
从/root目录下移动一个包文件到FTP下载目录,调整策略使其能够被下载
 
4.1 将Linux服务器的SELinux设为enforcing强制模式
]# vim /etc/selinux/config
SELINUX=enforcing         //设置SELinux为强制模式
SELINUXTYPE=targeted      //保护策略为保护主要的网络服务安全
 
]# getenforce     
Enforcing
]# setenforce 0      
]# getenforce     
Permissive
 
4.2 在SELinux启用状态下,调整策略打开vsftpd服务的匿名上传访问
1)配置一个允许匿名上传的vsftpd服务作为测试环境
]# setenforce 1
]# yum -y install vsftpd
]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES           //开启匿名访问
anon_upload_enable=YES         //允许上传文件,添加
anon_mkdir_write_enable=YES    //允许上传目录,添加
]# systemctl start vsftpd      //启动服务
//默认Vsftpd共享目录为/var/ftp/
 
4.3 从/root目录下移动2个包文件到FTP下载目录,调整文件的安全上下文
 
1)建立两个FTP下载用的测试文件
由root用户创建两个测试压缩包,一个直接建立到/var/ftp/目录下,另一个先在/root/下建立,然后移动至/var/ftp/目录。
//测试文件1,直接在ftp目录下创建文件
]# tar -zvcf /var/ftp/log1.tar /var/log
]# ls -lh /var/ftp/
-rw-r--r--. 1 root root 1.8M 2月  19 11:22 log1.tar
]# ls -Z /var/ftp/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar
 
//测试文件2,在/root下建立,然后移动至/var/ftp目录
]# tar -zvcf log2.tar /var/log
]# mv log2.tar /var/ftp/
]# ls -lh /var/ftp/
-rw-r--r--. 1 root root 1.8M 2月  19 11:22 log1.tar
-rw-r--r--. 1 root root 1.8M 2月  19 11:25 log2.tar
]# ls -Z /var/ftp/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2.tar
 
3)通过FTP方式测试下载
使用wget命令分别下载这两个包文件,第二个包将会下载失败(看不到文件)。
]# wget ftp://192.168.4.50/log1.tar  //下载第一个文件,成功
]# wget ftp://192.168.4.50/log2.tar  //下载第二个文件,失败
 
4)检查该测试包的安全上下文,正确调整后再次下载第二个包成功。
文件已经存放到共享目录下,但客户端无法访问下载,是因为被SELinux拦截了!
]# ls -Z /var/ftp/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2.tar
 
]# chcon -t public_content_t /var/ftp/log2.tar
]# ls -Z /var/ftp/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log2.tar
 
]# wget ftp://192.168.4.50/log2.tar     //再次下载,成功
 
注意:上例中的chcon操作
]# chcon -t public_content_t /var/ftp/log2.tar
可替换为(效果相同):
]# restorecon /var/ftp/log2.tar
或者

]# chcon --reference=/var/ftp/log1.tar /var/ftp/log2.tar

******************************
验证上传下载功能完整
在51主机运行ftp服务: 并允许匿名用户上传文件和下载文件,可以把文件上传到
/var/ftp/sharedir目录里。
 
]# rpm -q vsftpd
]# yum -y  install vsftpd
]# vim /etc/vsftpd/vsftpd.conf
   29 anon_upload_enable=YES   允许匿名用户上传文件
:wq
 
]# mkdir  /var/ftp/sharedir    创建上传目录
]# chmod o+w /var/ftp/sharedir 允许其他用户有写权限
]# cp /etc/passwd  /var/ftp/sharedir/  创建共享文件
]# systemctl start vsftpd
]# netstat -utnlp  | grep  :21
]# getenforce 
Enforcing
 
客户端测试
]# rpm -q ftp
]# yum -y install ftp
 
]# ftp 192.168.4.51 ---> ftp ----> 回车 ---> ls  ---> cd  sharedir ---> ls
> get  passwd  下载文件成功
> cd  sharedir  切换到上传目录
> lcd  /etc     切换到客户端本地目录/etc
> put  hosts    上传失败
> bye  断开连接
 
设置bool值 允许上传文件
]# setsebool -P ftpd_anon_write=on
]# setsebool -P ftpd_full_access=on
]# getsebool -a | grep ftp
 
]# ftp 192.168.4.51 ---> ftp ----> 回车 ---> ls  ---> cd  sharedir ---> ls
> get  passwd  下载文件成功
> cd  sharedir  切换到上传目录
> lcd /etc     切换到客户端本地目录/etc
> put hosts    成功
> bye 断开连接
 
网站服务可以使用8090端口接收连接请求
]# systemctl stop httpd
]# vim /etc/httpd/conf/httpd.conf
listen 8090
:wq
]# systemctl start httpd  启动 报错
 
]# rpm -qa | grep -i setroubleshoot
]# grep -i setroubleshoot /var/log/messages | tail -1
]# sealert -l 1592dd6b-44b9-4d60-b777-0a405bdf48ec
]# semanage port -a -t http_port_t -p tcp 8090
 
]# systemctl start httpd  可以正常启动
]# netstat -utnlp  | grep :8090
]# echo 456 > /var/www/html/test.html
456

四十四.Linux基本防护 用户切换与提权 SSH访问控制 SELinux安全 、SSH访问控制 SELinux安全的更多相关文章

  1. linux系统安全及应用——账号安全(用户切换与提权)

    一.su命令切换用户 su uesr 和 su - user 的区别:前者只切换登录人,shell环境还是上一个人的:后者表示注销当前用户,再进入新用户的shell. 查看切换记录:/var/log/ ...

  2. Gradle 1.12用户指南翻译——第四十四章. 分发插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  3. Android项目实战(四十四):Zxing二维码切换横屏扫描

    原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=&q ...

  4. 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作

     孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...

  5. 网站开发进阶(四十四)input type="submit" 和"button"的区别

    网站开发进阶(四十四)input type="submit" 和"button"的区别   在一个页面上画一个按钮,有四种办法: 这就是一个按钮.如果你不写ja ...

  6. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  7. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  8. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. Linux 系统中用户切换(su user与 su - user 的区别)

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

随机推荐

  1. python3+django报错testserver

    manage.py testserver --addrport 127.0.0.1 报错 查看其它项目 manage.py runserver --addrport 127.0.0.1 正常 查找配置 ...

  2. PAT(B) 1053 住房空置率(Java)统计

    题目链接:1053 住房空置率 (20 point(s)) 题目描述 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的 ...

  3. Scratch编程:多彩的舞台(六)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个小女孩在多彩的舞台上进行 ...

  4. 【Linux】Shell批量修改文件名

    修改文件名,替换中间字符: 例如:ABC_define_EFG.jpg,要把中间的define替换成argument: 用如下脚本即可: for var in *; do mv "$var& ...

  5. flume-ng version出现错误Error: Could not find or load main class org.apache.flume.tools.GetJavaPrope的解决办法

    错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty或者Error: Could not find or load main class org. ...

  6. Windows终端命令行工具Cmder

    在IT这一行,大部分情况下都是推荐大家使用Linux或者类Unix操作系统去编程,Linux作为一代优秀的操作系统,已经人尽皆知,在IT行业已经成为核心.有条件的大佬都选择了使用mac编程,最优秀的莫 ...

  7. vscode IIsExpress用法

    最近前端调试项目,都要安装IIS,使用IIS Express插件不需要另外在IIS架设站点,方便使用 1.安装IIS Express插件 2.ctrl+shfit+p 启动IIS Express 命令 ...

  8. axios拦截登陆过期请求多次

    request.interceptors.response.use( response => { console.log(response.data.code) // console.log(r ...

  9. 网络基础 URL

    一.用JAVA实现URL  在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Intern ...

  10. C#基础 - 定义变量,输入输出

    本节课主要讲解C#的发展历史及部分C#语言基础, 主要内容有:控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值       打印,两种数据类型,整形类型转换 本节重点难点:定义变量 ...