本文共 13908 字,大约阅读时间需要 46 分钟。
1.案例1:Linux基本防护措施
2.案例2:使用sudo分配管理权限3.案例3:提高SSH服务安全4.案例4:SELinux安全防护1 案例1:Linux基本防护措施1.1 问题本案例要求练习Linux系统的基本防护措施,完成以下任务:1.修改用户zhangsan的账号属性,设置为2019-12-31日失效(禁止登录)2.临时锁定用户lisi的账户,使其无法登录,验证效果后解除锁定3.修改tty终端提示,使得登录前看到的第一行文本为“Windows Server 2012 Enterprise R2”,第二行文本为“NT 6.2 Hybrid”4.锁定文件/etc/resolv.conf、/etc/hosts,以防止其内容被无意中修改1.2 步骤实现此案例需要按照如下步骤进行。步骤一:修改用户zhangsan的账户属性,设置为2019-12-31日失效(禁止登录)1)正常情况下,未过期的账号可以正常登录,使用chage可以修改账户有效期。1.chage命令的语法格式:2.chage –l 账户名称 //查看账户信息3.chage –E 时间 账户名称 //修改账户有效期2)失效的用户将无法登录使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间):1.[root@svr5 ~]# useradd zhangsan2.[root@svr5 ~]# chage -E 2015-05-15 zhangsan尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。3)重设用户zhangsan的属性,将失效时间设为2015-12-311.[root@svr5 ~]# chage -E 2019-12-31 zhangsan //修改失效日期2.[root@svr5 ~]# chage -l zhangsan //查看账户年龄信息3.Last password change : May 15, 20174.Password expires : never5.Password inactive : never6.Account expires : Dec 31, 20197.Minimum number of days between password change : 08.Maximum number of days between password change : 999999.Number of days of warning before password expires : 74)定义默认有效期(扩展知识)/etc/login.defs这个配置文件,决定了账户密码的默认有效期。1.[root@svr5 ~]# cat /etc/login.defs2.PASS_MAX_DAYS 99999 //密码最长有效期3.PASS_MIN_DAYS 0 //密码最短有效期4.PASS_MIN_LEN 5 //密码最短长度5.PASS_WARN_AGE 7 //密码过期前几天提示警告信息6.UID_MIN 1000 //UID最小值7.UID_MAX 60000 //UID最大值步骤二:临时锁定用户lisi的账户,使其无法登录,验证效果后解除锁定1)锁定用户账号使用passwd或usermod命令将用户lisi的账户锁定。1.[root@svr5 ~]# passwd -l lisi //锁定用户账号lock2.锁定用户 lisi 的密码。3.passwd: 操作成功4.5.[root@svr5 ~]# passwd -S lisi //查看状态status6.lisi LK 2018-02-22 0 99999 7 -1 (密码已被锁定。)2)验证用户lisi已无法登录,说明锁定生效输入正确的用户名、密码,始终提示“Login incorrect”,无法登录。3)解除对用户lisi的锁定1.[root@svr5 ~]# passwd -u lisi //解锁用户账号2.解锁用户 lisi 的密码 。3.passwd: 操作成功4.5.[root@svr5 ~]# passwd -S lisi //查看状态6.lisi PS 2018-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)步骤三:修改tty登录的提示信息,隐藏系统版本1)账户在登录Linux系统时,默认会显示登陆信息(包括操作系统内核信息)/etc/issue这个配置文件里保存的就是这些登陆信息,修改该文件防止内核信息泄露。1.[root@svr5 ~]# cat /etc/issue //确认原始文件2.Red Hat Enterprise Linux Server release 6.5 (Santiago)3.Kernel \r on an \m4.5.[root@svr5 ~]# cp /etc/issue /etc/issue.origin //备份文件6.7.[root@svr5 ~]# vim /etc/issue //修改文件内容8.Windows Server 2012 Enterprise R29.NT 6.2 Hybrid2)测试版本伪装效果退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容,如图-1所示。图-1
步骤四:锁定文件/etc/resolv.conf、/etc/hosts1)语法格式:1.# chattr +i 文件名 //锁定文件(无法修改、删除等)2.# chattr -i 文件名 //解锁文件3.# chattr +a 文件名 //锁定后文件仅可追加4.# chattr -a 文件名 //解锁文件5.# lsattr 文件名 //查看文件特殊属性2) 使用+i锁定文件,使用lsattr查看属性1.[root@svr5 ~]# chattr +i /etc/resolv.conf /etc/hosts2.[root@svr5 ~]# lsattr /etc/resolv.conf /etc/hosts3.----i--------e- /etc/resolv.conf4.----i--------e- /etc/hosts2)测试文件锁定效果1.[root@svr5 ~]# rm -rf /etc/resolv.conf2.rm: 无法删除"/etc/resolv.conf": 不允许的操作3.[root@svr5 ~]# echo "192.168.4.1 gateway.tarena.com" >> /etc/hosts4.bash: /etc/hosts: 权限不够3)恢复这两个文件原有的属性(避免对后续实验造成影响)1.[root@svr5 ~]# chattr -i /etc/resolv.conf /etc/hosts2.[root@svr5 ~]# lsattr /etc/resolv.conf /etc/hosts3.-------------e- /etc/resolv.conf4.-------------e- /etc/hosts2 案例2:使用sudo分配管理权限2.1 问题本案例要求利用sudo机制分配管理操作权限,主要完成以下任务:1.使用su命令临时切换账户身份,并执行命令2.允许softadm管理系统服务的权限3.允许用户useradm通过sudo方式添加/删除/修改除root以外的用户账号4.允许wheel组成员以特权执行/usr/bin/下的命令5.为sudo机制启用日志记录,以便跟踪sudo执行操作2.2 步骤实现此案例需要按照如下步骤进行。步骤一:使用su命令临时切换账户身份,并以root执行命令su(Substitute User)命令可以快速切换账户身份,普通用户切换账户身份时需要输入密码,root使用su命令切换任何身份都不需要密码,如法格式如下:1.# su – [账户名称]2.# su - [账户名称] -c '命令' 1)从普通用户切换为root账户身份(如果没有普通账户则需要先创建)1.[jacob@svr5 ~]# whoami2.jacob3.[jacob@svr5 ~]# su – //切换账户,默认切换为root账户4.密码:5.[root@svr5 ~]# whoami //确认结果6.root2)以普通身份创建目录(如果没有普通账户则需要先创建),以root身份重启服务1.[root@svr5 ~]# su - tom -c "mkdir /home/tom/test" //管理员切换普通用户2.[root@svr5 ~]# ll -d /home/tom/test3.[tom@svr5 ~]# su - -c "systemctl restart sshd" //以管理员重启服务4.密码:5.● sshd.service - OpenSSH server daemon6.Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)7.active: active (running) since 五 2018-01-19 08:59:40 CST; 1 months 4 days ago步骤二:允许softadm管理系统服务的权限1)修改/etc/sudoers配置修改/etc/sudoers可以直接使用vim编辑该文件,或使用visudo命令修改该文件。为softadm授予相关脚本的执行权限,允许通过systemctl工具来管理系统服务。如果没有softadm账户可以先创建该账户。1.[root@svr5 ~]# vim /etc/sudoers //修改文件后,需要使用wq强制保存2... ..3.softadm ALL=(ALL) /usr/bin/systemctl 4.//授权softadm以root身份执行systemctl命令2)切换为softadm用户,并验证sudo执行权限1.[root@svr5 ~]# su – softadm2.[softadm@svr5 ~]$ sudo -l3.… …4.[sudo] password for softadm: //输入softadm的口令5... ..6.用户 softadm 可以在该主机上运行以下命令:9.[softadm@svr5 ~]$ systemctl start httpd //不用sudo时启动服务失败
10.Authentication is required11... ..12.[softadm@svr5 ~]$ sudo systemctl restart httpd //通过sudo启动服务成功步骤三:允许用户useradm通过sudo方式添加/删除/修改除root以外的用户账号1)修改/etc/sudoers配置为useradm授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符。1.[root@svr5 ~]# vim /etc/sudoers2... ..3.useradm ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user,5.[root@svr5 ~]# ssh kate@192.168.4.7
6.kate@192.168.4.7's password:7.Permission denied, please try again.步骤二:针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录1)调整sshd服务配置,添加AllowUsers策略,仅允许用户zengye、john、useradm,其中useradm只能从网段192.168.4.0/24登录。1.[root@svr5 ~]# vim /etc/ssh/sshd_config2... ..3.AllowUsers zengye john useradm@192.168.4.0/24 //定义账户白名单4.##DenyUsers USER1 USER2 //定义账户黑名单5.##DenyGroups GROUP1 GROUP2 //定义组黑名单6.##AllowGroups GROUP1 GROUP2 //定义组白名单7.[root@svr5 ~]# systemctl restart sshd2)验证SSH访问控制,未授权的用户将拒绝登录。1.[root@pc205 ~]# ssh useradm@192.168.4.5 //已授权的用户允许登录2.useradm@192.168.4.5's password:3.[useradm@svr5 ~]$ exit4.[root@pc205 ~]# ssh zhangsan@192.168.4.5 //未授权的用户被拒绝登录5.zhangsan@192.168.4.5's password:6.Permission denied, please try again.步骤三:实现密钥对验证登录(私钥口令)、免密码登入1)准备客户机测试环境为客户机的用户root建立SSH密钥对使用ssh-keygen创建密钥对,将私钥口令设为空(直接回车):1.[root@client ~]$ ssh-keygen -t rsa2.Generating public/private rsa key pair.3.Enter file in which to save the key (/root/.ssh/id_rsa):4.Created directory '/root/.ssh'.5.Enter passphrase (empty for no passphrase): //直接回车将口令设为空6.Enter same passphrase again: //再次回车确认7.Your identification has been saved in /root/.ssh/id_rsa.8.Your public key has been saved in /root/.ssh/id_rsa.pub.9.The key fingerprint is:10.63:6e:cf:45:f0:56:e2:89:6f:62:64:5a:5e:fd:68:d211.The key's randomart image is:12.+--[ RSA 2048]----+13.| |14.| |15.| . . . |16.| = = |17.| S = B . |18.| o B = . o |19.| + + = E .|20.| . + + o |21.| o |22.+-----------------+23.[root@client ~]$ ls -lh ~/.ssh/id_rsa* //确认密钥对文件24.-rw-------. 1 root root 1.8K 8月 15 10:35 /root/.ssh/id_rsa25.-rw-r--r--. 1 root root 403 8月 15 10:35 /root/.ssh/id_rsa.pub2)将客户机上用户root的公钥部署到SSH服务器以用户root登入客户机,使用ssh-copy-id命令将自己的公钥部署到服务器:1.[root@client ~]$ ssh-copy-id root@192.168.4.52.root@192.168.4.5's password:3.Now try logging into the machine, with "ssh 'root@192.168.4.5'", and check in:5.[root@svr5 ~]# systemctl restart sshd
4 案例4:SELinux安全防护4.1 问题本案例要求熟悉SELinux防护机制的开关及策略配置,完成以下任务:1.将Linux服务器的SELinux设为enforcing强制模式2.从/root目录下移动一个包文件到FTP下载目录,调整策略使其能够被下载3.在SELinux启用状态下,调整策略打开vsftpd服务的匿名上传访问4.2 步骤实现此案例需要按照如下步骤进行。步骤一:将Linux服务器的SELinux设为enforcing强制模式1)固定配置:修改/etc/selinux/config文件确认或修改SELINUX为enforcing模式:1.[root@svr5 ~]# vim /etc/selinux/config2.SELINUX=enforcing //设置SELinux为强制模式3.SELINUXTYPE=targeted //保护策略为保护主要的网络服务安全2)临时配置:使用setenforce命令查看当前SELinux状态,如果是disabled则需要根据第1)步的配置重启系统;如果是permissive则使用setenforce命令修改为enforcing即可:1.[root@svr5 ~]# getenforce //查看当前状态为警告模式2.Permissive3.[root@svr5 ~]# setenforce 1 //设置SELinux为强制模式4.[root@svr5 ~]# getenforce //查看当前模式为强制模式5.Enforcing6.[root@svr5 ~]# setenforce 0 //设置SELinux为强制模式7.[root@svr5 ~]# getenforce //查看当前模式为警告模式8.Permissive步骤二:在SELinux启用状态下,调整策略打开vsftpd服务的匿名上传访问1)配置一个允许匿名上传的vsftpd服务作为测试环境1.[root@svr5 ~]# yum –y install vsftpd2... ..3.[root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf4.anonymous_enable=YES //开启匿名访问5.write_enable=YES6.anon_upload_enable=YES //允许上传文件7.anon_mkdir_write_enable=YES //允许上传目录8.[root@svr5 ~]# systemctl start vsftpd //启动服务10.//默认Vsftpd共享目录为/var/ftp/
步骤三:从/root目录下移动2个包文件到FTP下载目录,调整文件的安全上下文1)建立两个FTP下载用的测试文件由root用户创建两个测试压缩包,一个直接建立到/var/ftp/目录下,另一个先在/root/下建立,然后移动至/var/ftp/目录。1.//测试文件1,直接在ftp目录下创建文件2.[root@svr5 ~]# tar –czf /var/ftp/log1.tar /var/log3.[root@svr5 ~]# mv log1.tar /var/ftp/4.[root@svr5 ~]# ls -lh /var/ftp/5.-rw-r--r--. 1 root root 8M 8月 16 10:16 log1.tar6.[root@svr5 ~]# ls -Z /var/ftp/7.-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar9.//测试文件2,在/root下建立,然后移动至/var/ftp目录
10.[root@svr5 ~]# tar –czf log2.tar /var/log11.[root@svr5 ~]# mv log2.tar /var/ftp/12.[root@svr5 ~]# ls -lh /var/ftp/13.-rw-r--r--. 1 root root 8M 8月 16 10:16 log2.tar14.[root@svr5 ~]# ls -lZ /var/ftp/15.-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 log2.tar3)通过FTP方式测试下载使用wget命令分别下载这两个包文件,第二个包将会下载失败(看不到文件)。1.[root@svr5 ~]# wget ftp://192.168.4.5/log1.tar //下载第一个文件,成功3.[root@svr5 ~]# wget ftp://192.168.4.5/log2.tar //下载第二个文件,失败
4)检查该测试包的安全上下文,正确调整后再次下载第二个包成功。文件已经存放到共享目录下,但客户端无法访问下载,是因为被SELinux拦截了!1.[root@svr5 ~]# ls -lZ /var/ftp/2.-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar3.-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 log2.tar5.[root@svr5 ~]# chcon -t public_content_t /var/ftp/d2.tar.gz
6.[root@svr5 ~]# ls -Z /var/ftp/lo2.tar7.-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log2.tar9.[root@svr5 ~]# wget ftp://192.168.4.5/log2.tar //再次下载,成功
注意:上例中的chcon操作可替换为(效果相同):#restorecon /var/ftp/d2.tar.gz或者#chcon --reference=/var/ftp/d1.tar.gz /var/ftp/d2.tar.gz2)启用SELinux时验证FTP上传访问在targeted策略的布尔值设置中,默认禁止FTP匿名写入和完全访问:1.[root@client ~]# ls > test.txt2.[root@client ~]# ftp 192.168.4.53... ..4.Name (192.168.4.7:root): ftp //使用匿名账户ftp登陆5.331 Please specify the password.6.Password: //密码为空(回车即可)8.ftp> cd pub //切换共享目录
9.250 Directory successfully changed.10.ftp> put test.txt //尝试上传测试文件11.local: test.txt remote: test.txt12.227 Entering Passive Mode (192,168,4,5,121,146).13.553 Could not create file. //上传失败14.ftp> quit15.221 Goodbye.3)调整与FTP相关的SELinux布尔值,开放上传写入权限检查与allow_ftpd相关的SELinux布尔值,如果是off,则将其修改为on:1.[root@svr5 ~]# getsebool -a |grep allow_ftpd //查看布尔值2.allow_ftpd_anon_write --> off3.allow_ftpd_full_access --> off4... .5.[root@svr5 ~]# setsebool -P allow_ftpd_anon_write=1 //设置布尔值6.[root@svr5 ~]# setsebool -P allow_ftpd_full_access=17.[root@svr5 ~]# getsebool -a |grep allow_ftpd //确认修改结果8.allow_ftpd_anon_write --> on9.allow_ftpd_full_access --> on4)再次访问vsftpd服务,经测试发现匿名上传已经可用1.[root@client ~]# ftp 192.168.4.52... ..3.Name (192.168.4.5:root): ftp4.331 Please specify the password.5.Password:7.ftp> cd pub
8.250 Directory successfully changed.9.ftp> put test.txt //尝试上传测试文件10.226 Transfer complete. //上传成功11.237 bytes sent in 6.3e-05 secs (3761.90 Kbytes/sec)12.ftp> quit13.221 Goodbye转载于:https://blog.51cto.com/13740508/2134464