• Linux系统安全与应用【一】


    目录

    1.账号安全控制

    1.1 系统账号清理

    1.2 密码安全控制

    1.3 命令历史限制

    1.4 命令总结

    2.系统引导和登录控制 

    2.1 使用su命令切换用户

    2.2 限制使用su命令的用户

    3.可插拔式认证模块PAM 

     3.1 linux中的PAM安全认证

     3.2 PAM认证原理​编辑

     3.3 PAM认证的构成

     3.4 PAM安全认证流程

     3.5 使用sudo机制提升权限

    3.6 配置sudo授权 


    1.账号安全控制

    1.1 系统账号清理

    系统账号清理 

    chattr + i [文件名]:锁定指定文件 

    1. chattr +i /etc/passwd /etc/shadow #锁定这两个文件/etc/passwd /etc/shadow
    2. lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
    3. ----i----------- /etc/passwd #----i-----------表示该文件被锁定
    4. ll /etc/passwd
    5. -rw-r--r--. 1 root root 2298 412 14:38 /etc/passwd #查看可得所属主用户root具有编辑权限
    6. echo 1111 >> /etc/passwd #尝试编辑/etc/passwd文件
    7. -bash: /etc/passwd: 权限不够 #/etc/passwd /etc/shadow这两个文件被锁定,将无法再修改编辑,例如修改用户密码、删除和添加用户都不允许,包括超级用户root
    8. useradd lisi #/etc/passwd /etc/shadow这两个文件被锁定,无法增加新用户
    9. useradd:无法打开 /etc/passwd
    10. echo 123123 | passwd --stdin clr #/etc/passwd /etc/shadow这两个文件被锁定,无法修改用户密码
    11. 更改用户 clr 的密码 。
    12. passwd: 鉴定令牌操作错误
    13. userdel clr #/etc/passwd /etc/shadow 这两个文件被锁定,无法删除已有用户
    14. userdel:无法打开 /etc/passwd

    chattr - i [文件名]:解锁指定文件; 

    1. chattr -i /etc/passwd /etc/shadow #解锁指定文件
    2. lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
    3. ---------------- /etc/passwd #----------------表示该文件未被锁定
    4. useradd lisi #添加用户
    5. userdel lisi #删除用户
    6. echo 123123 | passwd --stdin clr #修改用户密码
    7. 更改用户 clr 的密码 。
    8. passwd:所有的身份验证令牌已经成功更新。 #解锁这两个文件/etc/passwd /etc/shadow之后,可以删除、添加和修改用户密码
    9. which chattr #查看命令chattr在系统中的位置
    10. /usr/bin/chattr

     md5sum [文件名]:通过校验和,判断一个指定文件的数据内容是否被修改;

    注意:一个文件无法被写入或修改的可能原因:用户权限不够不具有对该文件的修改权限;该文件被锁定,无法修改编辑lsattr [文件名]:查看该文件是否被锁定。

    1.2 密码安全控制

     

     /etc/login.defs文件:查看用户账号的基本属性;

    1. useradd dingzhen #修改/etc/login.defs文件,将密码有效期更改为30天,添加新用户
    2. vim /etc/shadow #查看新用户的密码有效期
    3. dingzhen:!!:19459:0:30:7::: #可以看到新创建的用户丁真的密码有效期为30天

    chage -M [密码有效期天数] [系统中已存在的用户名]:修改系统中已经存在用户的密码有效期

    chage -d 0 [用户名]:强制指定用户在下次登录时修改密码;

    1.3 命令历史限制

    export HISTSIZE:export全局变量,实现在所有的shell环境中都有效,保留指定要求的历史命令条数; 

    1. vim /etc/profile #修改/etc/profile 文件,设置export HISTSIZE参数,更改保留历史命令条数
    2. export HISTSIZE=20 #export实现全局变量在所有的shell环境中都有效,修改HISTSIZE的参数为20,表示历史命令只保留20
    3. source /etc/profile #source命令用于在当前shell环境中重新加载/etc/profile文件
    4. . /etc/profile #与同上效果一样

    history -c:临时清空历史命令,系统重启之后历史命令会依然保留;

    1. history -c #临时清空历史命令
    2. reboot #重启系统
    3. ls -A
    4. .bash_history #历史命令保留在该文件中 、
    5. vim .bash_history #所有历史命令都保存在.bash_history文件中

    echo ’ ’ > /.bash_history:将空数据内容重定向写入到/.bash_history文件中,实现开机登录,自动清空历史命令; 

    1. vim /etc/profile #修改/etc/profile文件,设置export HISTSIZE参数,更改保留历史命令条数,或者直接将~/.bash_history文件清空
    2. export HISTSIZE=20
    3. echo '' > ~/.bash_history #实现将~/.bash_history文件清空
    4. reboot #重启系统
    5. vim .bash_history #.bash_history文件中历史命令已清除
    6. history
    7. 1 vim .bash_history
    8. 2 history

     

     修改/etc/bashrc文件:实现开机登录,自动清空历史命令;

     

    1.4 命令总结

    账号安全

    禁止用户登录系统

    1. usermod -s /sbin/nologin 用户名 #禁止用户登录系统

     锁定用户

    1. usermod -L  用户名 
    2. passwd -l  用户名   

     查看指定用户是否被锁定 

    passwd -s 用户名     #查看指定用户状态,是否被锁定
    

    删除用户 

     userdel -r  用户名   #删除指定用户连同宿主目录一并删除

    锁定指定文件:userdel -r 用户名    #删除指定用户连同宿主目录一起删除

    解锁指定文件:chattr -i /etc/passwd,shadow

    查看指定文件,是否被锁定:lsattr 文件名

     密码安全

     设置密码有效期 chage -M 天数 用户名   #针对已存在的用户,99999代表密码永不过时

                                /etc/login.defs -->PASS_MAX_DAYS  #针对新建用户

    登录立即修改密码:chage -d 0 用户名

    历史命令 

     闲置历史命令数:/etc/profile --> export HISTSIZE 历史命令条数----> source /etc/profile

     清空历史命令:history -c--->echo ' ' ~/.bash_history

    2.系统引导和登录控制 

    2.1 使用su命令切换用户

     su - 用户名:切换并加载目标用户的家目录和shell环境;

     

    2.2 限制使用su命令的用户

     

     gpasswd -a [用户名] wheel:将指定用户加入到wheel组中;

    1. vim /etc/group #查看系统中已有的组名以及组账号
    2. wheel:x:10: #wheel组
    3. gpasswd -a zhangsan wheel #将zhangsan用户加入到wheel组中
    4. id zhangsan
    5. uid=1005(xiaozhang) gid=1005(zhangsan) 组=1005(zhangsan),10(wheel)
    6. vim /etc/pam.d/su
    7. 2 auth sufficient pam_rootok.so #root用户可以免密切换到其他用户
    8. 6 auth required pam_wheel.so use_uid #只有加入到wheel组的用户才可以认证登录,切换到其他用户
    9. [root@clr ~]# su zhangsan #root用户可以免密切换到其他任意用户
    10. [zhangsan@clr /root]$ su root #没有加入到wheel组的普通用户没有切换到root用户的权限
    11. 密码:
    12. su: 拒绝权限
    13. [zhangsan@clr /root]$ su lisi #没有加入到wheel组的普通用户没有切换到其他用户的权限
    14. 密码:
    15. su: 拒绝权限
    16. [root@clr ~]# su zhangsan
    17. [xiaozhang@clr /root]$ su root #加入到wheel组的zhangsan用户可以切换到普通用户root
    18. 密码:
    19. [zhangsan@clr /root]$ exit
    20. exit
    21. [xiaozhang@clr /root]$ su root #加入到wheel组的xiaozhang用户可以切换到超级用户root
    22. 密码:

    修改su的PAM认证配置文件         vim /etc/pam.d/su -> 开启 auth   required   pam_wheel.so use_uid 的配置

    总结

    (1)将可信任能够使用su命令切换的用户加入到wheel组中;
    (2)在/etc/pam.d/su文件中,取消第二行和第六行的注释,即可实现root用户可以免密切换到其他普通用户,只有加入到wheel组中 的可信任用户能够使用su命令,并输入正确的密码切换到其他用户中。

    3.可插拔式认证模块PAM 

     3.1 linux中的PAM安全认证

     3.2 PAM认证原理

    PAM认证模块 

     

    /etc/pam.d:PAM配置文件; 

    1. [root@localhost ~]# ls /etc/pam.d #查看相关服务的PAM配置文件
    2. atd gdm-pin postlogin-ac su
    3. chfn gdm-smartcard ppp sudo
    4. chsh ksu remote sudo-i
    5. config-util liveinst runuser su-l
    6. crond login runuser-l system-auth
    7. cups other setup system-auth-ac

     PAM认证模块文件

     3.3 PAM认证的构成

     

     

     

     3.4 PAM安全认证流程

     

     3.5 使用sudo机制提升权限

     

    用户名 ALL=(root) /usr/sbin/ifconfig #赋予普通用户以root身份添加网卡IP地址的权限; 

    1. [root@localhost ~]# su - zhangsan #切换到普通用户zhangsan
    2. [zhangsan@localhost ~]$ ifconfig ens33:0 192.168.80.120/24 #普通用户zhangsan给网卡添加IP地址,由于添加网卡属于超级管理员的操作,因此普通用户无法操作
    3. SIOCSIFADDR: 不允许的操作
    4. SIOCSIFFLAGS: 不允许的操作
    5. SIOCSIFNETMASK: 不允许的操作
    6. [zhangsan@localhost ~]$ sudo ifconfig ens33:0 192.168.80.120/24 #添加sudo命令后,仍然无法添加网卡地址

    vim /etc/sudoers #修改/etc/sudoers配置文件 

     zhangsan ALL=(root) /usr/sbin/ifconfig #赋予普通用户zhangsan以root身份添加网卡IP地址的权限

     sudo ifconfig ens32:1 192.16.80.100/24

     此时zhangsan用户就可以修改网卡

    GZY ALL = NOPASSWD: ADMIN:赋予别名GZY内的所有用户在所有主机上以root身份执行ADMIN程序内的所有命令权限,并且不需要使用密码 

    1. [root@localhost ~]# vim /etc/sudoers
    2. ## Allows people in group wheel to run all commands
    3. %wheel ALL=(ALL) ALL #赋予wheel组成员在所有主机上对所有命令的权限,效果类似于超级用户root
    4. ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
    5. #includedir /etc/sudoers.d
    6. zhangsan ALL=(root) /usr/sbin/ifconfig #赋予普通用户zhangsan,以root身份给网卡添加IP地址的权限
    7. lisi ALL=!/bin/rm #禁止lisi用户删除文件的权限
    8. User_Alias GZY=zhangsan,lisi #给zhangsan,lisi这两个用户设置别名GZY
    9. Cmnd_Alias ADMIN=/sbin/*,!/usr/sbin/reboot,!/usr/sbin/poweroff,!/usr/sbin/init,!/usr/sbin/shutdown
    10. #给指定程序命令设置别名ADMIN,(赋予超级管理员用户的所有权限,重启系统、立即关机命令除外)
    11. GZY ALL = NOPASSWD: ADMIN #赋予别名GZY内的所有用户在所有主机上以root身份执行ADMIN程序内的所有命令权限,并且不需要使用密码
    12. [root@localhost ~]# su - zhangsan
    13. 上一次登录:三 412 23:44:03 CST 2023pts/0
    14. [zhangsan@localhost ~]$ which route
    15. /usr/sbin/route
    16. [zhangsan@localhost ~]$ sudo route add -net 10.0.0.0/24 gw 192.168.80.20 dev ens33 #此时普通用户zhangsan可以使用超级用户root添加路由的权限
    17. [zhangsan@localhost ~]$ route -n
    18. Kernel IP routing table
    19. Destination Gateway Genmask Flags Metric Ref Use Iface
    20. 0.0.0.0 192.168.80.2 0.0.0.0 UG 100 0 0 ens35
    21. 0.0.0.0 192.168.80.2 0.0.0.0 UG 101 0 0 ens33
    22. 10.0.0.0 192.168.80.20 255.255.255.0 UG 0 0 0 ens33 #新添加的路由信息
    23. [zhangsan@localhost ~]$ sudo reboot #禁止zhangsan用户的重启操作
    24. 对不起,用户 zhangsan 无权以 root 的身份在 localhost 上执行 /sbin/reboot。
    25. [zhangsan@localhost ~]$ exit
    26. 登出
    27. [root@localhost ~]# su - lisi
    28. 上一次登录:三 412 23:48:56 CST 2023pts/0
    29. [lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.80.34 #此时普通用户lisi可以使用超级用户root添加网卡IP地址的权限
    30. [lisi@localhost ~]$ ifconfig
    31. ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    32. inet 192.168.80.34 netmask 255.255.255.0 broadcast 192.168.80.255
    33. ether 00:0c:29:e6:e0:8a txqueuelen 1000 (Ethernet)
    34. [lisi@localhost ~]$ sudo init 6 #禁止普通用户lisi重启系统的权限
    35. 对不起,用户 lisi 无权以 root 的身份在 localhost 上执行 /sbin/init 6

    sudo -l:查看当前登录用户获得那些sudo授权 

    1. [lisi@localhost ~]$ sudo -l #查看当前用户lisi获得那些sudo授权
    2. 匹配 %2$s 上 %1$s 的默认条目:
    3. !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    4. HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    5. LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    6. env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    7. 用户 lisi 可以在 localhost 上运行以下命令:
    8. (root) !/bin/rm
    9. (root) NOPASSWD: /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown

    3.6 配置sudo授权 

     

  • 相关阅读:
    Highcharts 条形图:数据可视化的利器
    『华强买瓜』奇袭好莱坞!Jupyter也能创建可交互仪表板啦!超全面的英语论文写作套路;神经辐射场NeRF工具包;前沿论文 | ShowMeAI资讯日报
    git服务器宕机后,怎么用本地仓库重新建立gitlab服务器(包括所有历史版本)
    yum、apt-get、curl、wget和pip的使用范围
    Harmony OS学习2
    什么是网络API以及用例
    Docker清理
    中国节日主题网站设计 红色建军节HTML+CSS 红色中国文化主题网站设计 HTML学生作业网页
    10.netty客户端与服务器使用protobuf传输报文
    【蓝桥杯真题练习】STEMA科技素养练习题库 答案版009 持续更新中~
  • 原文地址:https://blog.csdn.net/m0_61187759/article/details/138080618