• day60:Linux压缩与打包&用户管理&用户提权sudo&grep,sed,awk,sort,uniq


    目录

    1.文件管理-压缩与打包

    2.用户管理

      用户怎么查

      如何创建用户

      创建的用户信息都存储在哪?

      用户存储密码的文件

      如何为用户设定密码?

    3.用户组

    4.用户提权相关

    5.Extra:额外补充

    文件管理-压缩与打包

    压缩包的两种格式:zip和tar.gz

    1.什么是压缩包?

    压缩包是一个特殊的文件,将多个文件和目录整合在一个文件中。

    2.为什么要使用压缩包?

    1.便于传输

    2.压缩后的体积会变小

    3.实现打包与压缩有哪些工具

    windows: zip和tar

    linux:zip和tar.gz

    4.压缩包如何实现?

    1.gzip:仅针对文件

    gzip /etc/yum.repo.d/CentOS-Base.repo  # 压缩,原文件不见了
    
    zcat  /etc/yum.repo.d/CentOS-Base.repo.gz # 查看
    
    gzip -d /etc/yum.repo.d/CentOS-Base.repo.gz # 解压

    2.zip:针对文件和目录

    yum install zip -y # 安装一下zip
    
    zip -r yum_local.zip  /etc/yum.repo.d # 压缩
    
    yum install unzip -y # 安装一下unzip
    
    unzip yum_local.zip -d /opt # 解压到/opt

    3.tar.gz

    '''
    c:创建
    z:压缩类型
    f:指定文件名称
    x:自动识别文件类型
    '''
    
    tar czf etc.tar.gz /etc /home/ # 压缩
    
    tar xf etc.tar.gz # 解压
    
    tar xf etc.tar.gz -C /mnt/ /# 指定解压到/mnt/目录

    用户管理

    1.什么是用户?

    指能够正常登陆操作系统

    2.为什么要有用户?

    1.进程在运行时,需要依赖一个特定用户的身份,才可以正常的运行

    2.服务器可能会有多个用户,root权限太大,需要创建一些普通用户

    3.用户分类

         类型          名称                ID编号
    超级管理员      root                   0
    系统用户                            1~999 <--为系统正常运转而使用的用户 [ 系统用户 | 虚拟用户 ]
    普通用户                            1000+ <--能够正常登陆系统的用户 [ 普通用户 ]

    进程能够以什么样的方式去访问一个文件和目录,取决于进程运行的“用户身份”对该文件或目录是否拥有对应的权限。

    4.用户怎么查

    id root # 查看root用户的信息
    '''uid=0(root) gid=0(root) 组=0(root)'''

    5.如何创建用户

    useradd oldboy # 创建用户
    id oldboy # 查看oldboy用户的信息
    '''uid=1001(oldboy) gid=1001(oldboy) 组=1001(oldboy)'''

    6.创建的用户信息都存储在哪?

    存储用户信息以冒号为分隔符,总共有7列

    cat /etc/passwd # 查看所有用户信息
    root:x:0:0:root:/root:/bin/bash
    oldboy:x:1001:1001::home/oldboy:/bin/bash

    存储用户信息以冒号为分名称隔符,总共有7列

    第一列:用户

    第二列:密码占位符,密码存储在/etc/shadow

    第三列:用户的UID

    第四列:用户的GID

    第五列:描述信息 commit

    第六列:用户的家目录

    第七列:用户登录的bash类型

    7.用户存储密码的文件

    cat /etc/shadow

    8.详细了解下创建用户的一些个参数

    -u: 指定用户的UID

    -g: 指定用户的基本组 ( 不指定,默认创建与用户同名的组 )

    -G: 指定附加组 ( 干爹 )

    -c: 指定注释信息

    -s: 指定登录的bash类型,默认是 /bin/bash

    -r: 指定系统用户

    -M: 不创建用户的家目录

    例子1

    #1.创建oldboyedu用户,UID5001,基本组students,附加组sa 注释信息:2019 new student,登陆shell:/bin/bash
    [root@oldboy-pythonedu ~]# groupadd students
    [root@oldboy-pythonedu ~]# groupadd sa
    [root@oldboy-pythonedu ~]# useradd oldboyedu -u 5001 -g students -G sa -c "2020 new student" -s /bin/bash

    例子2

    #2.创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统
    [root@oldboy-pythonedu ~]# useradd mysql -r  -M -s /sbin/nologin 

    9.如何为用户设定密码?

      1.简单:容易破解

      2.复杂:不好记忆

      建议密码使用工具:lastpass --->windows mac android ios

    设定密码的方式

    # 交互式:  
    passwd [username]
    
    # 非交互式:
    [root@oldboy-pythonedu ~]# echo "12" | passwd --stdin root   #固定密码 
    [root@oldboy-pythonedu ~]# echo $RANDOM | md5sum  | cut -c 2-10 | tee 1.txt |passwd --stdin root # 随机密码

    批量创建用户,以及设定随机密码

    [root@oldboy-pythonedu ~]# cat useradd_2.sh 
            #!/usr/bin/bash
    
    
            read -p "请输入你要创建的用户名称: " User
            read -p "请输入你要创建的用户数量: " Number
    
    
            #1.如何批量创建用户
            for i in $(seq $Number)
            do
                user_name=$User-$i
                pass=$(echo $RANDOM | md5sum  | cut -c 2-10)
                
                # 判断用户是否存在,如果存在则不创建
                id $user_name &>/dev/null
                if [ $? -eq 0 ];then
                    continue
                else
                    # 创建用户
                    useradd $user_name 
                    # 设定密码
                    echo "$pass" | passwd --stdin $user_name &>/dev/null
                    echo "Username: $user_name  Password: $pass ok.."
                    echo "Username: $user_name  Password: $pass ok.." >> user_password.txt
                fi 
            done

    删除用户

    userdel -r old-23 # 删除用户
    '''不建议加-r:因为很多情况下开发使用的用户家目录下有很多软件和配置文件'''

    用户组

    1.组基本概念

    便于管理

    2.组的分类

    主组(所属组):当创建一个用户时,如果不指定主组,会默认创建一个同名的组

    附加组:创建用户的时候,可以指定我想加入的附加组,此时用户就可以具备附加的组的权限

    主组只能有一个,附加组可以有很多个

    3.创建组

    -g:指定gid,默认不指定,则从1000+开始

    groupadd -g 5005 devops

    4.删除组

    groupdel devops
    groupdel students
    userdel -r oldboyedu
    groupdel students

    用户提权相关

    1.su切换身份

    # 需要知道用户的密码,才可以切换
    su -root  # 输入root的密码

    问题:

      1.不希望给开发root的权限,容易造成故障

      2.不给开发权限,有些任务它需要root权限

    2.sudo提权

    1.快速给用户分配一个sudo的权限

    usermod -G wheel oldxu # 添加用户到组里
    echo "123" | passwd --stdin oldxu # 给用户设置密码

    2.验证权限

    yum install wget -y # 您需要root权限才能执行此命令
    sudo yum install wget -y # 

    3.给不同用户分配不同权限

    需求:给公司的运维部门分配一些权限,给开发部门分配一些权限

    yum install wget -y # 您需要root权限才能执行此命令
    sudo yum install wget -y # 

    1.定义组名称(sudo里面虚拟的)

    User_Alias DEV = kaifa1,kaifa2
    User_Alias OPS = ops1,ops2

    2.定义权限

    Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
    
    ## Installation and management of software
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
    
    ## Services
    Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
    
    ## Storage
    Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
    
    
    ## Processes
    Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

    3.将用户组与权限进行绑定

    root    ALL=(ALL)       NOPASSWD:ALL  #可以执行所有的命令,并且无需输入密码
    DEV     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES
    OPS     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES,PROCESSES,STORAGE

    4.创建用户并设置密码

    [root@oldboy-pythonedu ~]# useradd kaifa1
    [root@oldboy-pythonedu ~]# useradd kaifa2
    [root@oldboy-pythonedu ~]# useradd ops1
    [root@oldboy-pythonedu ~]# useradd ops2
    [root@oldboy-pythonedu ~]# echo "1" | passwd --stdin kaifa1
    [root@oldboy-pythonedu ~]# echo "1" | passwd --stdin kaifa2
    [root@oldboy-pythonedu ~]# echo "1" | passwd --stdin ops1
    [root@oldboy-pythonedu ~]# echo "1" | passwd --stdin ops2

    5.验证开发的权限和运维的权限是否不一致

    sudo -l
    
    # 用户 kaifa1 可以在 oldboy-pythonedu 上运行以下命令:
        (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
            /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
            /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
            /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
            /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
    
    
    # 用户 ops1 可以在 oldboy-pythonedu 上运行以下命令:
        (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
            /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
            /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
            /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
            /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable,
            /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /sbin/fdisk, /sbin/sfdisk,
            /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

    Extra:额外补充

    1.提取IP地址:grep sed awk

    [root@oldboy-pythonedu ~]# ifconfig  ens32 | grep "inet " | grep -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" | head -1 
    10.0.0.200
    
    [root@oldboy-pythonedu ~]# ifconfig  ens32 | sed -n '2p' | sed -r 's#(^.*inet) (.*) (net.*$)#2#g'
    10.0.0.200
    
    [root@oldboy-pythonedu ~]# ifconfig  ens32  | awk 'NR==2 {print $2}'
    10.0.0.200

    2.提取/etc/passwd 用户名称, uid ,登录bash

    [root@oldboy-pythonedu ~]# #awk -F ":" '{print $1,$3,$7}' /etc/passwd

    3.统计分析访问中来源做多前10的IP地址:sort uniq awk

    '''
    3.统计分析访问中来源做多前10的IP地址   sort  uniq  awk 
        1.来源的IP地址在第几列
        2.对数据进行排序
        3.对数据进行去重,统计
        4.取出前top10的IP地址
    '''
        
    [root@oldboy-pythonedu ~]# awk '{print $1}' access.log  | sort | uniq -c | sort -nr | head -10 > access_top10.txt 
    '''
      31577 116.211.216.152
      25142 222.186.49.194
      20841 120.27.74.166
       9304 39.105.242.163
       8277 61.147.73.164
       7805 222.186.49.165
       7559 123.156.198.164
       7233 61.160.206.107
       6596 220.170.48.75
       6200 61.147.73.171
    '''
    
    [root@oldboy-pythonedu ~]# time awk '{ ip[$1]++ } END { for ( i in ip ) print ip[i],i}' access.log  | sort -nr | head -10
    {
        ip[$1]++
    }
    END{
        for ( i in ip) {
            print i,ip[i]
        }
    
    }
  • 相关阅读:
    spring aop简单理解
    动态代理
    静态代理
    spring的i o c简单回顾
    java注解的概念理解
    Eclipse中配置Tomcat
    java中Optional和Stream流的部分操作
    java中的stream的Map收集器操作
    java中的二进制运算简单理解
    Class.forName和ClassLoader.loadClass区别(转)
  • 原文地址:https://www.cnblogs.com/libolun/p/13745645.html
Copyright © 2020-2023  润新知