用户权限管理

描述:

用户在系统上的操作受到权限的约束,例如对文件或者目录进行查看、修改、复制、删除等操作时,由文件或者目录对应的操作的权限所决定的。

root的家目录下创建一个普通文件和目录并查看其属性:

[root@localhost ~]# echo 123 > file1
[root@localhost ~]# ll file1
-rw-r--r-- 1 root root 4 Aug 12 19:51 file1

[root@localhost ~]# mkdir dir1
[root@localhost ~]# ll
drwxr-xr-x  2 root root    4096 Aug 12 19:53 dir1

拿文件file1来解读下:(共有7个字段)

-rw-r--r-- 1 root root 4 Aug 12 19:51 file1

1, -rw-r–r–

   – :表示文件类型

补充:Linux系统上常见的文件类型:

     -: file 常规文件

  d: directory 目录文件

  b: block device 快设备文件,支持以“block”为单位进行随机访问

  c: character device 字符设备文件,支持以“character”为单位进行线性访问

  l: symbolic link 符号链接文件

  p: pipe 命名管道

    s: socket 套接字文件

  

   rw-r–r–: 代表文件的权限(3位为一组)

 左三位:rw-  定义所有者的权限(user,owner

 中三位:r–  定义所属组的权限(group

    右三位:r–  定义其他人的权限(other)

  2,数字1: 表示有多少文件名连接到此节点(i-node

  3root:  表示文件的属主为root

  4root:表示文件的所属用户组

  50:  表示文件的容量大小,默认单位为B

  6,Aug 12 19:51: 表示文件的创建日期或者是最近的修改日期

  7,file1  表示文件名

其所表示的含义为:文件file1是普通文件,所有者是root,权限为可读写,所属组为root,权限为可读,其它用户的权限为可读,其链接数为1。


文件权限

文件的权限主要针对三类对象进行定义:

owner:  属主, u

group:  属组, g

other:  其他, o

每个文件针对每类访问者都定义了三种权限:

r: readable

w: writable

x: excutable

 

权限对文件和目录的意义

文件:

r:  可使用文件查看类工具获取其内容

w:  可修改其内容

x:  可以把此文件提请内核启动为一个进程

示例:1,cat命令是二进制文件,每个用户为什么都可以使用这个命令呢?主要是其的权限决定的,对于所有者,所属组和其他人三种身份都具有X权限位,即拥有执行权限,可执行这个命令的文件变为程序

[root@localhost ~]# ll /bin/cat
-rwxr-xr-x 1 root root 48568 May 11  2016 /bin/cat

   2,/etc/passwd文件是有关用户的信息,现在ping用户想查看下这个文件,对于这个文件来说,ping用户是other身份,权限位显示只有读权限,所以可用cat命令来查看相关信息,但不能修改和删除该文件

[ping@localhost ~]$ ll /etc/passwd
-rw-r--r-- 1 root root 1769 Aug 12 18:45 /etc/passwd
[ping@localhost ~]$ echo 123 >> /etc/passwd
-bash: /etc/passwd: Permission denied
[ping@localhost ~]$ rm -f /etc/passwd
rm: cannot remove `/etc/passwd': Permission denied

目录:

r:  可以使用ls 查看此目录中文件列表

w:  可在此目录中创建文件,也可删除此目录中的文件

x:  可以使用ls -l 查看此目录中文件列表,可以cd 进入此

默认情况下只给目录x 权限,不给文件x 权限

示例:先用root身份先在/tmp下创建一个dir1目录,接着在/tmp下创建一个file1文件,注意,目录和文件的所有者,所属组和属性

[root@localhost tmp]# mkdir dir1
drwxr-xr-x  2 root root 4096 Aug 12 22:04 dir1
[root@localhost dir1]# ll

 现在用普通用户ping进入到/tmp下,该用户对于该目录是other身份,由于目录在other的权限位上有r和x则,ping用户可以进入该目录查看文件,由于没x权限,故不能修改文件内容或删除文件

[ping@localhost tmp]$ cd dir1
[ping@localhost dir1]$ ls
file1
[ping@localhost dir1]$ echo 11 >> file1
-bash: file1: Permission denied
[ping@localhost dir1]$ rm -f file1
rm: cannot remove `file1': Permission denied

权限组合机制:

– – –  000  0

– – x  001  1

– w –  010  2

– w x  011  3

r – –  100  4

r – x  101  5

r w –  110  6

r w x  111  7

chmod命令:改变文件的权限  用户仅能修改属主为自己的那些文件的权限

  用户类型:属主u   属组g   其他人o   所有人a

  1,chmod [option]… Mode[,mode]…file…

mode表示法:

  赋权表示法:直接操作一类用户的所有权限位rwx

  u=    g=   o=   a=

修改当前目录下的file1文件的权限

-rw-r--r--  1 root root       4 Aug 12 19:51 file1
[root@localhost ~]# chmod u=rwx,g=rw,o=rw file1
[root@localhost ~]# ll
-rwxrw-rw-  1 root root       4 Aug 12 19:51 file1

  授权表示法:直接操作一类用户的一个权限位r,w,x

  u+,u-   g+,g-   o+,g-   a+,a-

[root@localhost ~]# chmod u-x,g+x,o-rw file1
[root@localhost ~]# ll file1
-rw-rwx--- 1 root root 4 Aug 12 19:51 file1

2,chmod [option]… OCTAL-mode file…

3,chmod [option]..—reference=RFILE file…

 -R:递归修改

先将当前目录下的dir1目录及其包含的文件的权限改为777,然后按照/etc/fstab文件的权限将dir1目录及其包含的文件的权限进行修改

[root@localhost ~]# ll /etc/fstab
-rw-r--r--. 1 root root 921 Jul 26  2016 /etc/fstab
[root@localhost ~]# chmod -R --reference=/etc/fstab dir1
[root@localhost ~]# ll;ll dir1
drw-r--r--  2 root root    4096 Aug 13 00:21 dir1
-rw-r--r-- 1 root root 4 Aug 13 00:21 test

chown命令:改变文件所有者   仅管理员可修改文件的属主和属组

  chown [-R]  dirname/filename…

-R: 递归(recursive)修改,连同子目录下的所有文件、目录都更新成为这个用户。常用在更改某一目录内所有文件情况

示例:将dir1目录及其包含的文件的所有者改为ping用户

[root@localhost ~]# chown ping -R dir1
[root@localhost ~]# ll;ll dir1
drw-r--r--  2 ping root    4096 Aug 13 00:21 dir1
-rw-r--r-- 1 ping root 4 Aug 13 00:21 test

chgrp命令:改变文件所属用户组   仅管理员可修改文件的属主和属组

    chgrp [-R] dirname/filename…

       -R: 递归(recursive)修改,连同子目录下的所有文件、目录都更新成为这个用户组。常用在更改某一目录内所有文件情况

示例:将dir1目录及其包含的文件的所属组改为ping用户组

[root@localhost ~]# chgrp ping -R dir1
[root@localhost ~]# ll;ll dir1
drw-r--r--  2 ping ping    4096 Aug 13 00:21 dir1
-rw-r--r-- 1 ping ping 4 Aug 13 00:21 test

  chgap [option] … –reference =RFILE file…

新建文件和目录的默认权限

 umask值可以用来保留在创建文件权限

 umask:  查看umask值

 root umask 是 是 022

[root@localhost ~]# umask
0022

 非特权用户umask是 是 002 

[ping@localhost ~]$ umask
0002

umask #:  设定 

新建FILE 权限: 666-umask

如果所得结果某位存在执行(奇数)权限,则将其权限+1

示例:以root用户身份先设置umask值为135,在当前目录下创建test2文件

[root@localhost ~]# umask 135
[root@localhost ~]# touch test2
[root@localhost ~]# ll test2
-rw-r---w- 1 root root 0 Aug 13 00:50 test2

其中test2文件的权限为642,是根据新建FILE 权限: 666-umask得到的,666-135=531,由于普通文件不能拥有执行(奇数)权限,故在对应位的权限上+1,即得到的结果为642(rw-r—w-)

 新建DIR 权限: 777-umask

 umask S  模式方式显示

 umask p  输出可被调用

 : 全局设置: /etc/bashrc  用户设置:~/.bashrc

 

Linux文件系统上的特殊权限

 SUID, SGID, Sticky

三种常用权限:r, w, x user, group, other

安全上下文

前提:进程有属主和属组;文件有属主和属组

(1)  任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

(2)  启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组

(3)  进程访问文件时的权限,取决于进程的发起者

(a)  进程的发起者,同文件的属主:则应用文件属主权限

(b)  进程的发起者,属于文件属组;则应用文件属组权限

(c)  应用文件“其它”权限

特殊权限数字表示法

 SUID SGID STICKY

  0   0    0    0

  0   0    1    1

  0   1    0    2

  0   1    1    3

  1   0    0    4

  1   0    1    5

  1   1    0    6

  1   1    1    7

 

可执行文件上SUID权限

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为原程序文件的属主

SUID 只对二进制可执行程序有效

执行者对该程序需要具有X的可执行的权限

本权限仅在执行该程序中有效

执行者将具有该程序的所有者的权限

SUID 设置在目录上无意义

权限设定:

chmod u+s FILE…

chmod u-s FILE..

示例:普通用户可以修改自己的口令,可以查看/etc/passwd的内容,是因为ping用户对于/usr/bin/passwd这个程序来说是具有x权限的,表示ping用户可以执行passwd;passwd的拥有者是root;ping用户在执行passwd的过程中,会‘暂时’获得root的权限;/etc/passwd可以被ping所执行的passwd所修改。但如果ping用户使用cat去读取/etc/shadow时,是不能读取该文件的内容的,因为cat不具有SUID权限

[ping@localhost ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd
[ping@localhost ~]$ ll /etc/shadow
---------- 1 root root 1039 Aug 12 18:45 /etc/shadow

[ping@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

[root@localhost tmp]# touch test1       加入具有SUID的权限
[root@localhost tmp]# chmod 4755 test1;ll test1
-rwsr-xr-x 1 root root 0 Aug 13 01:21 test1

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为原程序文件的属组

对文件来说:

SGID对二进制程序有效

程序执行者对于该程序来说,需要具有X权限

执行者在执行的过程中将会获得该程序用户组的支持

对目录来说:

用户若对此目录具有r与x权限时,该用户能够进入此目录

用户在此目录下的有效组将会变成该目录的用户组

若用户在此目录下具有w权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同

权限设定:

示例:

[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 38464 Mar 12  2015 /usr/bin/locat

[root@localhost tmp]# chmod 6755 test1;ll test1       加入具有SUID/SGID的权限
-rwsr-sr-x 1 root root 0 Aug 13 01:21 test1

目录上的SGID

  默认情况下,用户创建文件时,其属组为此用户所属的 主 组

  一旦某目录被设定了SGID ,则对此目录有写权限的用户在此

目录中创建的文件所属的组为此目录的属组

  通常用于创建一个协作目录

  权限设定:

chmod g+s DIR…

chmod g-s DIR.

 

Sticky

 具有写权限的目录通常用户可以删除该目录中的任何

文件,无论该文件的权限或拥有权

 在目录设置Sticky  位,只有文件的所有者或root可 可

以删除该文件

sticky  设置在文件上无意义

 权限设定:

chmod o+t DIR…

chmod o-t DIR…

示例:

[root@localhost tmp]# ll -d /tmp
drwxrwxrwt. 4 root root 4096 Aug 13 01:21

[root@localhost tmp]# chmod 1755 test1;ll test1      加入具有SBIT的功能
-rwxr-xr-t 1 root root 0 Aug 13 01:21 test1
[root@localhost tmp]# chmod 7666 test1;ll test1       具有空的SUID/SGID权限
-rwSrwSrwT 1 root root 0 Aug 13 01:21 test1

权限位映射

SUID: user, 占据属主的执行权限位

s:  属主拥有x 权限

S :属主没有x 权限


SGID: group, 占据属组的执行权限位

s: group 拥有x 权限

S group 没有x 权限


Sticky: other, 占据other 的执行权限位

t: other 拥有x 权限

T other 没有x

 

设定文件特定属性

 chattr +i  不能删除,改名,更改

 chattr +a  只能增加

 lsattr  显示特定属性

 

访问控制列表

 ACL Access Control List ,实现灵活的权限管理

 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

 ACL 生效顺序:所有者,自定义用户,自定义组,其他

  

为多用户或者组的文件和目录赋予访问权限rwx

getfacl file |directory       查看文件或目录的acl

setfacl -m u:username:per   file|directory       设置用户的acl

setfacl -Rm g:groupname:per  directory         递归设置组的acl

setfacl -m d:u:user:per directory       设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值

setfacl -x u:username file |directory       取消用户acl

     

 ACL 文件上的group 权限是mask  值(自定义用户,自定义组,拥有组的最大权限), 而非传统的组权限

 getfacl 可看到特殊权限:flags

 默认ACL 权限给了x ,文件也不会继承x 权限。

 base ACL  不能删除

 setfacl -k dir  删除默认ACL 权限

    setfacl -b file1 清除所有ACL 权限

 getfacl file1 | setfacl –set-file=- file2 复制file1acl 权限给file2

 

mask 只影响除所有者和other 的之外的人和组的最大权限

Mask 需要与用户的权限进行逻辑与运算后,才能变成有限的权限

(Effective Permission)

用户或组的设置必须存在于mask 权限设定 范围内才会生效。

setfacl -m mask::rx file

–set 选项会把原有的ACL 项都删除,用新的替代,需要注意的是一定要包含UGO 的设置,不能像-m 一样只是添加ACL 就可以.

如:

 setfacl –set u::rw,u:wang:rw,g::r,o::- file1

 

备份和恢复ACL

主要的文件操作命令cp mv 都支持ACL ,只是cp 命令需要加上-p  参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL 信息

#getfacl -R /tmp/dir1 > acl.txt

#setfacl -R -b /tmp/dir1

#setfacl -R –set-file=acl.txt /tmp/dir1

#getfacl -R /tmp/dir1

示例:普通用户hadoop想在root创建的文件具有rw权限,可利用acl来设置其权限

[root@localhost backup]# cp /etc/inittab ./
[root@localhost backup]# getfacl inittab 
# file: inittab
# owner: root
# group: root
user::rw-
group::r--
other::r--
[hadoop@localhost backup]$ cd /backup
[hadoop@localhost backup]$ ll
total 4
-rw-r--r-- 1 root root 884 Aug 13 02:17 inittab
[hadoop@localhost backup]$ echo 123 >> inittab 
bash: inittab: Permission denied
[root@localhost backup]# setfacl -m u:hadoop:rw inittab  设置hadoop用户的acl
[root@localhost backup]# getfacl inittab 
# file: inittab
# owner: root
# group: root
user::rw-
user:hadoop:rw-
group::r--
mask::rw-
other::r--
[root@localhost backup]# su hadoop
[hadoop@localhost backup]$ echo 123 >> inittab
[hadoop@localhost backup]$ tail inittab 
id:3:initdefault:
123
[root@localhost backup]# setfacl -x u:hadoop inittab     取消hadoop用户的acl
[root@localhost backup]# getfacl inittab 
# file: inittab
# owner: root
# group: root
user::rw-
user:tom:rwx
group::r--
group:mygroup:rw-
mask::rwx
other::r--
[root@localhost backup]# setfacl -m m::r inittab      设置mask值
[root@localhost backup]# getfacl inittab      
# file: inittab               有效权限(effective permission)
# owner: root          用户或组所设置的权限必须要存在于mask的权限范围内才会生效
# group: root
user::rw-
user:tom:rwx			#effective:r--
user:hadoop:rwx			#effective:r--
group::r--
group:mygroup:rwx		#effective:r--
mask::r--
other::r--

[root@localhost backup]# su hadoop
[hadoop@localhost backup]$ echo "123" >> inittab 
bash: inittab: Permission denied

原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/28505

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-04 23:21

    对命令的用法通过示例有了很好的展示。