图片 1

查看手册页和命令描述,setfacl默认会重新计算ACL mask

在Linux上,实际上备份和恢复文件权限使用访问控制列表(ACL)是容易的。ACL根据不同的属主和属组在兼容posix的文件系统上定义了单个文件的权限。

 实例一:

#删除用户及家目录

userdel -r user

以下演示如何使用ACL工具备份和恢复Linux的文件权限

 首先创建一个512KB的空白文件:
[root@FC3-vm opt]#  dd if=/dev/zero of=/opt/testptn count=512
512+0 records in
512+0 records out

帮助命令

whatis 命令  #显示命令的简短功能

man    命令  #查看手册页和命令描述

命令–help    #适用于外部命令

help    命令  #适用于内部命令

type 命令    #查看命令内嵌还是外部

但如果只是想暂时备份文件权限(而不是文件本身),例如:为了阻止一些目录的内容被覆盖暂时移除该目录下所有文件写的权限;或是正在排除文件权限问题的过程中需要对文件进行chmod命令操作。在这些情况下,我们可以在原始文件权限改变之前对其进行备份,一会我们需要它的时候再将原始权限还原。在很多情况下,如果你只是想要备份文件的权限,那么完整的文件备份是不必要的。

 设置默认MASK
[root@FC3-vm mnt]# setfacl -m mask::r file1
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rwx                 #effective:r--
group::r--
group:testg1:r--
mask::r--
other::r--

[root@FC3-vm mnt]# ls -l file1
-rw-r--r--+ 1 root root 7 Dec 11 00:28 file1

在testu1对应的ACL项的后边出现了effective的字样,这是实际testu1得到的权限。Mask只对其他用户和组的权限有影响,对
owner和other的权限是没有任何影响的。 执行ls的结果也显示UGO的设置也有了对应的变化。因为在使用了ACL的情况下,group的权限显
示的就是当前的mask。通常我们把mask设置成rwx,以不阻止任何的单个ACL项。

需要注意的是,每次修改或添加某个用户或组的ACL项的时候,mask都会随之修改以使最新的修改能够真正生效。所以如果需要一个比较严格的mask的话,可能需要每次都重新设置一下mask。

#文件属性说明

-|rw-|r–|r–|属主|属组|修改时间|对象:文件名

rw-  文件所有者对文件具有读取、写入的权限

r–  用户组里用户则具有读取的权限

r–  其他用户则具有读取的权限

3. 修改某一文件权限,如:修改linuxprobe.txt及install.txt权限

[root@linuxprobe tmp]# chmod 733 linuxprobe.txt 
[root@linuxprobe tmp]# chmod 573 install.txt 
[root@linuxprobe tmp]# ls -l
total 8
-r-xrwx-wx. 1 root root    0 Mar  3 04:40 install.txt
-rwx-wx-wx. 1 root root    0 Mar  3 04:41 linuxprobe.txt
-rw-r--r--. 1 root root 4361 Mar  3 04:41 permissions.txt
......
 如何设置ACL文件

首先我们还是要讲一下设置ACL文件的格式,从上面的例子中我们可以看到每一个Access Entry都是由三个被:号分隔开的字段所组成,第一个就是Entry tag type。

– user 对应了ACL_USER_OBJ和ACL_USER 

– group 对应了ACL_GROUP_OBJ和ACL_GROUP

– mask 对应了ACL_MASK

– other 对应了ACL_OTHER

第二个字段称之为qualifier,也就是上面例子中的john和dev组,它定义了特定用户和拥护组对于文件的权限。这里我们也可以发现只有
user和group才有qualifier,其他的都为空。第三个字段就是我们熟悉的permission了。它和Linux的permission一
样定义,这里就不多讲了。

#修改密码

chage 用来更改用户密码过期信息

-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码

-M:密码保持有效的最大天数

-W:用户密码到期前,提前收到警告信息的天数

-E:帐号到期的日期。过了这天,此帐号将不可用

-d:上一次更改的日期,为0表示强制在下次登录时更新密码

-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用

-l:(list)列出当前的设置,由非特权用户来确定他们的密码或帐号何时过期

2. 备份当前目录下(包括子目录)所有文件的权限

[root@linuxprobe tmp]#  ls -l
total 8
-rwxr--r--. 1 root root  0 Mar  3 04:40 install.txt
-rwxr-xr-x. 1 root root  0 Mar  3 04:41 linuxprobe.txt
[root@linuxprobe tmp]# getfacl -R . > permissions.txt
...

此命令将所有文件的ACL信息全部写入名为permissions.txt文件。

以下是生成的permissions.txt文件中部分目录信息

[root@linuxprobe tmp]# cat permissions.txt
# file: .
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
# file: install.txt
# owner: root
# group: root
user::rwx
group::r--
other::r--

# file: linuxprobe.txt
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

# file: permissions.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
...
 用-b选项删除所有的ACL数据,来模拟从备份中回复的文件和目录:
[root@FC3-vm mnt]# setfacl -R -b dir1
[root@FC3-vm mnt]# getfacl -R dir1
# file: dir1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

# file: dir1/file1
# owner: root
# group: root
user::rw-
group::r--
other::r--

#移动文件

mv file1 file2              #重命名文件

mv /a/file1 /b              #移动文件

1. 安装ACL工具

在Debian, Ubuntu,Linux Mint上

$ sudo apt-get install acl

在CentOS,Fedora,RHEL上

$ sudo yum install acl
 自动创建的规则

最初的,文件目录仅包含3个基本的acl规则。为了使规则能正常执行,需要满足以下规则。

– 3个基本规则不能被删除。

– 任何一条包含指定的用户名或群组名的规则必须包含有效的权限组合。

– 任何一条包含缺省规则的规则在使用时,缺省规则必须存在。

#查看ACL

getfacl  /etc/passwd

# file: etc/passwd

# owner: root

# group: root

user::rw-

group::r–

other::r–

你可能听说或碰到过这样的事情:一个系统管理员菜鸟不小心输入”chmod -R 777
/”从而导致了巨大的悲剧,使得整个系统遭到了严重的破坏。在日常管理中,我们有许多工具可以用来备份文件权限,如cp、rsync、etckeeper等。如果你使用了这个备份工具,那么你的确不需要担心改变的文件权限问题。

 我们ls看一下:
[root@FC3-vm mnt]# ls -l file1
-rw-rw-r--+ 1 root root     7 Dec 11 00:28 file1

可以看到那个”+”了么?就在通常我们看到的权限位的旁边。这个说明file1设置了ACL

#改变用户信息

usermod -aG 组名 用户名

-u      UID

-d      宿主目录

-g      起始组            #只能有一个

-G      附加组            #可以有多个

-s      登录shell

-L      锁定

4. 恢复原有权限

1)cd到创建permissions.txt时所在的目录
2)执行以下命令:

setfacl --restore=permissions.txt

可以看到linuxprobe.txt及install.txt权限恢复了

[root@linuxprobe tmp]# setfacl --restore=permissions.txt
[root@linuxprobe tmp]# ls -l
total 8
-rwxr--r--. 1 root root    0 Mar  3 04:40 install.txt
-rwxr-xr-x. 1 root root    0 Mar  3 04:41 linuxprobe.txt
-rw-r--r--. 1 root root 4361 Mar  3 04:41 permissions.txt
......
 6.结语

ACL 的引入使得大规模的复杂权限管理可以很容易的在 Linux 上实现。对于 /home 这样存放大量用户文件的分区,可以做到更有效的管
理。但是我们也看到在备份工具等方面的欠缺,好在 FC2 中已经开始包含了 star 这样的支持 ACL 的备份工具,虽然还是 alpha 版。

在单个文件的 ACL 条目的数量上,不同的文件系统有不同的限制。Ext2 和 Ext3 只能支持每个文件 25 个 ACL 条目。ReiserFS 和 JFS 可以支持超过 8,000 个条目。这个方面 Ext* 文件系统还需要加强。

无论多么复杂的系统中,文件系统的权限管理都是最基础的内容。而 Linux 对 ACL的支持,无疑是一把管理海量用户系统的利器,对 Linux 在大规模的企业级应用中更方便的发挥更大的作用添了一把火。

文件管理

图片 1

 修改file1的ACL赋予testu1足够的权限:
[root@FC3-vm mnt]# setfacl -m u:testu1:rw file1
[root@FC3-vm mnt]# su testu1
[testu1@FC3-vm mnt]$ echo "testu1" >> file1
[testu1@FC3-vm mnt]$ cat file1
testu1

修改成功了,用户testu1可以对file1做读写操作了。

授权

 举例例子说明一下

下面我们就用getfacl命令来查看一个定义好了的ACL文件:

[root@localhost ~]# getfacl ./test.txt
#file: test.txt
#owner: root
#group: admin
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw-
other::r--

前面三个以#开头的定义了文件名,fi

 le owner和group。这些信息没有太大的作用,接下来我们可以用–omit-header来省略掉。

类型 说明
user::rw-  定义了ACL_USER_OBJ, 说明file owner拥有read and write permission
user:john:rw-  定义了ACL_USER,这样用户john就拥有了对文件的读写权限,实现了我们一开始要达到的目的
group::rw-  定义了ACL_GROUP_OBJ,说明文件的group拥有read and write permission 
group:dev:r–  定义了ACL_GROUP,使得dev组拥有了对文件的read permission
mask::rw-  定义了ACL_MASK的权限为read and write
other::r–  定义了ACL_OTHER的权限为read 

从这里我们就可以看出ACL提供了我们可以定义特定用户和用户组的功能,那么接下来我们就来看一下如何设置一个文件的ACL:

#创建用户

useradd -m -u -d- g”初始组” -G”附加组” -s “登陆的shell” “用户”

-m  创建用户主目录/home

-g    设置用户的初始组名称或id

-G    设置用户附属组

-s    设置用户登陆shell ,/sbin/nologin  禁止登陆系统

-u      指定用户的uuid

-d    指定用户的主目录

 实例二

#创建用户

useradd user

 首先新建一个文件作为实施ACL的对象:
[root@FC3-vm mnt]#  touch file1
[root@FC3-vm mnt]#  ls -l file1
-rw-r--r-- 1 root root     7 Dec 11 00:28 file1

xfs备份介绍

XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据。xfsdump
按inode顺序备份一个XFS文件系统。

与传统的UNIX文件系统不同,XFS不需要在dump前被卸载;对使用中的XFS文件系统做dump就可以保证镜像的一致性。这与XFS对快照的实现不同,XFS的dump和restore的过程是可以被中断然后继续的,无须冻结文件系统。xfsdump
甚至提供了高性能的多线程备份操作,把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地。

首先了解一下xfsdump的备份级别有以下两种,默认为0(即完全备份)

完全备份 0

增量备份 1-9

 设置test.txt这个文件的ACL让它来达到我们上面的要求。

一开始文件没有ACL的额外属性:

[root@localhost ~]# ls -l -rw-rw-r-- 1 root admin 0 Jul 3 22:06 test.txt
[root@localhost ~]# getfacl --omit-header ./test.txt user::rw- group::rw- other::r--

位置判断

绝对路径 :从/开始

相对路径:以 . 或 .. 开始的

 选项

 |参数|说明|
 |-|-|

 |-b:|删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。

 |-k:|删除缺省的acl规则。如果没有缺省规则,将不提示。

 |-n:|不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。

 |–mask:|重新计算有效权限,即使ACL mask被明确指定。|

 |-d:|设定默认的acl规则。

 |–restore=file:|从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除–test以外的任何参数一同执行。

 |–set=acl| 设置当前文件的ACL规则|

|–set-file=file| 从文件读入ACL规则来设置当前文件或目录的ACL规则|

 |–test:|测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。|

 |-R:|递归的对所有文件及目录进行操作。

 |-L:|跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。

 |-P:|跳过所有符号链接,包括符号链接文件。

 |–version:|输出setfacl的版本号并退出。

 |–help:|输出帮助信息。

 |–:|标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。|

|-m|更改文件或目录的ACL规则|

|-M|从一个文件读入ACL设置信息并以此为模版修改当前文件或目录的ACL规则|

|-x|删除文件或目录指定的ACL规则|

|-X|从一个文件读入ACL设置信息并以此为模版删除当前文件或目录的ACL规则|

– 选项-m-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M-X用来从文件或标准输入读取acl规则。

– 选项--set--set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。

– 选项-m(--modify)-M(--modify-file)选项修改文件或目录的acl规则。

– 选项-x(--remove)-X(--remove-file)选项删除acl规则。

  当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。每行至少一条规则,以#开始的行将被视为注释。

  当在不支持ACLs的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限
位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于0的状态返回。

用户分类

超级用户: root  拥有对系统的最高的管理权

普通用户:系统用户 UID:1-999(RHEL7)      1-499(RHEL6)

​                  本地用户 UID:1000+                    500+

虚拟用户:伪用户 
一般不会用来登录系统的,它主要是用于维持某个服务的正常运行

 权限

文件的所有者以及有CAP_FOWNER的用户进程可以设置一个文件的acl。(在目前的linux系统上,root用户是唯一有CAP_FOWNER能力的用户)

ACL: 访问控制列表

它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:UGO。而使用ACL,你可以增加权限给其他用户或组别,可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

 我们来看一下file1的ACL
[testu1@FC3-vm mnt]$ getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rw-
group::r--
mask::rw-
other::r--

xfs文件系统备份与恢复

 3. ACL的其他功能:删除和覆盖

#添加用户到指定组

gpasswd

-a:添加用户到组;

-d:从组删除用户;

-A:指定管理员;

-M:指定组成员和-A的用途差不多;

-r:删除密码;

-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

gpasswd -a users user

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章