Linux基础入门 --8 DAY

文件权限管理

设置文件的所有者chown

        格式:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

chown [OPTION]... --reference=RFILE FILE...

        示例: 

chown admin(所有者):admin(所属组)f1.txt

chown admin(所有者).admin(所属组)f1.txt

chown --reference=f1.txt f2.txt 参考f1属性修改f2

chown -R admin:admin dir1(文件夹)   递归更改

设置文件所属组信息 chgrp

        格式:

chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

        -R 递归

        范例:

chgrp admin f1.txt  <=> chown :admin f1.txt

文件权限

        文件权限说明:

r        Readable    

w        Writable       

x        execute       

        注意:用户的最终权限,是从左到右进行匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不在向右查看其他权限(顺序匹配).

        对文件的权限: 

 r         可以使用文件查看类工具,比如cat,可获取其内容

w        可修改其内容

x         可以把文件提请内核启动为一个进程,即可以执行(运行)此文件

        对目录的权限:

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

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

x        可以使用ls -l 命令查看此目录中的文件元数据(需配合r),可以cd进入此目录

X        只给目录权限,不给无执行权限的文件x权限

        数学法的权限:

r        4

w        2

x        1 

drwxr-xr-x. 2 root root  6 Sep  4 06:51 backup

        查看所属组及附属组存在存在的成员

[root@localhost ~]# groups wtj
wtj : wtj
[root@localhost ~]# groupmems -l -g root 

        ls <=> dir 

[root@localhost ~]# dir
backuo    backup    bc  bc.sh  dead.letter    err.log  -f  f1.log  test.log
[root@localhost ~]# ls
backuo  backup  bc  bc.sh  dead.letter  err.log  -f  f1.log  test.log

 修改权限Chown

chmod命令是Linux和Unix系统中用于改变文件或目录权限的重要工具。它允许用户设置谁可以读取、写入或执行文件。以下是chmod命令的详细解析:

一、权限类型

在Linux中,文件权限分为三类用户:

  • 文件所有者(owner):文件的创建者或拥有者。
  • 所属组(group):文件所属的组。
  • 其他用户(others):既不是文件所有者也不属于文件所属组的其他所有用户。

每类用户都可以被赋予读(r)、写(w)和执行(x)权限。这些权限的数值表示如下:

  • 读(r)= 4
  • 写(w)= 2
  • 执行(x)= 1

二、chmod命令的两种用法

1. 数字模式

使用数字来直接设置权限。权限值是将上述权限的数值相加得到的。例如,读+写=4+2=6,读+执行=4+1=5,写+执行=2+1=3,读+写+执行=4+2+1=7。

  • chmod 755 file.txt:设置file.txt的权限,使得文件所有者具有读、写和执行权限(7),所属组和其他用户具有读和执行权限(5)。
  • chmod 644 file.txt:设置file.txt的权限,使得文件所有者具有读和写权限(6),所属组和其他用户只有读权限(4)。
  • chmod 700 file.txt:设置file.txt的权限,使得只有文件所有者可以读、写和执行,其他人没有任何权限。
2. 字母模式

使用字母来设置权限,适用于更直观的权限修改。

  • u:代表文件所有者(user)。
  • g:代表所属组(group)。
  • o:代表其他用户(others)。
  • a:代表所有用户(all,即u+g+o)。
  • +:添加权限。
  • -:移除权限。
  • =:设置权限(覆盖现有权限)。

例如:

  • chmod u+x file.txt:给文件所有者添加执行权限。
  • chmod g-w file.txt:移除所属组的写权限。
  • chmod o+rwx file.txt:给其他用户添加读、写和执行权限。
  • chmod u=rwx,g=rx,o=r file.txt:设置文件所有者具有读、写和执行权限,所属组和其他用户具有读和执行权限,但所属组没有写权限。

三、常用选项

  • -R:递归修改目录及其子目录下的所有文件和目录权限。
  • -v:显示命令执行过程中修改的文件或目录的权限信息。
  • -c:只在修改了文件或目录的权限时才显示其详细信息。
  • -f:不显示错误信息。

四、注意事项

  • 使用chmod命令时,需要谨慎,因为错误的权限设置可能会影响文件的安全性和可访问性。
  • 只有文件的所有者或者root用户才能改变文件的权限。
  • 在使用数字模式时,确保理解每个数字所代表的权限组合。

五、总结

chmod命令是Linux和Unix系统中用于改变文件或目录权限的强大工具。通过数字模式和字母模式,用户可以灵活地设置文件或目录的访问权限,以满足不同的安全和管理需求。在使用时,需要注意权限设置的合理性和安全性,以避免潜在的风险。

新建文件目录的默认权限 

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

        实现方式:

                新建文件的默认权限:666-umask,如果所得结果某位存在执行奇数权限,则将其权限+1,偶数不变

                新目录的默认权限为:777-umask

        非特权用户umask默认为022

        root的umask默认是022

        查看umask

umask 

#模式方式显示

umask -S

#输出可被调用

umask -p

        修改umask

umask # 

        范例:
[root@localhost ~]# umask 755
[root@localhost ~]# umask
0755 

如果想永久生效可在家目录的.bashrc内设置.

Linux文件系统上的特殊权限

        前面介绍了三种常见权限:r , w , x 还有三种特殊权限:SUID ,SGID ,Sticky

        特殊权限SUID

三种特殊权限详解

  1. SUID(Set User ID)

    • 作用:当文件被执行时,进程的有效用户ID会被设置为文件的所有者ID,而不是执行者的用户ID。这允许普通用户以文件所有者的权限执行文件。
    • 表示方法:在文件权限的属主(user)部分,执行权限(x)位置如果变为小写s(s或S,S表示执行权限被关闭但仍设置了SUID),则表示该文件具有SUID权限。
    • 示例:如果/usr/bin/passwd文件具有SUID权限,则普通用户在执行passwd命令更改密码时,会以root用户的权限进行,因为/usr/bin/passwd的所有者是root
  2. SGID(Set Group ID)

    • 作用:与SUID类似,但应用于文件所属组。当文件被执行时,进程的有效组ID会被设置为文件的组ID。这通常用于目录,以确保在其中创建的文件和目录继承该目录的组ID。
    • 表示方法:在文件权限的所属组(group)部分,执行权限(x)位置如果变为小写s(s或S,S表示执行权限被关闭但仍设置了SGID),则表示该文件或目录具有SGID权限。
    • 示例:如果某个目录具有SGID权限,那么在该目录下创建的新文件和目录将继承该目录的组ID,而不是创建者的默认组ID。
  3. Sticky Bit(粘滞位)

    • 作用:在目录上设置时,只有目录的所有者、文件的所有者或超级用户才能删除或重命名目录中的文件。这通常用于公共目录,如/tmp,以防止普通用户删除或重命名其他用户的文件。
    • 表示方法:在目录权限的其他用户(others)部分,执行权限(x)位置如果变为小写t(t或T,T表示执行权限被关闭但仍设置了粘滞位),则表示该目录具有粘滞位。
    • 示例:在/tmp目录下,普通用户只能删除或重命名自己创建的文件,而不能删除或重命名其他用户的文件,即使他们有足够的权限来执行这些操作。

设定文件权限特殊属性 

        不能删除,改名,更改

        chattr +i

        只能追加内容

        chattr +a 

        显示特定属性

        lsatter 

        范例:

 [root@localhost ~]# chattr +i dir
[root@localhost ~]# rm -rf dir
[root@localhost ~]# lsattr dir
----i----------- dir

访问控制列表 

ACL权限功能

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

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

        CentOS7默认创建的xfs和ext4文件系统有ACL功能

        CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动添加

tune2fs -o acl /dev/sdb1

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

        ACL生效顺序:

        所有者 ->自定义用户->所属组|自定义组->其他人

ACL相关命令 

        setfacl 可以设置ACL权限

        getfacl 可以查看设置的ACL权限

        范例:

[root@localhost test]# ll
total 0
-rw-r--r--. 1 root root 0 Sep  6 23:40 f1.txt
[root@localhost test]# setfacl -m u:wtj:- f1.txt
[root@localhost test]# su wtj
[wtj@localhost test]$ cat f1.txt 
cat: f1.txt: Permission denied
[wtj@localhost test]$ ll
total 0
-rw-r--r--+ 1 root root 0 Sep  6 23:40 f1.txt

[root@localhost test]# ll
total 0
-rw-r--r--+ 1 root root 0 Sep  6 23:40 f1.txt
[root@localhost test]# setfacl -b f1.txt  // 清空ACL列表
[root@localhost test]# ll
total 0
-rw-r--r--. 1 root root 0 Sep  6 23:40 f1.txt

[root@localhost test]# setfacl -x u:root f1.txt 
[root@localhost test]# getfacl f1.txt 
# file: f1.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

 ACL-MASK 

在Linux系统中,ACL(Access Control List,访问控制列表)的mask(掩码)是一个非常重要的概念,它用于限制ACL中基础权限的掩码,以确保不会将不需要授予的权限授予文件或目录。以下是关于ACL mask的详细解析:

定义与作用

  • 定义:mask是ACL中的一个有效权限掩码,表示允许任意类型用户的更大权限。它用于在权限完全从基础权限集中得到计算后,确定文件或目录的最终权限。
  • 作用
    1. 权限控制核心:mask是ACL控制权限的核心部分之一,通过限制基础ACL权限来控制权限授予。
    2. 权限限制:确保不会将不需要授予的权限授予文件或目录,提高系统的安全性。
    3. 管理辅助:向管理员提供建议,帮助管理员理解ACL权限,从而更有效地管理和保护系统。

如何工作

  • 当为文件或目录设置ACL权限时,如果指定了用户或组的权限,这些权限会与mask权限进行“按位相与”运算。最终得出的结果即为该用户或组对文件或目录的有效权限。
  • 如果用户或组被赋予的权限超出了mask规定的范围,超出部分将被视为无效。

示例

假设有一个文件file1,其基础权限为所有者可读写执行(rwx),组用户和其他用户可读(r--)。现在为用户tom设置了对file1的读和执行权限(r-x),同时mask权限被设置为rwx。

  • 在这种情况下,尽管为tom用户设置了r-x权限,但由于mask权限为rwx,因此tom用户实际上对file1的权限将是r-x(因为r-x在rwx的范围内)。
  • 如果将mask权限更改为r--,则tom用户的r-x权限中与r--不相符的部分(即写权限w)将被忽略,tom用户最终只有r权限。

设置与修改

  • 使用setfacl命令可以设置和修改ACL权限,包括mask权限。
  • 例如,要设置file1的mask权限为r-x,可以使用命令setfacl -m m:r-x file1

注意事项

  • 在设置ACL权限时,需要谨慎考虑mask权限的设置,以确保不会授予不必要的权限。
  • 如果不确定如何设置ACL权限,建议先了解相关概念和操作,或在有经验的管理员的指导下进行。

总之,ACL mask是Linux系统中ACL机制的一个重要组成部分,它通过限制基础ACL权限来控制权限授予,提高系统的安全性和可管理性。

 

备份和还原ACL 

在Linux系统中,备份与还原ACL(Access Control List,访问控制列表)是一项重要的管理任务,特别是在需要暂时修改文件权限以进行故障排除、更新或维护,并且之后需要恢复原始权限时。以下是备份与还原ACL的详细步骤:

备份ACL

要备份当前目录下(包括子目录)所有文件的ACL权限,可以使用getfacl命令配合重定向操作符>。以下是一个示例步骤:

  1. 打开终端:首先,你需要以root用户或具有足够权限的用户身份打开终端。

  2. 切换到目标目录:使用cd命令切换到包含要备份ACL的文件和目录的目录。

  3. 执行备份命令:运行getfacl -R . > permissions.txt命令。这里,-R选项表示递归地处理当前目录及其所有子目录和文件,.代表当前目录,>将命令的输出重定向到名为permissions.txt的文件中。这样,所有文件和目录的ACL信息都将被写入到permissions.txt文件中。

还原ACL

在需要恢复之前备份的ACL权限时,可以使用setfacl命令的--restore选项。以下是一个示例步骤:

  1. 打开终端:同样,你需要以root用户或具有足够权限的用户身份打开终端。

  2. 切换到备份文件所在目录:使用cd命令切换到包含permissions.txt备份文件的目录。

  3. 执行还原命令:运行setfacl --restore=permissions.txt命令。这个命令会读取permissions.txt文件中的ACL信息,并将其应用到相应的文件和目录上,从而恢复之前的ACL权限设置。

注意事项

  • 在进行备份和还原操作之前,请确保你有足够的权限来读取和写入目标文件和目录。
  • 如果你在备份后修改了文件系统结构(例如,删除了某些文件或目录),那么在还原ACL时可能会遇到错误。在这种情况下,你可能需要手动编辑permissions.txt文件,以删除不再存在的文件或目录的ACL条目。
  • ACL备份文件(如permissions.txt)应保存在安全的位置,以防止未经授权的访问或修改。

通过备份和还原ACL,你可以轻松地管理Linux系统中的文件权限,确保在需要时能够恢复到之前的状态。这对于维护系统的安全性和稳定性至关重要。

你可能感兴趣的:(Linux学习,linux,运维,服务器)