linux acl?acl权限控制

其实linux acl的问题并不复杂,但是又很多的朋友都不太了解acl权限控制,因此呢,今天小编就来为大家分享linux acl的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

如何在Linux下设置访问控制列表(ACL)来控制用户的权限

Linux下的访问控制列表(ACL)主要用来控制用户的权限,可以做到不同用户对同一文件有不同的权限,那么具体要如何操作呢?下面小编就教你如何在Linux下设置访问控制列表(ACL)来控制用户的权限。

使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。

Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的“other”或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs,等。如果你不确定你的文件系统是否支持ACL,请参考文档。

在文件系统使ACL生效

首先,我们需要安装工具来管理ACL。

Ubuntu/Debian中:

$ sudo apt-get install acl

CentOS/Fedora/RHEL中:

# yum-y install acl

Archlinux中:

# pacman-S acl

出于演示目的,我将使用ubuntu server版本,其他版本类似。

安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。

首先,我们检查ACL功能是否已经开启。

$ mount

你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。

现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。

$ sudo mount/-o remount

干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。

ACL范例

基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。让我们来做一些测试。

我创建一个目录/shared给一个假设的用户,名叫freeuser

$ ls-lh/

我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。

首先,为用户test设置ACL:

$ sudo setfacl-m u:test:rwx/shared

现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。

现在我们增加只读权限给用户test2:

$ sudo setfacl-m u:test2:rx/shared

注意test2读取目录需要执行(x)权限

让我来解释下setfacl命令格式:

-m表示修改ACL。你可以增加新的,或修改存在的ACLu:表示用户。你可以使用 g来设置组权限test用户名:rwx需要设置的权限。

现在让我向你展示如何读取ACL:

$ ls-lh/shared

你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行:

$ sudo getfacl/shared

最后,如果你需要移除ACL:

$ sudo setfacl-x u:test/shared

如果你想要立即擦除所有ACL条目:

$ sudo setfacl-b/shared

最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。

总结

使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。

上面就是Linux下设置访问控制列表来控制用户权限的方法介绍了,因为ACL的配置和使用较为复杂,初学者在使用的时候容易出现错误,希望本文介绍的方法能够帮助到你。

Linux下的umask、特殊权限与ACL权限

在了解到Linux系统上的文件目录权限,有时候你会发现为什么刚创建的文件是-rw-r--r--这个权限,目录是 drwxr-xr-x权限,有些是-rwsr-xr-x,又有些是 drwsrws--T?这些则与umask、特殊权限有关。

什么是umask?umask一般是用在你初始创建一个目录或者文件的时候赋予他们的权限。它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、

或用户家目录下的.bash_profile或.profile中设置umask值。

默认的umask是0022,0022四个数字代表是赋值初始化准备丢弃的权限。(相对应文件来说,x权限就算没说明出来丢弃一样必须默认丢弃)

第一个0代表suid丢弃的权限;

第二个0代表本文件/目录拥有者什么权限都没丢弃;

第三个2代表本文件/目录的用户组丢弃了w权限;

第四个2代表本文件/目录的文件/目录的用户组丢弃了w权限。

一般我们会这样表示:

umask+default permission(默认权限)=777(目录)/666(文件)

但存在特殊情况如果把umask设为135呢?

要了解特殊权限需对安全上下文有一个概念:

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

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

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

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

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

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

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

1.SUID权限仅对二进制程序(binary program)有效;

2.执行者对于该程序需要具有x的可执行权限;

3.本权限仅在执行该程序的过程中有效(run-time);

4.执行者将具有该程序拥有者(owner)的权限。

5.SUID设置在目录上无意义

权限设定:

chmod u+s FILE...

chmod u-s FILE...

s标志在文件拥有者的x项目为SUID,那s在群组的x时则称为Set GID

[root@centos7~]# ls-l/usr/bin/locate

-rwx--s--x. 1 root slocate 40496 Jun 10 2014/usr/bin/locate

与SUID不同的是,SGID可以针对文件或目录来设定!如果是对文件来说, SGID有如下的功能:

-1.SGID对二进制程序有用;

-2.程序执行者对于该程序来说,需具备x的权限;

-3.执行者在执行的过程中将会获得该程序群组的支持!

[root@centos7~]# ll/usr/bin/locate/var/lib/mlocate/mlocate.db

-rwx--s--x. 1 root slocate 40496 Jun 10 2014/usr/bin/locate

-rw-r-----. 1 root slocate 2349055 Jun 15 03:44/var/lib/mlocate/mlocate.db

与SUID非常的类似,使用xiaoming这个账号去执行locate时,那xiaoming将会取得slocate群组的支持,因此就能够去读取 mlocate.db。

SGID也能够用在目录上,这也是非常常见的一种用途

目录设定了SGID的权限后,他将具有如下的功能:

-1.用户若对于此目录具有r与x的权限时,该用户能够进入此目录;

-2.用户在此目录下的有效群组(effective group)将会变成该目录的群组;

-3.用途:若用户在此目录下具有w的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

这个 Sticky Bit, SBIT目前只针对目录有效,sticky设置在文件上无意义。SBIT对于目录的作用是:

-1.当用户对于此目录具有w, x权限,亦即具有写入的权限时;

-2.当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件

SUID/SGID/SBIT权限设定

-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

设定权限成为-rws--x--x的模样:

[root@centos7 tmp]# chmod u=rwxs,go=x test; ls-l test

-rws--x--x 1 root root 0 Jun 16 02:53 test

承上,加上 SGID与 SBIT在上述的文件权限中!

[root@centos7 tmp]# chmod g+s,o+t test; ls-l test

-rws--s--t 1 root root 0 Jun 16 02:53 test

1】ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的细部权限设定。ACL可以针对单一使用者,单一文件或目录来进行

ACL主要可以针以下来控制权限呢:

1.使用者(user):可以针对使用者来设定权限;

2.群组(group):针对群组为对象来设定其权限;

3.默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;

及1.ACL:Access Control List,实现灵活的权限管理;2.CentOS7默认创建的xfs和ext4文件系统具有ACL功能;3.CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加tune2fs–o acl/dev/sdb1

mount–o acl/dev/sdb1/mnt/test

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

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

2】ACL的设定技巧: getfacl, setfacl

-x:删除后续的 acl参数,不可与-m合用;

-b:移除『所有的』 ACL设定参数;

-k:移除『预设的』 ACL参数,

-R:递归设定 acl,亦即包括次目录都会被设定起来;

-d:设定『预设 acl参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值

例:[root@centos7~]# touch acl_test1

[root@centos7~]# ll acl_test1

-rw-r--r--. 1 root root 0 Jul 21 17:33 acl_test1

[root@centos7~]# setfacl-m u:xiaoming:rx acl_test1

[root@centos7~]# ll acl_test1

-rw-r-xr--+ 1 root root 0 Jul 21 17:33 acl_test1

[root@centos7~]# setfacl-m u::rwx acl_test1

[root@centos7~]# ll acl_test1

-rwxr-xr--+ 1 root root 0 Jul 21 17:33 acl_test1

设定值中的 u后面无使用者列表,代表设定该文件拥有者

2.getfacl指令用法余setfacl一样

例:[root@centos7~]# getfacl acl_test1

file: acl_test1<==说明档名而已!

owner: root<==说明此文件的拥有者,亦即 ls-l看到的第三使用者字段

group: root<==此文件的所属群组,亦即 ls-l看到的第四群组字段

user::rwx<==使用者列表栏是空的,代表文件拥有者的权限

user:xiaoming:r-x<==针对xiaoming的权限设定为 rx,与拥有者并不同!

group::r--<==针对文件群组的权限设定仅有 r

mask::r-x<==此文件预设的有效权限(mask)

other::r--

3】特定的单一群组的权限设定:『g:群组名:权限』

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

getfacl-R/tmp/dir1> acl.txt

setfacl-R-b/tmp/dir1

清除dir目录的ACL权限

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

setfacl--restore acl.txt

getfacl-R/tmp/dir1

linux学习——ACL权限

一、ACL权限简介与开启

在Linux系统中,ACL权限允许更精细的控制文件和目录的访问权限。例如,考虑一个名为"project"的目录,教师和学生需要访问该目录。教师是目录的所有者,学生应该加入到与班级相关的组中。所有者和该组的成员应具有读、写和执行权限。然而,试听同学(st)没有班级的权限,不应访问目录。但将试听同学加入班级组或创建新组都会影响其他同学的权限。设置目录权限为770,但试听同学可能需要访问文件,而不想给他写权限。

通过ACL,可以直接为特定用户或用户组设置文件或目录的操作权限,无需考虑所有者、所有组和其他用户。

二、查看与开启分区的ACL权限

使用dev/sda3>命令检查分区详细文件系统信息。选项-h表示仅显示超级块信息,而不显示磁盘块组的详细信息。若需要临时开启分区的ACL权限,可以使用#mount-o remount,acl/命令。永久开启分区的ACL权限则需要编辑/etc/fstab文件,并添加"acl"参数,然后使用#mount-o remount/重新挂载文件系统或重启系统。

三、查看与设定ACL权限

使用#getfacl文件名命令查看ACL权限。设定ACL权限可通过#setfacl选项文件名命令实现。选项包括-m、-x、-b、-d、-k和-R,分别用于设定、删除、删除所有、设定默认、删除默认和递归设定权限。

四、最大有效权限与删除ACL权限

最大有效权限mask用于指定权限的上限。修改mask权限使用#setfacl-m m:rx文件名命令。mask不会改变所有者的权限。

删除指定用户的ACL权限使用#setfacl-x u:用户名文件名命令,删除指定用户组的ACL权限使用#setfacl-x g:组名文件名命令,删除所有ACL权限使用#setfacl-b文件名命令。

五、默认与递归ACL权限

递归ACL权限允许在设定目录的ACL权限时,其子文件和子目录继承相同的权限。使用#setfacl-m u:用户名:权限-R目录名命令。在设置了递归ACL后,若需为目录及其子文件设置默认ACL权限,使用#setfacl-m d:u:用户名:权限文件名命令,确保新创建的子文件继承父目录的ACL权限。

阅读剩余
THE END