RHEL7文件权限
本文介绍Linux下的文件权限 操作系统为RHEL7.2_X86_64
可以从以下三种访问方式限制访问权限:
1 只允许用户自己访问
2 允许一个预先指定的用户组中的用户访问
3 允许系统中的任何用户访问
文件的所属用户或者root用户可以将这些权限改变为任何他想指定的权限。
一个只有读权限的文件,是禁止进行任何修改的。
只有执行权限的,允许它想一个程序一样执行。
查看权限
我们之前已经很多次用到 ls命令了,如你所见,我们用它来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下,它能做的当然不止这么多,现在我们就要用它来查看文件权限。
[root@VM_200_13_centos ~]# ls -l
total 8
drwxr-xr-x 2 root root 4096 Aug 14 11:37 auth
-rw-r--r-- 1 root root 7 Aug 14 11:34 auth.txt
文件类型
基本权限
基本权限 | 说明 |
---|---|
r | 对文件而言,具有读取文件内容的权限 对目录来说,具有浏览目录的权限 |
w | 对文件而言,具有新增、修改文件内容的权限 对目录来说,具有删除、移动目录内文件的权限 |
x | 对文件而言,具有执行文件的权限 对目录了来说该用户具有进入目录的权限 |
- | 表示不具有该项权限 |
举例说明:
例子 | 说明 |
---|---|
-rwx------ | 文件所有者对文件具有读取、写入和执行的权限 |
-rwxr--r-- | 文件所有者具有读、写与执行的权限 其他用户则具有读取的权限 |
-rw-rw-r-x | 文件所有者与同组用户具有读写权限 其他用户具有读取和执行权限 |
drwx--x--x | 目录所有者具有浏览目录修改(删除、移动)目录和进入目录的权限 同组用户和其他用户具有进入目录的权限 |
drwx------ | 除了目录所有者具有完整的权限之外 其他用户对该目录完全没有任何权限 |
特殊权限
其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”。
因而用户若无特殊需求,不应该启用这些权限,避免安全方面出现严重漏洞,造成入侵,甚至摧毁系统!
s
SUID
SUID(Set UID)当一个可以执行文件具有SUID权限,用户执行这个程序时,将以这个程序的所有者身份执行。
在设置s权限时文件属主必须先设置相应的x权限,否则s权限并不能正真生效。
chmod命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效。
Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件的权限确可以修改自己的密码。
可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。
请注意具备SUID权限的文件,骇客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用
[root@VM_200_13_centos ~]# su - test
Last login: Sun Aug 14 19:05:04 CST 2016 on pts/0
[test@VM_200_13_centos ~]$ which passwd
/bin/passwd
[test@VM_200_13_centos ~]$ ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
该文件的所属用户和所属用户组均为root,显然test用户不具有该执行文件的读写执行权限
但是该文件被赋予了SUID权限,任意执行该执行文件的用户都能以该文件所属用户(root用户)的身份执行该文件
[test@VM_200_13_centos ~]$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
因为具有SUID权限所有普通用户执行该命令能修改密码
SGID
设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件就可以任意存取整个用户组所能使用的系统资源。
强调: SUID一般用在文件上(脚本) SGID用在目录上比较多
t
t权限代表SBIT(Sticky):只针对目录有效,对文件无效,作用是防止别人删除掉对方的资料
因为SUID、SGID、Sticky占用x的位置来表示,所以在表示上会有大小写之分。
加入同时开启执行权限和SUID、SGID、Sticky,则权限表示字符是小写的
如果不具有x权限,会以大写显示
[root@VM_200_13_centos ~]# mkdir test
[root@VM_200_13_centos ~]# ll
total 4
drwxr-xr-x 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod u+s test/
[root@VM_200_13_centos ~]# ll
total 4
drwsr-xr-x 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod u-x test/
[root@VM_200_13_centos ~]# ll
total 4
drwSr-xr-x 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod g+s test/
[root@VM_200_13_centos ~]# ll
total 4
drwSr-sr-x 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod g-x test/
[root@VM_200_13_centos ~]# ll
total 4
drwSr-Sr-x 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod o+t test/
[root@VM_200_13_centos ~]# ll
total 4
drwSr-Sr-t 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod o-x test/
[root@VM_200_13_centos ~]# ll
total 4
drwSr-Sr-T 2 root root 4096 Aug 14 19:59 test
修改权限
chmod
命令:chmod
作用:修改文件的权限
语法:chmod [选项] MODE 文件...
选项 | 说明 |
---|---|
-c | 只输出成功修改权限的文件权限更改信息 |
-f | 忽略大部分的错误信息 |
-v | 输出详细信息 |
-R | 递归更改目录和文件的权限 |
-rwxrwxrwx
-rwxrwxrwx的第一个字符表示这是一个普通文件,之后每三个字符分别代表的是用户权限、用户组权限、其他用户权限
用户权限用u表示
用户组权限用g表示
其他用户权限用o表示
那么chmod命令的MODE第一种方式可以为指定用户或用户组或其他用户授权
u+x:表示授予用户对该文件的可执行权限
g+r:表示授予用户组对该文件的可读权限
o-w:表示取消其他用户对该文件的写权限
[root@VM_200_13_centos ~]# ll
total 4
drwsr-Sr-T 2 root root 4096 Aug 14 19:59 test
[root@VM_200_13_centos ~]# chmod u-x test/
[root@VM_200_13_centos ~]# chmod g+w test/
[root@VM_200_13_centos ~]# chmod o+w test/
[root@VM_200_13_centos ~]# ll
total 4
drwSrwSrwT 2 root root 4096 Aug 14 19:59 test
如果要为文件设置多个用户权限(用户权限、用户组用户权限、其他用户权限)这种方式就很麻烦,需要多次设置
这种情况使用权限的二进制数表达形式设置会非常效率
权限 | 二进制 | 十进制 |
---|---|---|
r | 100 | 4 |
w | 10 | 2 |
x | 1 | 1 |
s | SUID:100 SGID:10 |
SUID:4 SGID:2 |
t | 1 | 1 |
- | 0 | 0 |
对于 -rwxrwxrwx 除去第一位表示文件类型外
rwxrwxrwx每三位为一组用二进制表示:111 111 111
rwxrwxrwx每三位为一组用十进制表示:7 7 7
最终我们使用计算出的十进制数为文件进行授权
[root@VM_200_13_centos ~]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# chmod 000 a
[root@VM_200_13_centos ~]# ll
total 0
---------- 1 root root 0 Aug 14 20:41 a
例子 | 说明 |
---|---|
-rwx------ | 二进制:111000000 十进制:700 权限:所属用户具有读写执行,所属用户组用户和其他用户没有任何权限 |
-rwx---rwx | 二进制:111000111 十进制:707 权限:所属用户和其他用户具有读写执行,所属用户组用户没有任何权限 |
-rwx--xrwx | 二进制:111001111 十进制:717 权限:所属用户和其他用户具有读写执行,所属用户组用户只有执行权限 |
[root@VM_200_13_centos ~]# chmod 711 a
[root@VM_200_13_centos ~]# ll
total 0
-rwx--x--x 1 root root 0 Aug 14 20:41 a
如果要授予特殊权限SUID(4)、SGIU(2)、SBIT(1)则要使用4位1进制数表示
[root@VM_200_13_centos ~]# ll
total 0
---------- 1 root root 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# chmod 7000 a
[root@VM_200_13_centos ~]# ll
total 0
---S--S--T 1 root root 0 Aug 14 20:41 a
chown
命令:chown
作用:修改文件拥有者和所属组
语法:chown [选项] [所属用户][:所属用户组] 文件...
选项 | 说明 |
---|---|
-c | 只输出成功修改权限的文件权限更改信息 |
-f | 忽略大部分的错误信息 |
-v | 输出详细信息 |
-h | 修复符号链接 |
-R | 递归更改目录和文件的权限 |
--deference | 作用于符号链接的指向,而不是链接文件本身 |
[root@VM_200_13_centos ~]# ll
total 0
---S--S--T 1 root root 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# chown test:test a
[root@VM_200_13_centos ~]# ll
total 0
------S--T 1 test test 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# chown root a
[root@VM_200_13_centos ~]# ll
total 0
------S--T 1 root test 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# chown :test1 a
[root@VM_200_13_centos ~]# ll
total 0
------S--T 1 root test1 0 Aug 14 20:41 a
[root@VM_200_13_centos ~]# mkdir -p ~/aa/b/c
[root@VM_200_13_centos ~]# touch aa/a
[root@VM_200_13_centos ~]# chown -R -v :test1 aa/
ownership of 'aa/a' retained as root:test1
ownership of 'aa/b/c' retained as root:test1
ownership of 'aa/b' retained as root:test1
ownership of 'aa/' retained as root:test1
默认权限
我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢?
umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反。
umask设置的是权限补码,而chmod设置的是文件权限码。
一般在/etc/profile、宿主目录下的.bash_profile或 .profile中设置了umask的默认值。
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。
对于文件来说,这一数字的最大值分别是6。
系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。
目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。
该命令的一般形式为:umask nnn 其中nnn为umask置000 - 777。
我们只要记住umask是从权限中拿走相应的位即可。
如:umask值为022,则默认目录权限为755,默认文件权限为644。
计算方法:
文件默认权限=666-umask值 666-022=644
目录默认权限=777-umask 值 777-022=755
举例:创建 一个文件:
umask=033
touch c.txt
那么c.txt的默认文件权限是?
umask掩码为033
666-033=633 结果为:644
文件属性
命令:chattr
作用:可改变存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性
语法:chattr [选项] [属性] [-v(版本)] 文件...
选项 | 说明 |
---|---|
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | <版本编号> 设置文件或目录版本 |
-V | 显示指令执行过程 |
+ | 开启文件或目录的指定属性 |
- | 关闭文件或目录的指定属性 |
= | 指定文件或目录的指定属性 |
属性 | 说明 |
---|---|
A | 即Atime,告诉系统不要修改对这个文件的最后访问时间 |
S | 即Sync,一旦应用程序对这个文件执行了写操作 使系统立刻把修改的结果写到磁盘 |
a | 即Append Only,系统只允许在这个文件之后追加数据 不允许任何进程覆盖或截断这个文件 如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件 而不允许删除任何文件 |
b | 不更新文件或目录的最后存取时间 |
c | 将文件或目录压缩后存放 |
d | 当dump程序执行时,该文件或目录不会被dump备份 |
D | 检查压缩文件中的错误 |
i | 即Immutable,系统不允许对这个文件进行任何的修改 如果目录具有这个属性,那么任何的进程只能修改目录之下的文件 不允许建立和删除文件 |
s | 彻底删除文件,不可恢复,因为是从磁盘上删除 然后用0填充文件所在区域 |
u | 当一个应用程序请求删除这个文件 系统会保留其数据块以便以后能够恢复删除这个文件 用来防止意外删除文件或目录 |
t | 文件系统支持尾部合并(tail-merging) |
X | 可以直接访问压缩文件的内容 |
注意事项:
chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的
linux系统都是2.6以上内核了。
通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。
chattr命令不能保护/、/dev、/tmp、/var目录。
lsattr命令是显示chattr命令设置的文件属性。
这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。
应用举例:
用chattr命令防止关键密码文件被修改
[root@VM_200_13_centos ~]# chattr +i /etc/passwd
[root@VM_200_13_centos ~]# lsattr /etc/passwd
----i----------- /etc/passwd
要想修改此文件就要把i属性去掉
[root@VM_200_13_centos ~]# chattr -i /etc/passwd
[root@VM_200_13_centos ~]# lsattr /etc/passwd
---------------- /etc/passwd
让某个文件只能往里面追加数据但不能删除
适用于各种日志文件,还是以密码文件为例
[root@VM_200_13_centos ~]# chattr +a /etc/passwd
[root@VM_200_13_centos ~]# lsattr /etc/passwd
-----a---------- /etc/passwd
[root@VM_200_13_centos ~]# chattr -a /etc/passwd
[root@VM_200_13_centos ~]# lsattr /etc/passwd
---------------- /etc/passwd
RHEL7文件权限的更多相关文章
- 第八天 RHEL7.2 文件权限管理(第一部分)
一.文件的基本权限 文件有三种访问方式限制访问权限 第一种:文件所有者的访问权限 第二种:文件所有者同组的访问权限 第三种:其他人访问权限 当使用ls -l 或ll命令时,可查看此三种权限 在权限描述 ...
- RHEL7文件查找
本文介绍RHEL7下which.whereis.locate.find命令的使用,重点介绍find命令的使用 which 命令:which 作用:查找命令的执行文件路径 语法:which [选项] [ ...
- linux用户、文件权限相关命令
root 现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源. 普通用户在所 ...
- 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装
Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...
- 《Linux就该这么学》培训笔记_ch05_用户身份与文件权限
<Linux就该这么学>培训笔记_ch05_用户身份与文件权限 文章最后会post上书本的笔记照片. 文章主要内容: 用户身份与能力 文件权限与归属 文件的特殊权限 文件的隐藏属性 文件访 ...
- linux入门系列9--用户管理及文件权限控制
前面文章分享了Linux下常用命令以及Shell编程相关知识,本节继续学习Linux用户管理及文件权限控制. Linux是多用户多任务操作系统,具有很好的稳定性和安全性.既然是多用户,那就意味 ...
- Atitit godaddy 文件权限 root权限设置
Atitit godaddy 文件权限 root权限设置 1. ubuntu需要先登录,再su切换到root1 2. sudo 授权许可使用的su,也是受限制的su1 3. ubuntu默认吗roo ...
- Linux用户体系和文件权限总结
一. Linux系统用户和用户组相关文件 1. /etc/passwd文件 这个passwd文件是Linux用户信息文件.文件格式说明如下: root:x:0:0:root:/r ...
- 【转】linux查看及修改文件权限以及相关
linux查看及修改文件权限以及相关 查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有 ...
随机推荐
- tcp/ip协议listen函数中backlog参数的含义与php-fpm的502 Bad Gateway
To understand the backlog argument, we must realize that for a given listening socket, the kernel ma ...
- BAPI 调用相当于BAPI_TRANSACTION_COMMIT 的方法
为什么.net调用SAP的BAPI接口需要调用BAPI_TRANSACTION_COMMIT呢?首先得明白BAPI_TRANSACTION_COMMIT这个BAPI的作用.它功劳很大,在SAP里面很多 ...
- rm: 无法删除"/run/user/root/gvfs": 是一个目录 问题
2013-03-02 bxd@linux:~$ sudo su [sudo] password for bxd: root@linux:/home/bxd# exit exit rm: 无法删 ...
- 一起做RGB-D SLAM 第二季 (一)
小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...
- 【Java设计模式】单例模式
### 1. 概述> 单例模式是确保某一个类中有且只有一个实例. ----------### 2. 饿汉式单例``` javapublic class SingletonInstance { p ...
- 【PRML读书笔记-Chapter1-Introduction】1.5 Decision Theory
初体验: 概率论为我们提供了一个衡量和控制不确定性的统一的框架,也就是说计算出了一大堆的概率.那么,如何根据这些计算出的概率得到较好的结果,就是决策论要做的事情. 一个例子: 文中举了一个例子: 给定 ...
- log4net各种Filter使用
log4net里面的filter类常用的为: 1.DenyAllFilter 拒绝所用的日志输出 <filter type="log4net.Filter.LevelMatchFilt ...
- window xp Apache与Tomcat集群配置--转载
转载地址:http://www.cnblogs.com/obullxl/archive/2011/06/09/apache-tomcat-cluster-config.html 一. 环境说明 Win ...
- Python文件操作详解
Python内置了一个open()方法,用于对本地文件进行读写操作.这个功能简单.实用,属于必须掌握的基础知识. 使用open方法操作文件可以分三步走,一是打开文件,二是操作文件,三是关闭文件.下面分 ...
- 谈Mysql索引
myisam和innodb的索引有什么区别? 两个索引都是B+树索引,但是myisam的表存储和索引存储是分开的,索引存储中存放的是表的地址.而innodb表存储本身就是一个B+树,它是用主键来做B+ ...