格式:
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 [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
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内设置.
前面介绍了三种常见权限:r , w , x 还有三种特殊权限:SUID ,SGID ,Sticky
三种特殊权限详解
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
。SGID(Set Group ID)
- 作用:与SUID类似,但应用于文件所属组。当文件被执行时,进程的有效组ID会被设置为文件的组ID。这通常用于目录,以确保在其中创建的文件和目录继承该目录的组ID。
- 表示方法:在文件权限的所属组(group)部分,执行权限(x)位置如果变为小写s(s或S,S表示执行权限被关闭但仍设置了SGID),则表示该文件或目录具有SGID权限。
- 示例:如果某个目录具有SGID权限,那么在该目录下创建的新文件和目录将继承该目录的组ID,而不是创建者的默认组ID。
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: Access Control List,灵活实现管理
除了文件所有者,所属组和其他人,可以对更多用户设置权限
CentOS7默认创建的xfs和ext4文件系统有ACL功能
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动添加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
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--
在Linux系统中,ACL(Access Control List,访问控制列表)的mask(掩码)是一个非常重要的概念,它用于限制ACL中基础权限的掩码,以确保不会将不需要授予的权限授予文件或目录。以下是关于ACL mask的详细解析:
定义与作用
- 定义:mask是ACL中的一个有效权限掩码,表示允许任意类型用户的更大权限。它用于在权限完全从基础权限集中得到计算后,确定文件或目录的最终权限。
- 作用:
- 权限控制核心:mask是ACL控制权限的核心部分之一,通过限制基础ACL权限来控制权限授予。
- 权限限制:确保不会将不需要授予的权限授予文件或目录,提高系统的安全性。
- 管理辅助:向管理员提供建议,帮助管理员理解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权限来控制权限授予,提高系统的安全性和可管理性。
在Linux系统中,备份与还原ACL(Access Control List,访问控制列表)是一项重要的管理任务,特别是在需要暂时修改文件权限以进行故障排除、更新或维护,并且之后需要恢复原始权限时。以下是备份与还原ACL的详细步骤:
备份ACL
要备份当前目录下(包括子目录)所有文件的ACL权限,可以使用
getfacl
命令配合重定向操作符>
。以下是一个示例步骤:
打开终端:首先,你需要以root用户或具有足够权限的用户身份打开终端。
切换到目标目录:使用
cd
命令切换到包含要备份ACL的文件和目录的目录。执行备份命令:运行
getfacl -R . > permissions.txt
命令。这里,-R
选项表示递归地处理当前目录及其所有子目录和文件,.
代表当前目录,>
将命令的输出重定向到名为permissions.txt
的文件中。这样,所有文件和目录的ACL信息都将被写入到permissions.txt
文件中。还原ACL
在需要恢复之前备份的ACL权限时,可以使用
setfacl
命令的--restore
选项。以下是一个示例步骤:
打开终端:同样,你需要以root用户或具有足够权限的用户身份打开终端。
切换到备份文件所在目录:使用
cd
命令切换到包含permissions.txt
备份文件的目录。执行还原命令:运行
setfacl --restore=permissions.txt
命令。这个命令会读取permissions.txt
文件中的ACL信息,并将其应用到相应的文件和目录上,从而恢复之前的ACL权限设置。注意事项
- 在进行备份和还原操作之前,请确保你有足够的权限来读取和写入目标文件和目录。
- 如果你在备份后修改了文件系统结构(例如,删除了某些文件或目录),那么在还原ACL时可能会遇到错误。在这种情况下,你可能需要手动编辑
permissions.txt
文件,以删除不再存在的文件或目录的ACL条目。- ACL备份文件(如
permissions.txt
)应保存在安全的位置,以防止未经授权的访问或修改。通过备份和还原ACL,你可以轻松地管理Linux系统中的文件权限,确保在需要时能够恢复到之前的状态。这对于维护系统的安全性和稳定性至关重要。