基础命令及用户管理

 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 :连同子目录的数据也一并列出来!
原文地址:https://www.cnblogs.com/hukey/p/8308967.html