• linux基本防护


    Linux基本防护措施

    1.1 问题

    本案例要求练习Linux系统的基本防护措施,完成以下任务:

    1. 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录)
    2. 锁定用户lisi的账户,使其无法登录,验证效果后解除锁定
    3. 锁定文件/etc/resolv.conf、/etc/hosts,以防止其内容被无意中修改
    4. 修改tty终端提示,使得登录前看到的第一行文本为“Windows Server 2012 Enterprise R2”,第二行文本为“NT 6.2 Hybrid”

    1.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:修改用户zhangsan的账户属性,设置为2015-12-31日失效(禁止登录)

    1)未过期的用户账号可以正常登录

    以用户zhangsan登录测试。

    2)失效的用户将无法登录

    使用chage命令将用户zhangsan的账户设为当前已失效(比如前一天):

    1. [root@svr7 ~]# date
    2. 2015年 05月 16日 星期六 14:16:25 CST
    3. [root@svr7 ~]# chage -E 2015-05-15 zhangsan             //设为当日的前一天

    尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。

    3)重设用户zhangsan的属性,将失效时间设为2015-12-31

    1. [root@svr7 ~]# chage -E 2015-12-31 zhangsan             //修改失效日期
    2. [root@svr7 ~]# chage -l zhangsan                     //查看账户年龄信息
    3. Last password change                     : May 15, 2015
    4. Password expires                     : never
    5. Password inactive                     : never
    6. Account expires                         : Dec 31, 2015
    7. Minimum number of days between password change         : 0
    8. Maximum number of days between password change         : 99999
    9. Number of days of warning before password expires         : 7

    步骤二:锁定用户lisi的账户,使其无法登录,验证效果后解除锁定

    1)未锁定的用户账号可以正常登录

    以用户lisi登录测试。

    2)锁定用户账号

    使用passwd或usermod命令将用户lisi的账户锁定。

    1. [root@svr7 ~]# passwd -l lisi                         //锁定用户账号
    2. 锁定用户 lisi 的密码 。
    3. passwd: 操作成功
    4. [root@svr7 ~]# passwd -S lisi                         //查看状态
    5. lisi LK 2013-08-14 0 99999 7 -1 (密码已被锁定。)

    3)验证用户lisi已无法登录,说明锁定生效

    输入正确的用户名、密码,始终提示“Login incorrect”,无法登录。

    4)解除对用户lisi的锁定

    1. [root@svr7 ~]# passwd -u lisi                         //解锁用户账号
    2. 解锁用户 lisi 的密码 。
    3. passwd: 操作成功
    4. [root@svr7 ~]# passwd -S lisi                         //查看状态
    5. lisi PS 2013-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

    步骤三:锁定文件/etc/resolv.conf、/etc/hosts

    1)使用chattr锁定文件,lsattr确认结果

    1. [root@svr7 ~]# chattr +i /etc/resolv.conf /etc/hosts
    2. [root@svr7 ~]# lsattr /etc/resolv.conf /etc/hosts
    3. ----i--------e- /etc/resolv.conf
    4. ----i--------e- /etc/hosts

    2)测试文件锁定效果

    1. [root@svr7 ~]# rm -rf /etc/resolv.conf
    2. rm: 无法删除"/etc/resolv.conf": 不允许的操作
    3. [root@svr7 ~]# echo "192.168.4.1 gateway.tarena.com" >> /etc/hosts
    4. bash: /etc/hosts: 权限不够

    3)恢复这两个文件原有的属性(避免对后续实验造成影响)

    1. [root@svr7 ~]# chattr -i /etc/resolv.conf /etc/hosts
    2. [root@svr7 ~]# lsattr /etc/resolv.conf /etc/hosts
    3. -------------e- /etc/resolv.conf
    4. -------------e- /etc/hosts

    步骤四:修改tty登录的提示信息,隐藏系统版本

    1)备份原有的/etc/issue配置文件,然后按照要求改写内容

    1. [root@svr7 ~]# cat /etc/issue                             //确认原始文件
    2. Red Hat Enterprise Linux Server release 6.5 (Santiago)
    3. Kernel on an m
    4. [root@svr7 ~]# cp /etc/issue /etc/issue.origin             //备份文件
    5. [root@svr7 ~]# vim /etc/issue                             //修改文件内容
    6. Windows Server 2012 Enterprise R2
    7. NT 6.2 Hybrid

    2)测试版本伪装效果

    退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容,如图-1所示。

    图-1

    2 使用sudo分配管理权限

    2.1 问题

    本案例要求利用sudo机制分配管理操作权限,主要完成以下任务:

    1. 为sudo机制启用日志记录,以便跟踪sudo执行操作
    2. 允许网站运营专员tradm通过sudo方式控制httpd、mysqld服务的运行
    3. 允许用户ugadm通过sudo方式添加/删除/修改除root以外的用户账号
    4. 允许wheel组成员以特权执行/usr/bin/下的命令

    2.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:为sudo机制启用日志记录,以便跟踪sudo执行操作

    1)修改/etc/sudoers配置,添加日志设置

    1. [root@svr7 ~]# visudo
    2. Defaults logfile="/var/log/sudo"
    3. .. ..

    2)以root(默认有所有权限)执行sudo操作

    1. [root@svr7 ~]# sudo -l                         //查看授权的sudo操作
    2. 匹配此主机上 root 的默认条目:
    3. logfile=/var/log/sudo, requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
    4. DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME
    5. LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
    6. LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    7. env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    8. secure_path=/sbin:/bin:/usr/sbin:/usr/bin
    9. 用户 root 可以在该主机上运行以下命令:
    10. (ALL) ALL

    3)确认日志记录已生效

    1. [root@svr7 ~]# tail /var/log/sudo
    2. .. ..
    3. May 16 22:14:49 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=list

    步骤二:允许网站运营专员tradm通过sudo方式控制httpd、mysqld服务的运行

    1)修改/etc/sudoers配置

    为tradm授予相关脚本的执行权限,允许通过servivce工具来管理httpd、mysqld服务,或者直接执行这两个脚本。

    1. [root@svr7 ~]# visudo
    2. .. ..
    3. Cmnd_Alias LAMP_CTRL=/sbin/service httpd *, /sbin/service mysqld, /etc/init.d/ht
    4. tpd, /etc/init.d/mysqld
    5. tradm localhost,svr7=LAMP_CTRL

    2)切换为tradm用户,并验证sudo执行权限

    1. [root@svr7 ~]# su - tradm
    2. [tradm@svr7 ~]$ sudo -l
    3. We trust you have received the usual lecture from the local System
    4. Administrator. It usually boils down to these three things:
    5. #1) Respect the privacy of others.
    6. #2) Think before you type.
    7. #3) With great power comes great responsibility.
    8. [sudo] password for tradm:                         //验证用户tradm的口令
    9. .. ..
    10. 用户 tradm 可以在该主机上运行以下命令:
    11. (root) /sbin/service httpd *, /sbin/service mysqld *, /etc/init.d/httpd,
    12. /etc/init.d/mysqld
    13. [tradm@svr7 ~]$ service mysqld start             //不用sudo时启动服务失败
    14. touch: 无法创建"/var/log/mysqld.log": 权限不够
    15. chown: 正在更改"/var/log/mysqld.log" 的所有者: 不允许的操作
    16. [失败]
    17. .. ..
    18. [tradm@svr7 ~]$ sudo service mysqld start             //通过sudo启动服务成功
    19. 正在启动 mysqld: [确定]

    步骤三:允许用户ugadm通过sudo方式添加/删除/修改除root以外的用户账号

    1)修改/etc/sudoers配置

    为ugadm授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*。

    1. [root@svr7 ~]# visudo
    2. .. ..
    3. Cmnd_Alias UADM_CTRL=/usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,
    4. !/usr/sbin/user* * root
    5. ugadm localhost,svr7=UADM_CTRL

    2)切换为ugadm用户,验证sudo权限

    可以通过sudo方式来添加/删除/修改普通用户:

    1. [root@svr7 ~]# su – ugadm
    2. [ugadm@svr7 ~]$ sudo -l
    3. .. ..
    4. 用户 ugadm 可以在该主机上运行以下命令:
    5. (root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
    6. !/usr/sbin/user* * root
    7. [ugadm@svr7 ~]$ sudo useradd newuser01             //可以添加用户
    8. [ugadm@svr7 ~]$ sudo passwd newuser01                 //可以修改普通用户的口令
    9. 更改用户 newuser01 的密码 。
    10. 新的 密码:
    11. 重新输入新的 密码:
    12. passwd: 所有的身份验证令牌已经成功更新。
    13. [ugadm@svr7 ~]$ sudo usermod -L newuser01             //可以修改用户属性
    14. [ugadm@svr7 ~]$ sudo userdel -r newuser01             //可以删除用户账号

    但是不能修改root用户的属性:

    1. [ugadm@svr7 ~]$ sudo usermod -L root
    2. 对不起,用户 ugadm 无权以 root 的身份在 svr7.tarena.com 上
    3. 执行 /usr/sbin/usermod -L root。
    4. [ugadm@svr7 ~]$ sudo passwd root
    5. 对不起,用户 ugadm 无权以 root 的身份在 svr7.tarena.com 上
    6. 执行 /usr/bin/passwd root。

    步骤四:允许wheel组成员以特权执行/bin/下的所有命令

    此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。

    实现时参考下列操作:

    1. [root@svr7 ~]# visudo
    2. .. ..
    3. %wheel localhost,svr7=/bin/*
    4. [root@svr7 ~]# usermod -a -G wheel zengye
    5. [zengye@svr7 ~]$ sudo -l
    6. .. ..
    7. 用户 zengye 可以在该主机上运行以下命令:
    8. (root) /bin/*
    9. [zengye@svr7 ~]$ sudo /bin/bash             //与sudo –i 等效,表示初始化登录
    10. [root@svr7 zengye]#                         //直接成root了

    注意:类Shell的程序不要允许用户sudo执行,否则等同于开放所有root权限。

    比方说,如果将/bin/bash复制为/sbin/serv1ce(名称可以有一定迷惑性),然后夹杂在其他正常命令里一起授权给用户tradm,则用户tradm执行sudo serv1ce后就具有了root的身份。

    1. [zengye@svr7 ~]$ sudo serv1ce                     //执行伪装的Shell程序
    2. [sudo] password for zengye:                         //验证用户口令
    3. [root@svr7 zengye]# whoami                         //查看当前身份
    4. root

    3 提高SSH服务安全

    3.1 问题

    本案例要求提高Linux主机上SSH服务端的安全性,完成以下任务:

    1. 配置基本安全策略(禁止root、禁止空口令)
    2. 针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录
    3. 实现密钥验证登录(私钥口令)、免密码登入(无私钥口令)
    4. 确认密钥验证使用正常后,禁用口令验证

    3.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:配置基本安全策略

    1)调整sshd服务配置,并重载服务

    1. [root@svr7 ~]# vim /etc/ssh/sshd_config
    2. .. ..
    3. Protocol 2                                         //去掉SSH协议V1
    4. PermitRootLogin no                                 //禁止root用户登录
    5. PermitEmptyPasswords no                             //禁止密码为空的用户登录
    6. .. ..
    7. [root@svr7 ~]# service sshd reload
    8. 重新载入 sshd: [确定]

    2)测试基本安全策略

    尝试以root用户SSH登录,失败:

    1. [root@svr7 ~]# ssh root@192.168.4.7
    2. root@192.168.4.7's password:
    3. Permission denied, please try again.

    将服务器上用户kate的密码设为空,尝试SSH登录,也会失败:

    1. [root@svr7 ~]# passwd -d kate                         //清空用户口令
    2. 清除用户的密码 kate。
    3. passwd: 操作成功
    4. [root@svr7 ~]# ssh kate@192.168.4.7
    5. kate@192.168.4.7's password:
    6. Permission denied, please try again.

    步骤二:针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录

    1)调整sshd服务配置,添加AllowUsers策略,仅允许用户zengye、john、ugadm,其中ugadm只能从网段192.168.4.0/24登录。

    1. [root@svr7 ~]# vim /etc/ssh/sshd_config
    2. .. ..
    3. AllowUsers zengye john ugadm@192.168.4.0/24
    4. [root@svr7 ~]# service sshd reload
    5. 重新载入 sshd: [确定]

    2)验证SSH访问控制,未授权的用户将拒绝登录。

    1. [root@pc205 ~]# ssh ugadm@192.168.4.7                 //已授权的用户允许登录
    2. ugadm@192.168.4.7's password:
    3. [ugadm@svr7 ~]$ exit
    4. [root@pc205 ~]# ssh zhangsan@192.168.4.7             //未授权的用户被拒绝登录
    5. zhangsan@192.168.4.7's password:
    6. Permission denied, please try again.

    步骤三:实现密钥对验证登录(私钥口令)、免密码登入(无私钥口令)

    1)准备客户机测试环境

    在客户机pc205上创建两个测试用户:mike、nono。其中mike将用来实现有私钥口令保护的SSH登录,而nono用来实现无私钥口令保护的SSH登录(免密码交互) 。

    1. [root@pc205 ~]# useradd mike
    2. [root@pc205 ~]# useradd nono
    3. [root@pc205 ~]# echo 123456 | passwd --stdin mike
    4. .. ..
    5. [root@pc205 ~]# echo 123456 | passwd --stdin nono
    6. .. ..

    2)为客户机的用户mike、nono分别建立SSH密钥对

    以用户mike登入客户机,使用ssh-keygen创建密钥对,设置好私钥口令:

    1. [root@pc205 ~]# su - mike
    2. [mike@pc205 ~]$ ssh-keygen -t rsa
    3. Generating public/private rsa key pair.
    4. Enter file in which to save the key (/home/mike/.ssh/id_rsa):
    5. Created directory '/home/mike/.ssh'.
    6. Enter passphrase (empty for no passphrase):             //设置私钥口令
    7. Enter same passphrase again:                             //再次输入私钥口令
    8. Your identification has been saved in /home/mike/.ssh/id_rsa.
    9. Your public key has been saved in /home/mike/.ssh/id_rsa.pub.
    10. The key fingerprint is:
    11. 63:6e:cf:45:f0:56:e2:89:6f:62:64:5a:5e:fd:68:d2 mike@pc205.tarena.com
    12. The key's randomart image is:
    13. +--[ RSA 2048]----+
    14. | |
    15. | |
    16. | . . . |
    17. | = = |
    18. | S = B . |
    19. | o B = . o |
    20. | + + = E .|
    21. | . + + o |
    22. | o |
    23. +-----------------+
    24. [mike@pc205 ~]$ ls -lh ~/.ssh/id_rsa*                 //确认密钥对文件
    25. -rw-------. 1 mike mike 1.8K 8月 15 10:35 /home/mike/.ssh/id_rsa
    26. -rw-r--r--. 1 mike mike 403 8月 15 10:35 /home/mike/.ssh/id_rsa.pub
    27. [mike@pc205 ~]$ exit
    28. Logout

    切换到用户nono,使用ssh-keygen创建密钥对,将私钥口令设为空(直接回车):

    1. [root@pc205 ~]# su - nono
    2. [nono@pc205 ~]$ ssh-keygen -t rsa
    3. Generating public/private rsa key pair.
    4. Enter file in which to save the key (/home/nono/.ssh/id_rsa):
    5. Created directory '/home/nono/.ssh'.
    6. Enter passphrase (empty for no passphrase):             //直接回车将口令设为空
    7. Enter same passphrase again:                             //再次回车确认
    8. Your identification has been saved in /home/nono/.ssh/id_rsa.
    9. Your public key has been saved in /home/nono/.ssh/id_rsa.pub.
    10. The key fingerprint is:
    11. 43:16:c1:88:5a:02:ec:d5:37:22:4e:c0:25:6f:84:63 nono@pc205.tarena.com
    12. The key's randomart image is:
    13. +--[ RSA 2048]----+
    14. |+++o.. oo. |
    15. | E=+oo.o.. |
    16. |o =*. o + |
    17. | .o. o |
    18. | S |
    19. | . |
    20. | |
    21. | |
    22. | |
    23. +-----------------+
    24. [nono@pc205 ~]$ ls -lh ~/.ssh/id_rsa*                 //确认密钥对文件
    25. -rw-------. 1 nono nono 1.7K 8月 15 10:37 /home/nono/.ssh/id_rsa
    26. -rw-r--r--. 1 nono nono 403 8月 15 10:37 /home/nono/.ssh/id_rsa.pub

    3)将客户机上用户mike、nono的公钥部署到SSH服务器

    以用户nono登入客户机,使用ssh-copy-id命令将自己的公钥部署到服务器,服务器上的目标用户为john:

    1. [nono@pc205 ~]$ ssh-copy-id john@192.168.4.7
    2. john@192.168.4.7's password:
    3. Now try logging into the machine, with "ssh 'john@192.168.4.7'", and check in:
    4. .ssh/authorized_keys
    5. to make sure we haven't added extra keys that you weren't expecting.
    6. [nono@pc205 ~]$ exit
    7. Logout

    同样地,以用户mike登入客户机,使用ssh-copy-id命令将自己的公钥部署到服务器,服务器上的目标用户也是john:

    1. [root@pc205 ~]# su - mike
    2. [mike@pc205 ~]$ ssh-copy-id john@192.168.4.7
    3. john@192.168.4.7's password:
    4. Now try logging into the machine, with "ssh 'john@192.168.4.7'", and check in:
    5. .ssh/authorized_keys
    6. to make sure we haven't added extra keys that you weren't expecting.

    4)在服务器上确认客户机用户mike、nono上传的公钥信息

    默认部署位置为目标用户de ~/.ssh/authorized_keys文件:

    1. [root@svr7 ~]# tail -2 ~john/.ssh/authorized_keys
    2. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzz+5AiFMGQ7LfuiV7eBnOcmRO9JRTcqRoynGO2y5
    3. RyFL+LxR1IpEbkNrUyIZDk5uaX1Y8rwsf+pa7UZ2NyqmUEvNSUo0hQyDGsU9SPyAdzRCCvDgwpOFhaHi/OFnT+zqjAqXH2M9fFYEVUU4PIVL8HT19zCQRVZ/q3acQA34UsQUR0PpLJAobsf1BLe2EDM8BsSHckDGsNoDT9vk+u3e83RaehBMuy1cVEN5sLAaIrIeyM8Q0WxQNlqknL908HRkTlTeKrRoHbMnOBFj8StwlnscKHlkrsKkhUf8A9WWz/vL4GDwGND5jdca3I2hdITAySjMdfL1HMHnMYOgMjPM0Q== nono@pc205.tarena.com
    4. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAl6PopFT7VoFaQFVVKrH4N7VgDIUUjcIc/TN/dmA1
    5. EmTAqv9wYnX83Do3/14wUD6WkUQ1wkZV64bkHCrgUDsCy2iV7wvH7xiOg4CYGFk1RALn5edKC8fEKiveR8MrUafa6O2iBpuG/vYin2QDyc7PpipyRw4rFg7/PaD1XuRRwFGcHgiv8PLUjO6GcuS4c3gyKbSADM7mV1gu62wMHm47e5jAxzxNGkYnyYeb7Ut7hwvs5xP54MHy23zSs+DjN7oRvKN5xZueaFLbVUcnSvGzN5IZqV7Qu3NqtFGpgCdUr/yaFcZWC7VIrNH2IJJwKNboCMSUoEm+InRtIvITdCWWVQ== mike@pc205.tarena.com

    5)在客户机上测试SSH密钥对验证

    在客户机用户mike的环境中,以远程用户john登入192.168.4.7主机,需要验证客户机用户mike 的私钥口令:

    1. [mike@pc205 ~]$ ssh john@192.168.4.7                     //需验证私钥口令
    2. Enter passphrase for key '/home/mike/.ssh/id_rsa':
    3. Last login: Thu Aug 15 10:10:37 2013 from 192.168.4.207
    4. [john@svr7 ~]$ whoami
    5. john

    而在客户机用户nono的环境中,以远程用户john登入192.168.4.7主机时,无需验证口令即可登入(因为私钥口令为空):

    1. [nono@pc205 ~]$ ssh john@192.168.4.7                     //免交互直接登入
    2. Last login: Thu Aug 15 10:48:09 2013 from 192.168.4.207
    3. [john@svr7 ~]$ whoami
    4. john

    步骤四:确认密钥验证使用正常后,禁用口令验证

    1)调整sshd服务配置,将PasswordAuthentication设为no

    1. [root@svr7 ~]# vim /etc/ssh/sshd_config
    2. .. ..
    3. PasswordAuthentication no                             //将此行yes改成no
    4. [root@svr7 ~]# service sshd reload
    5. 重新载入 sshd: [确定]

    2)确认密码登录验证已不可用,只有部署了公钥的用户才可以登录

    1. [root@pc205 ~]# su - mike
    2. [mike@pc205 ~]$ ssh zengye@192.168.4.7                     //口令验证被拒绝
    3. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
    4. [mike@pc205 ~]$ ssh john@192.168.4.7                         //密钥验证登录成功
    5. Enter passphrase for key '/home/mike/.ssh/id_rsa':
    6. Last login: Thu Aug 15 10:49:13 2013 from 192.168.4.207
  • 相关阅读:
    ABAP 没有地方输入H 进入DEBUG 怎么办?
    Jsoup实现java模拟登陆
    Jsoup模拟登陆例子
    Jsoup:解决java.net.UnknownHostException的问题
    Java抓取网页数据(原网页+Javascript返回数据)
    利用StringEscapeUtils对字符串进行各种转义与反转义(Java)
    MyEclipse + Tomcat 热部署问题
    管道寄售库存MRKO结算后,冲销问题
    c#操作appsettiongs
    让你的微信小程序具有在线支付功能
  • 原文地址:https://www.cnblogs.com/xiaoren112/p/8401144.html
Copyright © 2020-2023  润新知