zoukankan      html  css  js  c++  java
  • 基础命令及用户管理

     linux系统登录流程介绍

        用户名、密码登录 --> 权限的管理 --> 审计(日志)
        查看登录日志:/var/log/secure

     Linux基础命令

        分为:内建命令和外部命令
        (1)内建命令是shell的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行shell时就被加载并驻留在系统内存中,其执行速度比外部命令要快,因为解析内部命令shell不需要创建子进程。
        比如:exit、history、echo、cd
        (2)外部命令是linux系统中的实用程序,因为实用程序功能比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用到内存执行。
        比如:ls、vim

        type命令可以分辨内部命令和外部命令,执行type命令会有三种显示形式:
            file: 表示外部命令
            alias:表示该指令为命令别名所设定的名称;
            builtin:表示该指令为bash内部命令

        操作系统基础命令:
        
            关机命令:

                Halt
                Poweroff -f
                Init 0

               
            重启命令:

                Reboot
                Init 6
                Shutdown -r
    
            Whoami 显示当前登录用户名
            Who 显示当前在线所有用户
            W 显示当前所有登录的用户在做什么

            时间操作命令:

                date
                Date -s 修改时间
                Cal 查看日历
                Ctrl + c 强制中断
                Ctrl + d 正常中断

            新建、移动、复制、删除文件
        

                touch
                mv
                cp
                rm
                tree

            查看历史命令:

            history
                HISTCONTROL=ignoredups        # 默认,忽视重复且相同的命令
                HISTFILE=/root/.bash_history        历史命令保存文件位置
                HISTFILESIZE=1000        历史命令文件行数
                HISTSIZE=1000        历史命令在shell中展示的行数
            
            -c:清空所有历史命令
            n:显示第n行命令
            
            history知识扩展:
                !: 上一个指令
                !!: 执行上一个指令

     用户和组

    在linux中,用户可以分为三大类:
        超级用户:root
        虚拟用户:在linux中,满足文件和程序的运行所需而创建的,不能登录,不能使用。
        普通用户:管理员root创建的用户
    组:具有相同特征用户的集合,一个组可以包含多个用户,每个用户也可以属于不同的组,组是为了管理员对用户的集中管理,用户组分为两类:
        系统组和用户组
    用户和组的关系:
        一对一:一个用户存在一个组
        一对多:一个用户属于多个组,只有一个主组,其余为附加组
        多对一:多个用户共存一个组
        多对多:多个用户可以存在多个组

    用户及用户组配置文件介绍:
        /etc/passwd
        
        第一列:用户名
        第二列:密码位
        第三列:UID号 用户
        第四列:GID号 组
        第五列:用户名注释
        第六列:用户的家目录
        第七列:用户默认的shell类型
        
        /etc/group:组及其属性
        
        第一列:组名
        第二列:组密码
        第三列:GID
        第四列:以该组为附加组的用户列表
        
        /etc/shadow 用户密码及其相关属性
        
        第一列:用户名
        第二列:密码位
            为空表示登录不用密码
            $:为加密存放
            *:为账户被锁定
            !!:表示密码过期
        第三列:最后一次修改时间(天数)
        第四列:最小时间间隔:指的是两次修改口令之间所需的最小天数
        第五列:最大时间间隔:指的是两次口令保持有效的最大天数
        第六列:告警时间:从系统开始告警用户到用户密码失效之间的天数
        第七列:不活动时间:表示用户没有登录活动但帐号有效的最大天数
        第八列:失效天数:给出的绝对天数
        
        /etc/gshadow 组密码及其相关属性
        
        第一列:组名
        第二列:组密码第三列:管理员列表,可以更改组密码和成员
        第四列:将该组作为辅助组的成员列表

     用户和组管理命令

        用户管理命令:

            Useradd
            -u: uid 创建用户时指定的uid
            -g:gid 指明创建用户所属组
            -c:用户的注释信息
            -M:不创建家目录
            -s:指定用户的默认shell
            -e:用户过期时间
            -G:为用户指明附加组,组必须提前存在
        
        
        创建用户时默认值设定存放与/etc/default/useradd
        GROUP=100
        HOME=/home            把用户的家目录创建在/home下
        INACTIVE=-1            是否启用帐号过期停权,-1为不启用
        EXPIRE=            帐号终止日期,不设置为不启用
        SHELL=/bin/bash            默认shell
        SKEL=/etc/skel            配置新用户家目录的默认存放位置
        CREATE_MAIL_SPOOL=yes        创建mail文件
    
        /etc/login.defs
        
        Usermod
        
            -u: 新UID
            -g:新主组
            -G:新附加组
            -s:新的默认shell
            -c:新的注释
            -d:HOME 新的家目录;若要创建新的家目录并移动原家目录数据,使用-m选项
            -L:lock指定用户,在/etc/shadow密码增加!
            
            
        Userdel
            
            -r:删除用户时,连通家目录,mail一同删除
    
        Id
            -u:显示UID
            -g:显示GID
            -G:显示用户所属组的id
            -n:显示名称


        Su 切换用户或以其他用户身份执行命令
            (1)su 非登录式切换,不会读取目标用户的部分配置文件,不改变工作目录
            (2)su - 登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
            (3)root使用su切换至其他用户无须密码,其他用户之间切换或者切换到root需要密码
            
            
        passwd:修改指定用户密码,仅root用户使用
            -e:强制用户下次登录修改密码
            --stdin:从标准输入接收用户密码

    组帐号管理:
        Groupadd
            -g:创建指定gid组
            -r:创建系统组
            
        Groupmod
            -n:修改组名
            -g:修改gid
            
        Groupdel
            删除组
            
        Groups
            查看用户所属组列表
            
            
    文件权限:
        普通文件
        
        r: 可以读取文件内容
        w: 可以追加或者覆盖文件内容
        x: 可以执行文件,需要和r配合

        目录文件
        
        r:可以查看目录下有那些文件,不能查看文件的详细信息
        w:可以在目录中创建删除文件,需要x配合
        x:可以cd进入该目录

     Linux特殊权限

    Setuid
        
    当s这个标志出现在文件所有者的x权限上时,例如文件权限 "-rwSr--r--"  说明此文件具有suid特殊权限,SUID功能和限制:
        (1)SUID权限仅对二进制程序有效,首先该二进制需有执行权限
        (2)执行者对于该程序需要具有x的可执行权限;
        (3)本权限仅在执行该程序的过程中有效;
        (4)执行者将具有该程序所有者的权限
        (5)s为小写时,拥有者有x权限,S为大写时,拥有者没有x权限

    常见命令,例如:/usr/bin/passwd

    密码文件通常只有root有强制写功能,也就是说只有root才可以修改密码,但是为什么普通用户也可以修改自己的密码呢?

    因为在/usr/bin/passwd 命令具有SUID权限,在执行时,执行者将具有所有者的权限,所有者是root,所以普通用户也可以修改密码。
    举例:netstat

     SGID

    当s标志出现在文件所有者的x权限时称为SUID,那么s出现在用户组的x权限时称为SGID。(U表示user,G表示group)。SGID有如下功能:
        (1)SGID对二进制和目录都有用
        (2)程序执行者对该程序具备x权限(3)执行者在执行过程中会获得该程序用户组的支持

    举个例子,/usr/bin/locate这个程序可以去查询/var/lib/mlocate/mlocate.db这个文件的内容,mlocate.db的权限如下:

    -rwx--s--x root  slocate /usr/bin/locate
    -rw-r-----   root slocate /var/lib/mlocate/mlocate.db


    若使用vbird这个账号执行locate时,vbird就会获得用户组slocate支持,又由于用户组slocate对mlocate.db具有r权限,所以vbird就可以读取mlocate.db了。

    除了二进制程序外,SGID也可以用在目录上。当一个目录设置了SGID权限后,它具有以下功能:
        (1)用户若对此目录具有r和x权限,该用户能够进入该目录
        (2)用户在此目录下的有效用户组将变成该目录的用户组
        (3)若用户在此目录下拥有w权限,则用户所创建的新文件的用户组与该目录的用户组相同

     SBIT

        sbit目前只对目录有效
        sbit对目录的作用是:
            (1)当用户对此目录具有w和x权限时,即具有写入权限时;
            (2)当用户在该目录下创建新文件或目录时,仅有自己和root才有权限删除

    SUID/SGID/SBIT权限设置

    先将其转换为数字:
        SUID: 4
        SGID: 2
        SBIT: 1

     Linux ACL权限划分

        ACL:access control list 主要是提供传统 读写执行权限以外的具体权限设置,ACL可以针对单一用户、单一文件或者目录进行,对于需要特殊权限的使用状况有一定的帮助。如:某一个文件,不让单一的某个用户访问
        
    ACL使用两个命令来对其进行控制:
        getfacl:获取某个文件、目录的ACL设置项目
        setfacl:设置某个文件、目录的ACL设置项目

     setfacl 参数
      -m:设置后续acl参数
      -x:删除后续acl参数
      -b:删除全部的acl参数
      -k:删除默认的acl参数
      -R:递归设置acl,包括子目录
      -d:设置默认acl

    例:创建一文件test,将其权限修改为777,并查看其默认ACL权限配置

        [root@ localhost ~]# touch /test
        [root@ localhost ~]# chmod 777 /test
        [root@ localhost~]# getfacl /test            //获得文件的ACL权限
        getfacl: Removing leading '/' from absolute path names
        # file: test                                //文件名
        # owner: root                            //文件所属者
        # group: root                            //文件所属组
        user::rwx                                //文件所属者权限
        group::rwx                              //同组用户权限
        other::rwx                              //其它者权限

    可以看到其它者的权限也是可读可写可执行,可以自行测试,现在我们修改其ACL策略,使用用户test只有读取的权限

    [root@zabbix tmp]# setfacl -m u:test:r test
    [root@zabbix tmp]# getfacl test
    # file: test
    # owner: root
    # group: root
    user::rwx
    user:test:r--        # 可以看到 test 单独的权限为 r--
    group::rwx
    mask::rwx
    other::rwx

    注:test权限并不是只根据ACL配置来决定的,它是由test用户基本权限和ACL权限的交集决定的。

    other:rwx
    acl: r--

    所以 test用户只具有 r 权限

    [test@zabbix tmp]$ echo 'abc' > test
    -bash: test: Permission denied
    [test@zabbix tmp]$ rm -rf test
    rm: cannot remove ‘test’: Operation not permitted
    
    [root@zabbix tmp]# ll
    -rwxrwxrwx+ 1 root root 0 Jan 18 07:10 test        # 可以看见,如果文件具有ACL权限后面会多一个加号
    
    取消ACL
    
    [root@zabbix tmp]# setfacl -x u:test test        # 取消test用户acl权限
    [root@zabbix tmp]# setfacl -x m test        # 恢复有效权限
    [root@zabbix tmp]# ll
    total 0
    -rwxrwxrwx 1 root root 0 Jan 18 07:10 test

     linxu隐藏权限

    chattr (配置文件隐藏属性)

    选项与参数:
        + :添加某一个特殊参数,其他原本存在参数则不动.
        - :移除某一个特殊参数,其他原本存在参数则不动.
        = :配置一定,且仅有后面接的参数
        
        A :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime将不会被修改,可避免I/O较慢的机器过度的存取磁碟.这对速度较慢的计算机有帮助
        S :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中.
        a :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 才能配置这个属性.
        c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
        d :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
        i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
        s :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
        u :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁碟中,可以使用来救援该文件喔!
        注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置

    例:

    [root@localhost ~]# cd /tmp/
    [root@localhost tmp]# touch test
    [root@localhost tmp]# lsattr test 
    ---------------- test
    [root@localhost tmp]# chattr +i test 
    [root@localhost tmp]# lsattr test 
    ----i----------- test
    [root@localhost tmp]# rm -rf test 
    rm: cannot remove ‘test’: Operation not permitted
    [root@localhost tmp]# echo 'hello test' > test 
    -bash: test: Permission denied

    -i选项很重要,在系统数据安全方面,由于是隐藏属性,只能lsattr才能查看。

    lsattr (显示文件隐藏属性)
    
        [root@www ~]# lsattr [-adR] 文件或目录
        
        选项与参数:
        -a :将隐藏档的属性也秀出来;
        -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
        -R :连同子目录的数据也一并列出来!
  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/hukey/p/8308967.html
Copyright © 2011-2022 走看看