CentOS6.5菜鸟之旅:文件权限详解

1、前言                                html

  Linux下全部资源、设备均被视做文件来操做,而文件权限则是决定用户可各文件操做的范围,不管是平时使用Linux,仍是写程序均涉及这方面。如下为我的学习的整理,供之后查阅。linux

 

2、 三种权限                             shell

1. 普通权限数组

权限 文件 目录
r,读权限 查看文件内容 列出其子目录结构信息(就是可执行 ls 目录 )
w,写权限 配合r权限,则可对文件进行修改和删除 配合x权限就能够添加、删除和移动内部文件,而删除目录和复制目录内文件则须要配合r和x权限。
x,执行权限 配合r权限,可执行的权限 能够进入该目录和对其下文件做操做(就是可执行 cd 目录 )

2. 特殊权限bash

    场景1:用户A在调用程序B时,且程序B须要修改文件C,而用户A无权修改文件C,那么程序B一样将被拒绝修改文件C。学习

    缘由:程序将使用调用者(就是用户A)的用户标识去对系统做操做,程序的权限与调用者的权限一致。ui

    须要:让程序使用与调用者无关的用户或用户组标识,那么任何调用者执行该程序时均无差别。加密

    解决办法:使用特殊权限SUID和GUID。spa

权限 文件 目录
SUID

注意:仅对二进制可执行文件设置操作系统

二进制可执行文件会以全部者和调用者的用户标识去执行,也就是拥有二者的权限。

不对目录设置
GUID

注意:仅对二进制可执行文件设置

二进制可执行文件会以所属组和调用者的标识去执行,也就是拥有二者的权限。

在目录下建立文件、目录等,其所属组与该目录的所属组相同。而不是全部者的用户组了。

   场景2:某用户在执行 rm -rf 目录/* 时,把全部者不是它的文件、目录都误删除了。

   缘由:默认状况下,只要用户拥有某目录的wx权限,则能够删除、剪切该目录下的全部文件、目录,即便该用户对该目录下的文件、目录任何权限都没有。

   需求:只删除全部者为本身的文件、目录。

   解决办法:使用特殊权限SBIT。

权限 文件 目录
SBIT(stick bit,粘滞位)  不对文件设置 配合wx权限,仅目录的全部者、子目录或文件的全部者和root用户才能删除、移动该目录下的子目录和文件

 

3. 隐藏权限

   共13种,仅在文件系统格式为Ext2+才有效。

 

3、经过命令了解权限                            

 上一节咱们从概念上了解了linux的文件权限的种类,下面经过命令来实干一番。

 1. 查看权限

 输入 ls -l 就能够查看当前目录下全部文件和子目录的权限信息了。

 假设回显信息为  -rwsr-xr-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 4755 文件 就能够改变文件的权限, ls -l 回显中权限部分则为rwsr-xr-x。

   注意:1. 若不设置特殊权限时,咱们能够直接省去八进制的第一位数,例如: chmod 755 文件 ;

            2. 采用数字表示法设置特殊权限,仅能启动特殊权限,却没法关闭。例如,文件A拥有特殊权限SUID和SGID,执行 chmod 0755 文件A ,但经过 ls -l 查看权限依然为rwsr-sr-x。

 

4、经过符号表示法设置权限                      

  经过数组表示法设置权限有时确实不够方便,因而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 文件名

 

5、改变全部者、所属组                            

  1. 查看用户信息

// 查看当前用户
whoami

// 查看当前用户所属组
groups

// 查看其余用户所属组
groups 用户1 用户2

  2. 改变全部者、所属组

 仅root用户才有权限执行下列命令。

// 改变全部者
chown 用户名 文件路径

// 改变所属组
chgrp 用户组 文件路径

// 改变全部者和所属组
chown 用户名.用户组 文件路径

// 递归改变全部者和所属组
chown -R 用户名.用户组 目录路径

 

6、管理用户                                    

 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 用户名

 

6、管理用户组                                

// 添加用户组
groupadd [-g gid [-o]] [-r] [-f] 用户组名

// 修改用户组名称
groupmod -n 新用户组名 旧用户组名

// 删除用户组
groupdel 用户组名

 

7、用户、用户组的配置文件                              

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、成员用户名称(成员用户名称间用,隔开)

 

8、总结                                        

  Linux的文件权限暂时了解到这里吧,之后继续深刻继续补充!

  尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/3999224.html ^_^肥仔John

 

9、参考                                        

http://blog.csdn.net/fan_zhen_hua/article/details/2050009http://blog.csdn.net/xsz0606/article/details/5256719http://blog.chinaunix.net/uid-20671208-id-3488852.htmlhttp://www.cnblogs.com/huangzhen/archive/2011/08/22/2149300.htmlhttp://blog.csdn.net/liqfyiyi/article/details/7742775http://os.51cto.com/art/201003/187591.htmhttp://os.51cto.com/art/201003/187572.htm

相关文章
相关标签/搜索