M20 – 1- 第三周博客:Linux中的权限以及特殊权限

上一篇讲到了用户与用户组,相信大家都明白了Linux中用户与用户组的含义和用处,那接下来讲的就是Linux中设置用户与用户组有使用权限。

Linux用户权限

何为权限,权限(privilege)是指某个特定的用户具有特定的系统资源使用权力,而权限又有哪几种呢。

Linux用户中主要针对三类着三种权限:读、写、执行,而Linux中存在着目录与文件,而目录的权限代表的含义与文件却又不一样,接下对目录与文件的权限详解:

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

owner:属主, u
group: 属组, g
other: 其他, o
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限

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

r: Readable
w: Writable
x: eXcutable
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程

如何查看文件的权限有属于那些用户呢,请看下图:

QQ截图20160805221253.png

从上图可以看出普通文件"install.log"的属主(所有者)为root,而属主的权限为读(r)写(w)权限,属组(所属组)也为root,属组的权限为读(r),而其他用户的权限为读(r),(对于root超级管理员而言,实际是有任何的权限),用数字表示该用户的权限应为"0644",为何会有0呢,"0"这个数字是特殊权限,下面将会将特殊权限,而数字表示简写为"644",如何对文件添加权限和文件的属主属组呢,Linux系统中有很多命令是给用户加权限的,但是有两个常用的命令对文件添加权限和属主和属组:

chown命令

简介:
chown - change file owner and group
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R: 递归
实例1:
[root@centos6 ~]# id user1
uid=3000(user1) gid=3000(user1) groups=3000(user1)
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 root root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chown user1.user1 install.log   #将普通文件"install.log"的属主和属组更改为user1用户
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log

chgrp 命令

简介:
chgrp - change group ownership
格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
选项:
-R:递归
实例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log
[root@centos6 ~]# man chgrp
[root@centos6 ~]# chgrp root install.log  #只更改普通文件"install.log"的属组为root
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log

chmod 命令

简介:
chmod - change file mode bits
格式:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
选项:
-R: 递归修改权限
--reference=RFILE FILE...: 参考RFILE文件的权限,将FILE的修改为同RFILE;
字母加添法:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ -
实例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chmod ug=rwx install.log  #给普通文件"install.log"的属主属组添加r(读)w(写)x(执行)权限
[root@centos6 ~]# ls -l install.log
-rwxrwxr--. 1 user1 root 45324 Aug  5 19:24 install.log

给用户添加权限还有一种方式为数字修改法,而数字添加总共有几种模式呢,请看下面:

这种表示法为八进制:

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

因此可以看作为:

blob.png

例如:640: rw-r-----    rwxr-xr-x: 755

那在这里很多人就问了,创建文件和目录的权限是多少呢,实际是由文件或目录的"默认权限-umask",何为umask,(Tips:超级管理员的目录的默认权限为777,文件的默认权限为666,umask是0022;非特权用户umask是0002)

umask 命令

简介:
Display or set file mode mask.
格式:
umask [-p] [-S] [mode]
选项:
–S:模式方式显示
–p:输出可被调用
实例1:
[root@centos6 ~]# umask -p
umask 0022
[root@centos6 ~]# umask -S
u=rwx,g=rx,o=rx
实例2:
[root@centos6 ~]# umask 0002
[root@centos6 ~]# umask
0002

而umask的默认值的定义是由配置文件定义的:

[root@centos6 ~]# grep -C5 'umask' /etc/bashrc 
                    PATH=$1:$PATH
                fi
        esac
    }

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then   #当前登录的用户名的UID是否大于199和当前用户的id名称与当前用户的基本组id是否一致,如果两种情况满足,umask就是002,如果其中一个不满足,uamsk就是022
       umask 002
    else
       umask 022
    fi

    # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do

可以在个人配置文件中定义

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

Linux用户的特殊权限

特殊权限:SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
        (a) 进程的发起者,同文件的属主:则应用文件属主权限
        (b) 进程的发起者,属于文件属组;则应用文件属组权限
        (c) 应用文件“其它”权限

文件上的特殊权限:SUID, SGID, Sticky

特殊权限:SUID

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义

权限设定:chmodu+sFILE...;chmodu-s FILE...

特殊权限:SGID

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:chmodu+sFILE...;chmodu-s;FILE...

目录上的特殊权限:SUID, SGID, Sticky

默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
    权限设定:chmodg+sDIR...;chmodg-s DIR...

特殊权限:Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:chmodo+tDIR...;chmodo-t DIR...
例如:
ls-ld/tmp  
drwxrwxrwt12rootroot4096Nov215:44/tmp

因此特殊权限数字法也是有八种模式

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
写法:chmod4777 /tmp/a.txt

权限位映射

SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T:other没有x权限

设定文件特定属性chattr、lsattr命令

chattr 命令

简介:
chattr - change file attributes on a Linux file system
格式:
chattr [ -RVf ] [ -v version ] [ mode ] files...
实例1:
chattr +i 不能删除,改名,更改
[root@centos6 ~]# chattr +i anaconda-ks.cfg 
[root@centos6 ~]# rm anaconda-ks.cfg 
rm: remove regular file `anaconda-ks.cfg'? y
rm: cannot remove `anaconda-ks.cfg': Operation not permitted
[root@centos6 ~]# mv anaconda-ks.cfg anaconda-ks.cfg.bak
mv: cannot move `anaconda-ks.cfg' to `anaconda-ks.cfg.bak': Operation not permitted
[root@centos6 ~]# echo "abc" > anaconda-ks.cfg 
-bash: anaconda-ks.cfg: Permission denied

lsattr 命令

简介:
lsattr - list file attributes on a Linux second extended file system
格式:
lsattr [ -RVadv ] [ files...  ]
实例1:
[root@centos6 ~]# lsattr anaconda-ks.cfg
----ia-------e- anaconda-ks.cfg

访问控制列表

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

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:tune2fs –o acl/dev/sdb1;mount –o acl/dev/sdb1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,其他人

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

mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory

ACL中的权限设置

ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl可看到特殊权限:flags
默认ACL权限给了x,文件也不会继承x权限。
base ACL 不能删除
setfacl-k dir 删除默认ACL权限
setfacl-b file1清除所有ACL权限
getfaclfile1 | setfacl--set-file=-file2 复制file1的acl权限给file2

ACL中的权限定义

mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效。setfacl-m mask::rxfile
--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

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

(0)
上一篇 2016-08-08 16:16
下一篇 2016-08-08 16:16

相关推荐

  • 与正则表达式的第一次亲密接触

    Linux文本处理三剑客 grep:文本过滤(模式:psttern)工具 grep,egrep,fgrep (不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器 下面就先谈一谈:grep及正则表达式;egrep及扩展的正则表达式 grep grep:Goobal search REgu…

    Linux干货 2017-04-06
  • 马哥教育网络班22期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&…

    Linux干货 2016-09-19
  • NTP时间服务器

        在集群环境和需要日志同步的多服务器应用中,为了能够保证多台服务器的之间的正常协作,就必须使它们的时间保持一致,在多台服务器上手动调整时间是极其不科学的,这时就需要借助于NTP时间服务器来完成时间的同步。     一、NTP服务器的安装    …

    Linux干货 2015-06-25
  • 元数据、修改时间戳、文件名通配、定义命令的别名、I/O重定向及管道

      文件的元数据 文件的数据分为两类:一类为元数据,既属性数据;一种就是数据本身:  数据是指普通文件中的实际数据  元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等 那么如何查看文件的详细信息? stat命令: 功能说明:    显示inode内容命令用法:    stat…

    Linux干货 2016-11-06
  • C语言的谜题

    这几天,本站推出了几篇关于C语言的很多文章如下所示: 语言的歧义 [酷壳链接] [CSDN链接] 谁说C语言很简单? [酷壳链接] [CSDN链接] 6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接] 如何加密/弄乱C源代码 [酷壳链接] [CSDN链接] C语言的谜题 [酷壳链接] …

    Linux干货 2016-05-08
  • Linux网络属性配置

      一台主机想要接入网络就必须配置相关的网络属性,如:主机名、IP地址、子网掩码、网关、DNS等,下面总结了网络属性的配置方法。 一、配置主机名   主机名配置有两种方式:命令和配置文件。   1、hostname命令    可以使用hostname命令来配置主机名,不过这样配置的主机名不会永久生效,只能在当…

    Linux干货 2016-01-06