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就可以查看当前目录下所有文件和子目录的权限信息了。

假设回显信息为 -rwsr-xr-x1rootroot430540Dec 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。

然后通过chmod4755文件就可以改变文件的权限,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下所有资源、设备均被视作文件来操作,而文件权限则是决定用户可各文件的更多相关文章

  1. ios – 伞框架

    错误.应用程序,通常位于…错误仍然存在你也可以在这里添加(子)框架的路径.

  2. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  3. 如何在xcode 6中构建32位和64位的单二进制文件

    我已经遵循this堆栈溢出解决方案,但即使我得到低于警告.我已经选择虽然我得到了警告.请帮帮我.谢谢.解决方法有同样的问题.看起来将’arm64’添加到ValidArchitectures解决了它.

  4. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  5. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  6. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  7. ios – 从icloud备份中限制sqlite-wal和sqlite-shm

    我是第一次使用coredata,我必须从文档目录中的iCloud备份限制sqlitedb文件,我使用下面的代码完成了它//阻止iCloud备份文档目录文件夹现在我不明白的是,我们还需要从icloud备份中限制sqlite-wal和sqlite-shm文件,如果是,那么如何从icloud备份限制sqlite-wal和sqlite-shm文件我想要一个解决方案,而无需从文档目录文件夹中更改sqlitedb位置…

  8. ios – 将二进制文件上传到Apple的iTunesConnect时会发生什么?

    我问,因为:它可能指向我们可以做的事情来加快这个过程.大约一年前,这个过程从“缓慢,因为苹果的服务器功率不足”变得“非常缓慢,因为苹果公司使用的带宽是发送二进制文件所需带宽的3倍”.例如我最近提交了一个90Mb应用程序,Xcode4将超过350Mb的数据上传到Apple.例如刚才我提交了一个8Mb的二进制文件,Xcode4将超过40Mb的数据上传到Apple.最近上传者有了很大的改进.但我想知道:苹果在上传期间实际上做了什么?

  9. iOS:如何从文档目录中删除具有特定扩展名的所有现有文件?

    当我更新我的iOS应用程序时,我想删除Documents目录中的任何现有sqlite数据库.现在,在应用程序更新时,我将数据库从软件包复制到文档目录,并通过附加软件包版本来命名它.因此,在更新时,我还想删除可能存在的任何旧版本.我只是希望能够删除所有sqlite文件,而无需循环浏览并查找以前版本的文件.是否有任何方法可以对removeFileAtPath:方法进行通配符?解决方法那么,你想要删除所有*.sqlite文件?

  10. ios – iTunes Connect警告:“您的二进制文件不支持iPad”

    我刚刚将一个新的二进制文件上传到iTunesConnect,并将其添加到iOS版本的新版本.添加二进制文件并保存更改后,iTunesConnect会显示警告消息:“您的二进制文件不支持iPad,iPad的屏幕截图或应用视频预览将不会显示在AppStore上.”Xcode项目是使用Cordova3CLI生成的;自从应用从Cordova2迁移以来,上传的二进制文件是第一个Cordova3版本.该应用程

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部