Linux · 2023年 8月 2日 0

Linux权限配置及ACL权限

一、linux用户权限设置有哪些

1.用户

linux中默认有两类用户:
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做受限制,adduser创建的用户

用户切换:
普通→超级用户: su - (需要输入密码)
root→普通用户: su - 用户名 (无需输入密码)

改密码:
在当前用户下修改
passwd
如果是root 后面跟用户名
passwd username

  • exit or CTRL + D 可以退出普通用户身份到root
  • 每次使用su都会创建一个进程,尽量减少使用su跳转到root

2、linux中角色类别

  • 拥有者 owner    u
  • 所属组 group    g
  • 其他     other     o
  • 全部                  a

3、权限


  • 第1列一共十个字符

          第一个字符,表示文件类型
d: 文件夹;目录,字母”d”,是dirtectory(目录)的缩写
-:普通文件(文本,动静态库,可执行程序,源程序)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件 (通信)
c:字符设备文件(例如屏幕等串口设备、鼠标键盘)
s:套接口文件(软链接)
         剩下9个字符
         3+3+3为一组,拥有者 所属组 其他人 所具有的文件权限属性
         rwx必须按顺序,可读 可写 可执行 -为否

  • 第2列,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录
    的话,那它的数目就是该目录中的文件个数了。
  • 第3列,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一
    栏大概都是它的账号名称。
  • 第4列,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过
    大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,
    才可能会给他另一个组。
  • 第5列,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,
    当然可以用其它参数使文件显示的单位不同,如使用ls –k就是用kb莱显示一个文件的大
    小单位,不过一般我们还是以byte为主。
  • 第6列,表示最后一次修改时间。以“月,日,时间”的格式表示,如Aug 15
    5:46表示8月15日早上5:46分。
  • 第7列,表示文件名。我们可以用ls –a显示隐藏的文件名。


读(read),写(write),执行r(execute),简写即为(r,w,x),亦可用数字来(4,2,1)表示,- 没有权限  权限位占位符。
举例:如果某文件权限为7则代表可读、可写、可执行(4+2+1).
若权限为6(4+2)则代表可读、可写。
权限为5代表可读(4)和可执行(1).
权限为3代表可写(2)和可执行(1)。

普通文件即实际保存数据的地方,其并不具备删除自身的权限:
r:可读取文件的实际内容
w:可编辑、新增、修改该文件的实际内容
x:可被执行

目录文件即保存有目录结构和文件权限:
r:可读取目录结构和权限
w:可更改目录结构列表、新建、删除、重命名、转移子文件、目录
x:表示用户可进入到该目录中

4、修改权限chmod

chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
①文字设定法
语法:chmod [who] [+ | - | =] [mode] 文件名
命令中各选项的含义为:
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。

设置 mode 所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。

方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。

文件名:以空格分开的要改变权限的文件列表,支持通配符。
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:
chmod g+r,o+r public
使同组和其他用户对文件public有读权限。
②数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限, 2表示可写权限,4表示可读
权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:
语法:chmod [mode] 文件名
指令实例:
chmod a+x file.txt
即设定文件file.txt的属性为:
文件属主(u) 增加执行权限
与文件属主同组用户(g) 增加执行权限
其他用户(o) 增加执行权限
chmod ug+w,o-x file.txt
即设定文件file.txt的属性为:
文件属主(u) 增加写权限
与文件属主同组用户(g) 增加写权限
其他用户(o) 删除执行权限
chmod u+s install.run
假设执行chmod后install.run的权限为(可以用ls –l install.run命令来看):
–rws–x–x 1 sunfeng users 3689 Nov 5 17:22 install.run
并且这个执行文件要用到一个文本文件ceshi.c,其文件存取权限为“–rw——-”,
即该文件只有其属主具有读写权限。
当其他用户执行install.run这个程序时,他的身份因这个程序暂时变成sunfeng(由于chmod
命令中使用了s选项),所以他就能够读取ceshi.c这个文件(虽然这个文件被设定为
其他人不具备任何权限),这就是s的功能。
因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非
必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到***。
chmod a–x hkc.txt
chmod –x hkc.txt
chmod ugo–x hkc.txt
以上这三个命令都是将文件hkc.txt的执行权限删除,它设定的对象为所有使用者。
chmod 644 hkc.txt
即设定文件hkc.txt的属性为:-rw-r–r–
文件属主(u)sunfeng 拥有读、写权限
与文件属主同组人用户(g) 拥有读权限
其他人(o) 拥有读权限
chmod 750 Ai.txt
即设定Ai.txt这个文件的属性为:-rwxr-x—
文件主本人(u)sunfeng 可读/可写/可执行权
与文件主同组人(g) 可读/可执行权
其他人(o) 没有任何权限

修改文件所属组:chgrp
chgrp:更改文件属组
语法:
chgrp [-R] 属组名 文件名
#chgrp -R root test

参数选项:
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown:更改文件属主,也可以同时更改文件属组
语法:
chown[–R] 属主名 文件名
chown[-R] 属主名:属组名 文件名
#chown[-R] bin test
#chown[-R] bin:root test
进入 /home/sunfeng 目录,将install.run的拥有者改为zhangsan这个账号:

将install.run的拥有者与群组改回为sunfeng:root

二、Linux用户权限ACL权限

ACL文件权限管理也是UGO权限的加强版。
UGO基本权限:只能一个用户、一个组合、其他人这三个对象进行授权
ACL文件权限管理:设置不同用户,不同的基本权限(r、w、x),对象数量不同
UGO是针对用户、组、其他人三个对象的文件授权,ACL是可以针对指定用户指定组和其他人的文件授权。
1、语法
setfacl -m u:用户或用户组:权限   文件     //给指定用户或组授权
getfacl 文件                              //查看文件有哪些ACL权限
2、创建文件、文件夹及用户
准备一个测试用的文件夹以及用户在文件夹内创建一个文件
mkdir /home/test           //创建文件夹
touch /home/test/测试.txt  //创建文件“测试.txt”
useradd wangwu            //创建用户wangwu
useradd lisi              //创建用户lisi
lslogins          //列出系统中所有用户的信息

3、设置ACL权限
查看新创好的文件有哪些ACL权限
[root@localhost home]# getfacl test/测试.txt      //查看“测试.txt”的ACL权限
# file: test/测试.txt                             //文件的位置
# owner: root                                    //文件拥有者
# group: root                                    //文件所属组
user::rw-                                        //用户的权限
group::r--                                       //组的权限
other::r--                                       //其他人的权限
设置wangwu、lisi权限
[root@localhost home]# setfacl -m u:lisi:rwx /home/test/测试.txt      //给lisi授予可以对文件读写执行的权利
[root@localhost home]# setfacl -m u:wangwu:rwx /home/test/测试.txt    //给wangwu授予可以对文件读写执行的权利
[root@localhost home]# getfacl test/测试.txt                          //查看“测试.txt”的ACL权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
user:lisi:rwx                                           //权限增加成功
user:wangwu:rwx                                         //权限增加成功
group::r--
mask::rwx
other::r--
说明:在设置ACL权限之后使用 ls 查看文件权限会不一样,文件的权限会叠加上ACL的权限,具体的权限内容还是需要用getfacl来查看,ACL权限使用一getfacl命令查看的为主。
[root@localhost ~]# ls -l /home/test/测试.txt
-rw-rwxr--+ 1 root root 0 8月 2 17:43 /home/test/测试.txt
用ls命令查看发现权限多了一个+号,代表着有ACL权限,具体权限用getfacl命令查看。
对组 user 群组进行ACL授权
[root@localhost home]# setfacl -m g:user:rw test/测试.txt          //给user组授予对文件“测试.txt”读写权限
[root@localhost home]# getfacl test/测试.txt                       //查看“测试.txt”ACL权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
user:lisi:rwx
user:wangwu:rwx
group::r--
group:user:rw-                                                   //权限设置完成
mask::rwx
other::r--
对其他人授权
[root@localhost home]# setfacl -m o::rwx test/测试.txt          //设置其他人对文件“测试.txt”的读写执行的权限
[root@localhost home]# getfacl test/测试.txt                    //查看文件“测试.txt"权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
user:lisi:rwx
user:wangwu:rwx
group::r--
group:user:rw-
mask::rwx
other::rwx                                    //权限设置完成
注意:setfacl -m o::rwx test/测试.txt,o后面有两个冒号,其他人不用写用户名,虽然不用写用户名但仍然要加冒号表示一个站位,不然命令无法执行。
删除ACL权限
命令setfacl  -x  对象:名称    文件名
删除用户的权限
[root@localhost home]# setfacl -x u:lisi test/测试.txt     //删除用户lisi的文件权限
[root@localhost home]# getfacl test/测试.txt               //查看文件“测试.txt"权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
user:wangwu:rwx                               //仅剩用户wangwu,lisi的权限被移除
group::r--
group:user:rw-
mask::rwx
other::rwx
删除组的权限
[root@localhost home]# setfacl -x g:user test/测试.txt           //删除组user的权限
[root@localhost home]# getfacl test/测试.txt                     //查看文件“测试.txt"权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
user:wangwu:rwx
group::r--
mask::rwx
other::rwx
清空所有设置的ACL权限(将文件的ACL权限恢复到默认)
命令:setfacl    -b   文件
[root@localhost home]# setfacl -b test/测试.txt               //清空ACL的所有扩展权限
[root@localhost home]# getfacl test/测试.txt                  //查看文件“测试.txt"权限
# file: test/测试.txt
# owner: root
# group: root
user::rw-
group::r--
other::rwx
[root@localhost home]# ls -l test/测试.txt
-rw-r--rwx. 1 root root 0 8月 2 17:43 test/测试.txt //原本的+号不在了,没有设置ACL权限

语法: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …

选项 说明
-m, –modify=acl 更改文件的访问控制列表
-M, –modify-file=file 从文件读取访问控制列表条目更改
-x, –remove=acl 根据文件中访问控制列表移除条目
-X, –remove-file=file 从文件读取访问控制列表条目并删除
-b, –remove-all 删除所有扩展访问控制列表条目
-k, –remove-default 移除默认访问控制列表
      –set=acl 设定替换当前的文件访问控制列表
      –set-file=file 从文件中读取访问控制列表条目设定
      –mask 重新计算有效权限掩码
-n, –no-mask 不重新计算有效权限掩码
-d, –default 应用到默认访问控制列表的操作
-R, –recursive 递归操作子目录
-L, –logical 依照系统逻辑,跟随符号链接
-P, –physical 依照自然逻辑,不跟随符号链接
     –restore=file 恢复访问控制列表,和“getfacl -R”作用相反
     –test 测试模式,并不真正修改访问控制列表属性
-v, –version 显示版本并退出
-h, –help 显示本帮助信息
赞赏

微信赞赏支付宝赞赏