1.权限简介
- 文件权限主要针对三类对象进行定义
- owner:属主,用u表示
- group:属组,用g表示
- other:其他,用o表示
- all:全部,用a表示
- 每个文件针对每个访问都定义了三种权限
- 通常情况下文件没有被系统执行的权限, 只有少部分例如.sh 脚本文件可以被执行, 目录都有被执行的权限, 因为需要进入目录等操作
-
权限 |
对应的操作对象 |
权限说明 |
r |
文件 |
可读,可以使用类似cat等命令查看文件内容 |
w |
文件 |
可写,可以编辑或删除此文件 |
x |
文件 |
可执行,eXacutable,可以在命令提示符下当做命令提交给内核运行 |
r |
目录 |
可以对此目录执行ls以列出内部的所有文件 |
w |
目录 |
可以在此目录中创建文件,也可以删除此目录中的文件 |
x |
目录 |
可以使用cd切换进此目录,也可以使用ls-l查看内部文件的详细 |
- 权限的二进制与八进制转换
- r-- 100 4
- -wx 011 3
- rwx 111 7
- r=4
- w=2
- x=1
2.权限管理命令
修改权限命令chmod
- chmod 权限 文件
- -R : 递归修改权限,与目录相关的话必须加上
- 修改某类用户:u,g,o
- 加权限用+,减权限用-,直接修改权限用=
- 修改某类权限:r,w,x
- chmod g+wx 123.txt
- chmod g+wx,o=rwx 123.txt
- chmod 777 123.txt
修改属主和属组命令chown
- chown只有管理员可以使用
- chown 需要修改的所有者 文件
- -R 递归修改
- chown root.group1 123.txt 修改属主同时修改属组,也可以把.换成:
- chown .group1 123.txt 只修改属组
修改属组命令chgrp
- 只能修改属组,不能修改属主
- chgrp 需要修改的组名 文件名
添加隐藏属性
- chattr命令用于改变文件的特殊属性。与chmod命令相比,chmod只是改变文件的读写、执行权限,而chattr是基于内核的更底层的属性控制。
命令格式:
chattr [选项] [+/-/=属性] [文件或目录]
选项:
-R //递归
-V //显示过程
模式:
+ //用于增加属性
- //用户删除属性
= //用于指定属性
A //告诉系统不要修改该文件的最后访问时间
a //只能向文件追加数据,不能删除
i //设定文件不能被删除,改名,写入或新增内容
示例:
[root@hzz ~]# chattr +a hzz.txt //为hzz.txt增加a属性
[root@hzz ~]# lsattr hzz.txt //查看文件特殊属性
-----a-------e-- hzz.txt
查看隐藏属性
3.遮罩码
- 文件创建以后默认权限是644,目录创建后默认权限是755,这些是由遮罩码umask控制的
- 遮罩码用于隐藏一些权限,目录最大权限为 777, 文件最大权限为 666, 如果遮罩码是 022, 那么目录默认权限是 755, 文件默认创建出来是 644
- 文件通常不具有执行权限的, 因此其最大权限是 666, 如果计算结果中, 文件具有执行权限, 则会自动将结果+1
- umask 命令可以查看当前的遮罩码
- umask 022 设置遮罩码为022
- echo ''umask 222" >> ~/.bashrc && source ~/.bashrc设置当前用户遮罩码并刷新shell设置
4.Linux安全上下文与特殊权限
Linux安全上下文
- 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限
- 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
- 进程访问文件时的权限取决于进程的发起者
- 进程的文件是文件的属主时,则应用文件属主的权限
- 进程的发起者是文件的属组时,则应用文件属组权限
- 应用文件的"Other"权限
特殊权限
- Linux的默认权限是根据Linux安全上下文的方式来控制的,但特殊权限打破了这个规则
- SUID (可以用 4 代表) : 智能应用到可执行文件中, 应用这个特殊权限后, 在运行程序时, 进程的属主是程序自身的属主, 而不是启动者的属主
- 如果没有SUID,进程谁发起的就属于谁,加了SUID之后,不再是进程谁发起的属于谁,而是看文件的所有者是谁
- chmod u+s 文件
- chmod 4644 文件
- 如果本来就有执行权限会显示为s,否则显示为S
- SGID(可以用2代表):可以应用到文件或目录中,运行程序时,进程的属组是程序自身的属组,而不是启动者的属组
- 如果没有添加特殊权限, 那么目录是创建它的所有者和所属组是谁就属于谁, 加了特殊权限后, 目录的所属组会继承父目录的所属组
- chmod g+s 目录
- chmod 2755 目录
- Sticky (可以用 1 代表): 在一个公共目录, 每个人都能创建文件, 删除自己的文件, 但不能删除别人创建的文件
- chmod o+t 目录
- chmod 1777 目录
- 如果本来就有执行权限会显示为t,否则显示为T
- 7755,表示有SUID,SGID,Sticky权限,以及rwxr-xr-x权限
5.文件访问系统控制列表FACL
- FACL (Filesystem Access Control List), 利用文件扩展保存额外的访问控制权限,针对某个用户来设置权限
- setfacl [-bkndRLP] {-m/-M/-x/-X} file
- -m 设定
- u:用户名或用户ID:需要设置的权限 文件名
- g:组名或组ID:rw file
- d:设置为默认权限,在此目录内创建的文件会继承目录的facl权限
- setfacl -m d:u:158LYF:rw- file
- -x 取消指定对象的权限
- -b 取消所有指定的权限
- getfacl file 查看权限
6.sudo借权
- sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令,给一个普通用户提权
- sudo的配置文件位置:/etc/sudoers
- 使用visudo命令进行sudo的配置,每一行就是一个sudo条目
- who which_hosts=(runas)command
- who:User_Alias 表示运行命令者的身份
- which_hosts:Host_Alias 通过哪些主机
- runas:Runas_Alias, 以哪个用户的身份
- command:Cmnd_Alias 运行哪些命令
- 不需要验证密码的话,可以在命令前输入NOPASSWD:
- 哪个用户 在哪台主机上=(以哪个用户的身份) 执行哪个命令
- 别名必须全部且只能使用大写英文字母的组合,可以使用感叹号取反
- 用户别名:
- User_Alias NETWORKADMIN = 用户名/%组名/其他已经定义的用户别名
- 主机别名:
- Host+Alias=主机名/IP及地址/网络地址/其他主机别名
- 命令别名:
- Cmnd_Alias =命令路径/目录(此目录内所有命令)/其他已经定义的别名
- sudo [option] COMMAND 给普通用户提权
- -v 显示版本编号
- -h 会显示版本编号及指令的使用方式说明
- -l 列出当前用户可以使用的所有sudo类命令
- -v 因为sudo在第一次执行时或是N分钟内没有执行(N默认为5),会询问密码,这个参数是重新做一次确认,如果超过N分钟也会询问密码
- -k 让认证信息失效,如果不指定-k,默认会在5分钟后失效
- -b 将要执行的命令放到后台执行
- -u username 以指定的用户执行命令,默认为root
- 具体操作
- 给普通用户提权:
- 创建普通用户,并给普通用户设置密码
- 找到命令的绝对路径,所有命令用ALL代替
- 授权的用户 ALL=(ALL) 需要授权的命令(绝对路径)
- 切换普通用户验证,执行命令前必须加上sudo才能执行成功
7.管理命令
- w:显示当前登录的用户有哪些,以及其在正在做什么
- sleep:睡眠,表示停顿多少秒后再执行后面的命令
- last 显示/var/log/wtmp,显示用户登录历史以及系统重启历史
- lastb 显示/var/log/btmp,xianshi 显示用户错误的登录尝试
- lastlog 显示每个用户最近一次成功登录的信息
- -u username 显示特定用户最近的登录信息
- basename 显示路径基名
- dirname 显示路径目录名