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 :连同子目录的数据也一并列出来!