CentOS6.5菜鸟之旅:文件权限详解
一、前言
Linux下所有资源、设备均被视作文件来操作,而文件权限则是决定用户可各文件操作的范围,无论是平时使用Linux,还是写程序均涉及这方面。以下为个人学习的整理,供以后查阅。
二、 三种权限
1. 普通权限
| 权限 | 文件 | 目录 |
| r,读权限 | 查看文件内容 | 列出其子目录结构信息(就是可执行 ls 目录 ) |
| w,写权限 | 配合r权限,则可对文件进行修改和删除 | 配合x权限就可以添加、删除和移动内部文件,而删除目录和复制目录内文件则需要配合r和x权限。 |
| x,执行权限 | 配合r权限,可执行的权限 | 可以进入该目录和对其下文件作操作(就是可执行 cd 目录 ) |
2. 特殊权限
场景1:用户A在调用程序B时,且程序B需要修改文件C,而用户A无权修改文件C,那么程序B同样将被拒绝修改文件C。
原因:程序将使用调用者(就是用户A)的用户标识去对系统作操作,程序的权限与调用者的权限一致。
需要:让程序使用与调用者无关的用户或用户组标识,那么任何调用者执行该程序时均无差异。
解决办法:使用特殊权限SUID和GUID。
| 权限 | 文件 | 目录 |
| SUID |
注意:仅对二进制可执行文件设置 二进制可执行文件会以所有者和调用者的用户标识去执行,也就是拥有两者的权限。 |
不对目录设置 |
| GUID |
注意:仅对二进制可执行文件设置 二进制可执行文件会以所属组和调用者的标识去执行,也就是拥有两者的权限。 |
在目录下创建文件、目录等,其所属组与该目录的所属组相同。而不是所有者的用户组了。 |
场景2:某用户在执行 rm -rf 目录/* 时,把所有者不是它的文件、目录都误删除了。
原因:默认情况下,只要用户拥有某目录的wx权限,则可以删除、剪切该目录下的所有文件、目录,即使该用户对该目录下的文件、目录任何权限都没有。
需求:只删除所有者为自己的文件、目录。
解决办法:使用特殊权限SBIT。
| 权限 | 文件 | 目录 |
| SBIT(stick bit,粘滞位) | 不对文件设置 | 配合wx权限,仅目录的所有者、子目录或文件的所有者和root用户才能删除、移动该目录下的子目录和文件 |
3. 隐藏权限
共13种,仅在文件系统格式为Ext2+才有效。
三、通过命令了解权限
上一节我们从概念上了解了linux的文件权限的种类,下面通过命令来实干一番。
1. 查看权限
输入 ls -l 就可以查看当前目录下所有文件和子目录的权限信息了。
假设回显信息为 ①-②rws③r-x④r-x ⑤1 ⑥root ⑦root ⑧430540 ⑨Dec 20 18:27 ⑩/usr/sbin/passwd ,现在逐一分析其内容。
①. 首字符-,表示该文件为普通文件。
-,普通文件;
d,目录文件;
l,符号链接;
c,字符设备文件;
b,字节设备文件;
p,先进先出文件;
s,套接字文件。
②. 第2~4个字符,表示所有者(owner)的权限
③. 第5~7个字符,表示所属组(group)的权限
④. 第8~10个字符,表示其他用户(other)的权限
⑤. 第11个字符,表示硬链接数
⑥. 是文件所有者的用户名称(owner)
⑦. 是文件所属组的用户组名称(group)
⑧. 是文件大小,以块为单位,通过 ls -lh 则会以KB,MB作单位
⑨. 是最后修改日期
⑩. 是文件或目录的绝对路径
从上述内容我们可以得知Linux下的权限角色有三种,分别是所有者(owner)、所属组(group)和其他用户(other)。
2. 权限表示形式
[a]. 符号表示法
普通权限:
r,读权限; w,写权限;x,可执行权限。
特殊权限:
SUID权限只能设置在②中,s表示二进制可执行文件同时拥有SUID权限和x可执行权限;S表示二进制可执行文件拥有SUID权限但没有x可执行权限。
SGID权限只能设置在③中,s表示二进制可执行文件或目录同时拥有SGID权限和x可执行权限;S表示二进制可执行文件或目录拥有SGID权限但没有x可执行权限。
SBIT权限只能设置在④中,t表示目录同时拥有SBIT权限和x可执行权限;T表示目录拥有SBIT权限但没有x可执行权限。
[b]. 数字表示法
数字表示法采用二进制形式计算,八进制形式设置的方式。
二进制形式计算,1代表有权限,0代表无权限:
| 所有者 | 所属组 | 其他用户 | |||||||||
| SUID | SGID | SBIT | R | W | X | R | W | X | R | W | X |
| 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 |
然后每三位为一组转为八进制,例如现在二进制形式为100111101101,那么转为八进制则为4755。
然后通过 chmod 文件 就可以改变文件的权限, ls -l 回显中权限部分则为rwsr-xr-x。
注意:1. 若不设置特殊权限时,我们可以直接省去八进制的第一位数,例如: chmod 755 文件 ;
2. 采用数字表示法设置特殊权限,仅能启动特殊权限,却无法关闭。例如,文件A拥有特殊权限SUID和SGID,执行 chmod 0755 文件A ,但通过 ls -l 查看权限依然为rwsr-sr-x。
四、通过符号表示法设置权限
通过数组表示法设置权限有时确实不够方便,于是bash为我们提供了符号表示法来设置权限。
设置普通权限
// 为所有者、所属组和其他用户添加执行的权限
chmod +x 文件路径
// 为所有者、所属组和其他用户删除执行的权限
chmod -x 文件路径 // 为所有者添加执行的权限
chmod u+x 文件路径
// 为所属组添加执行的权限
chmod g+x 文件路径
// 为其他用户添加执行的权限
chmod o+x 文件路径
// 为所有者、所属组添加执行的权限
chmod ug+x 文件路径 // 为所有者、所属组和其他用户添加写、执行的权限,取消读权限
chmod =wx 文件路径
// 为所有者、所属组添加写、执行的权限,取消读权限
chmod ug=wx 文件路径
设置特殊权限
// 开启、关闭SUID
chmod u+s 文件名
chmod u-s 文件名 // 开启、关闭SGID
chmod g+s 文件名
chmod g-s 文件名 // 开启、关闭SBIT
chmod o+t 文件名
chmod o-t 文件名
五、改变所有者、所属组
1. 查看用户信息
// 查看当前用户
whoami // 查看当前用户所属组
groups // 查看其他用户所属组
groups 用户1 用户2
2. 改变所有者、所属组
仅root用户才有权限执行下列命令。
// 改变所有者
chown 用户名 文件路径 // 改变所属组
chgrp 用户组 文件路径 // 改变所有者和所属组
chown 用户名.用户组 文件路径 // 递归改变所有者和所属组
chown -R 用户名.用户组 目录路径
六、管理用户
1. 添加用户
命令: useradd [-u uid] [-g group] [-d home] [-s shell] 用户名
-u,用户ID,用户ID是给系统使用的,而用户名是给用户使用的,两者是一一对应的关系
-g,用户所属的用户组标识
-d,以已存在的目录作为用户的家目录
-s,定义shell
示例:
// 添加用户标识 garfield
# useradd garfield
并通过查看/etc/passwd、/etc/shadow和/etc/group文件内容,检查用户是否创建成功。具体内容如下

注意:在创建用户时,系统会根据/etc/login.defs和/etc/default/useradd文件的内容对新用户做基本设置。
/etc/login.defs文件内容:

/etc/default/useradd

SKEL选项是指定用户家目录内容是从`/etc/skel`复制过来的。
2. 设置密码
命令: passwd 用户名 密码
3. 启用、禁用帐号
// 禁用
# usermod -L 用户名
// 启用
# usermod -U 用户名
启用禁用实质就是在`/etc/shadow`文件中该用户名对应的记录上,在用户密码前删除、添加!(感叹号)来实现。
4. 其他
// 将用户添加到用户组
usermod -G 用户组名 用户 // 改变用户的用户组
usermod -g 用户组名 用户 // 修改用户名
usermod -l 新用户名 旧用户 // 删除用户
userdel 用户名
六、管理用户组
// 添加用户组
groupadd [-g gid [-o]] [-r] [-f] 用户组名 // 修改用户组名称
groupmod -n 新用户组名 旧用户组名 // 删除用户组
groupdel 用户组名
七、用户、用户组的配置文件
1. /etc/passwd,任何用户都可以读取该文件的内容。存放各个用户的用户名称、加密后的密码(若操作系统采用了shadow技术,则用加密密码在/etc/shadow文件中,这里用x或\*表示)、用户ID(一个用户ID可以对应多个用户名,每个用户名拥有独立的口令、家目录和shell,但系统会认为这些用户名是同一个用户。0是超级用户,1~99系统保留,100开始是普通用户,默认从500建普通用户。整体取值范围是0~65535)、用户组ID(对应/etc/group中的一条记录)、注释性描述字符串、家目录、shell程序路径<br/>
伪用户(psuedousers):shell程序路径为空或为/sbin/nologin,主要用于方便系统管理、满足相应系统进程对文件属性的要求。
伪用户如下:
bin,拥有可执行的用户命令文件
sys,拥有系统文件
adm,拥有账号文件
uucp,UUCP使用
lp,lp或lpd子系统使用
nobody,NFS使用
可通过设置"shell程序路径"为某程序,限制某用户进入系统后仅能执行该程序,程序执行结束则退出系统。
2. /etc/shadow,仅超级用户可以查看和修改,由pwconv命令根据/etc/passwd中的数据自动生成,记录为一对一关系。记录格式为:用户名、加密后的密码(固定长度为13个字符,空则表示没有密码,若含\./0-9A-Za-z的字符则无法登录)、最后修改密码的时间(以距离1970年1月1日的天数来计算)、最小时间间隔(修改密码的最小天数)、最大时间间隔(密码有效天数)、警告时间(从系统开始警告用户修改密码到无法登录的天数)、不活动时间(用户没有登录活动,但账号仍保持有效的最大天数)、失效时间(用户名的有效天数)
3./etc/group,存放用户组名称、用户组加密后的密码(空、\*或x表示没有密码)、用户组ID、成员用户名称(成员用户名称间用,隔开)
八、总结
Linux的文件权限暂时了解到这里吧,以后继续深入继续补充!
尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/3999224.html ^_^肥仔John
九、参考
http://blog.csdn.net/fan_zhen_hua/article/details/2050009
http://blog.csdn.net/xsz0606/article/details/5256719
http://blog.chinaunix.net/uid-20671208-id-3488852.html
http://www.cnblogs.com/huangzhen/archive/2011/08/22/2149300.html
http://blog.csdn.net/liqfyiyi/article/details/7742775
http://os.51cto.com/art/201003/187591.htm
http://os.51cto.com/art/201003/187572.htm
CentOS6.5菜鸟之旅:文件权限详解的更多相关文章
- 【Linux学习】Linux下用户组、文件权限详解
原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...
- (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解
Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...
- linux学习之路第八天(linux文件权限详解)
建议和我上一篇博客一起通读,效果更加 1.权限的基本介绍 通过一张图片解决疑惑(重点) rwx权限详解 rwx作用到文件 1)[r]代表可读(read) :可以读取,查看 2)[w]代表可写(writ ...
- Linux下用户组、文件权限详解
在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建者,谁创 ...
- [转]Linux文件权限详解
转自:http://blog.chinaunix.net/uid-25052030-id-174343.html 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问 ...
- linux文件权限详解
一.文件和目录权限概述在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允许一 ...
- linux: 用户组, 文件权限详解
一.用户组 linux中每个用户必须属于一个组,不能独立于组外. 每个文件有所有者.所在组.其他组的概念 --所有者 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者 用ls ‐ahl命 ...
- linux系统中的文件权限详解(转)
一.在<Linux系统中如何查看文件属性>中介绍了通过ls指令来查看文件的属性,具体如下: [命令] letuknowit@ubuntu:/$ cd /tmp letuknowit@ubu ...
- Linux之用户组、文件权限详解
用户和用户组 文件所有者(u) 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者 用ls ‐ahl命令可以看到文件的所有者 也可以使用chown 用户名 文件名来修改文件的所有者 用户组 ...
随机推荐
- 动态变化的OO设计
今天看到个题目:对象会动态的变化. 游戏精灵,有人和神仙,但是随着人的不断积分,会升级为神仙:神仙也可能会因为积分的减少而降级为人.这种情况怎么画出个类图来. 这是第一版的设计,正常思维.人和神仙都是 ...
- Socket原理与编程基础(转)
一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...
- vc 实现打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...
- 使用ClipboardUtils兼容API LEVEL 11以下实现复杂粘贴
实现功能:复杂粘贴内容 问题描述:android.content.ClipboardManager在APILevel 11之后才可以使用,而我们目前还要兼容API Level 10(2.3.3) 解决 ...
- 关于Server Sql 2008触发器的使用
1.创建同一个服务器下同一个数据库实例两个不同数据库表同步方法 --==================================== -- Create database trigger -- ...
- IP和端口的意义
百科说明 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器.交换机.路由器上用 于连接其他网络设备的接口,如RJ-45端口.S ...
- ECShop在任何页面调用最新文章并变成随机文章
一.让最新文章变成随机文章 在根目录 打开index.php文件 查找代码 ' ORDER BY a.article_type DESC, a.add_time DESC LIMIT ' . $GLO ...
- Hive Streaming 追加 ORC 文件
1.概述 在存储业务数据的时候,随着业务的增长,Hive 表存储在 HDFS 的上的数据会随时间的增加而增加,而以 Text 文本格式存储在 HDFS 上,所消耗的容量资源巨大.那么,我们需要有一种方 ...
- 【特别推荐】8个富有创意的jQuery/CSS3插件
现在的互联网上什么都有,但是真正好的创意却非常稀缺,包括WEB界面也是如此,今天我们要特别推荐8个富有创意的jQuery/CSS3插件,也许这几个插件能让你的WEB界面更加富有创意和人性化. 1.jQ ...
- getRequestURI,getRequestURL的区别
转自:http://www.cnblogs.com/JemBai/archive/2010/11/10/1873764.html test1.jsp======================= &l ...