zoukankan      html  css  js  c++  java
  • 38_Linux基本防护 用户切换与提权 SSH访问控制 SELinux安全 、SSH访问控制 SELinux安全

    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组成员以特权执行所有命令
    实现时参考下列操作(如果没有普通用户则先创建该账户):
    ]# vim /etc/sudoers
    .. ..
    %wheel ALL=(ALL)  ALL
    ]# usermod -a -G wheel zhangsan(将用户zhangsan加入wheel组)
    ]# id zhangsan
    uid=1007(zhangsan) gid=1007(zhangsan) 组=1007(zhangsan),10(wheel)
    ]# su - zhangsan
    ]$ sudo -l
    .. ..
    用户 zhangsan 可以在 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
    ]# curl http://localhost:8090/test.html
    456

  • 相关阅读:
    代码互改
    第一次个人编程作业
    第一次博客
    个人总结
    第三次个人作业--用例图设计
    第二次结对作业
    第一次结对作业
    记录浏览他人代码
    中文编程作业
    第一篇随笔
  • 原文地址:https://www.cnblogs.com/luwei0915/p/12264106.html
Copyright © 2011-2022 走看看