在linux系统中哪个文件系统不支持文件权限控制
发布网友
发布时间:2023-05-03 07:44
我来回答
共5个回答
热心网友
时间:2023-05-03 07:59
文件的权限管理是否生效是由文件系统决定的,传统的linux文件系统都是支持的,如ext4、xfs,不支持的比如vfat既windows中的fat32,是不支持权限设置的
进程对文件的访问权限应用模型:
首先检查进程的属主与文件的属主是否相同,如果相同,则应用属主权限;如果不同就查看suid权限,如果相同就使用suid权限;如果匹配,就不检查后面的权限了。
其次,则检查进程的属组是否属于文件的数组,如果是,则应用属组的权限;如果不同就查看sgid权限,如果相同就是用sgid权限;如果匹配,就不检查后面的权限了。
最后只能应用 other 权限。
同用权限
权限说明
目录是一个特殊的文件,内容就是其中所有的目录文件列表,rwx权限对应的是对文件列表的权限,对于目录来说,可执行权限是基本权限。
类型rwx
文件可读可写可将此文件运行为进程
目录可以使用ls命令获取其下的所有文件列表可以修改此目录下的文件列表,即创建和删除文件可以 cd 至目录中,可以使用 ls -l 来读取所有文件的详细属性信息,使用cat来查看文件内容
有一个特殊的指向权限,大X , 该设置只对目录添加可执行权限,而不对文件添加可执行权限【除非文件本身带有可执行权限位】
权限组合机制(八进制组合标识法)
原始二进制数字
—0000
–x0011
-w-0102
-wx0113
r–1004
r-x1015
rw-1106
rwx1117
同ls -l可以发现符号链接类型的文件权限都是777,但实际上通过符号链接访问其指向的文件的时候,权限由其指向的文件权限决定的。
chmod
chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位。
u=,g=,o=可以一起使用,也可以单独用其中一个,u=时表示属主没有权限,如果属组属主相同权限,可以ug=rx。a=表示操作所有权限位
授权表示法:操作一类用户的一个权限位。用法一般为u+r,g+x,o+w 或者u-r,g-x,o-w,a+ 或者 a- 表示操作所有用户的权限位。
chmod [OPTION]... OCTAL-MODE FILE...
八进制权限表示法
## 修改前
ls -l first.sh
# -rw-rw-r--. 1 vagrant vagrant 176 11月 18 14:58 first.sh
## 修改
chmod 770 first.sh
## 修改后
ls -l first.sh
#-rwxrwx---. 1 vagrant vagrant 176 11月 18 14:58 first.sh
复制
chmod [OPTION]... --reference=RFILE FILE...
引用参考目标文件的权限
## 参考目标文件
ls -l /var/log/messages
#-rw-------. 1 root root 70721 11月 18 15:16 /var/log/messages
## 将要被修改文件权限
ls -l first.sh
#-rwxrwx---. 1 vagrant vagrant 176 11月 18 14:58 first.sh
## 修改文件权限为参考目标文件
chmod --reference=/var/log/messages first.sh
## 参考修改后的情况
ls -l first.sh
#-rw-------. 1 vagrant vagrant 176 11月 18 14:58 first.sh
复制

选项: -R,--recursive递归修改,只对目录才有意义,可能会对没有执行权限的文件分配可执行权限,有风险,慎用
在递归修改执行权限的时候,有一个特殊的指向权限,大X , 该设置只对目录添加可执行权限,而不对文件添加可执行权限【除非文件本身带有可执行权限位】
chown命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。
具体用法看这里
特殊权限
SUID:setuid,用户在运行二进制程序时,若此程序拥有SUID权限,则此程序会根据程序文件本身的属主身份运行,而不是调用此程序的用户.
需要特别说明的suid仅对二进制命令程序有效,不能作用在shell等脚本文件上,而且suid权限仅在命令执行过程中有效。
# 命令格式
chmod u{+|-}s file...
SUID的权限位在属主的可以执行权限x的位置,如果发起调用的用户原来有执行权限,则显示为s,否则显示为S
给文件设置SUID,意思在于没权限不要紧,你只要来调用我就将我的属主权限借给你
示例
# 输出当前用户
whoami
# vagrant
# 使用 cat 查看 /etc/shadow
cat /etc/shadow
# cat: /etc/shadow: permission denied
# 查看 /etc/shadow 权限位情况,只有 root 用户才有权限
ll /etc/shadow
# ----------. 1 root root 919 6月 13 17:33 /etc/shadow
root 是超级用户,对所有文件具有最大权限,给/etc/cat添加SUID,使其在被调用的时候,使用root权限,而不是调用者的权限。
# 查看当前用户
whoami
# root
# 查看 /bin/cat 的权限位
ll /bin/cat
# -rwxr-xr-x. 1 root root 54160 10月 30 2018 /bin/cat
# 添加 SUID 权限
chmod u+s /bin/cat
ll /bin/cat
# -rwsr-xr-x. 1 root root 54160 10月 30 2018 /bin/cat
# 切换用户
su - vagrant
whoami
# vagrant
cat /etc/shadow
# root:$1$GcxvZm4N$67SLqTRkOUb2z5dNFck6P1:18407:0:99999:7:::
# bin:*:17834:0:99999:7:::
# daemon:*:17834:0:99999:7:::
# adm:*:17834:0:99999:7:::
# lp:*:17834:0:99999:7:::
# ...
SGID
sgid既可以针对文件也可以针对目录。
对于文件来说,sgid仅对二进制命令程序有效,执行命令的用户可以获得该程序执行期间所属组的权限,这一点和suid基本类似。
对于目录来说,意义就非常重大了。**当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。**若该目录的组拥有写权限,则可以互相修改彼此文件。
# 命令格式
chmod g{+|-}s file...
SGID的权限位在属组的可以执行权限x的位置,如果发起调用的用户本身有执行权限,则显示为s,否则显示为S
演示准备:
# 准备两个两个用户 user1 user2 , 一个用户组 group1 , 并将 group1 设置为 user1 和 user2 的附加组
useradd user1
useradd user2
groupadd group1
usermod -aG group1 user1
usermod -aG group1 user2
# 查看命令执行情况
id user1
#uid=1006(user1) gid=1007(user1) groups=1007(user1),1009(group1)
id user2
#uid=1007(user2) gid=1008(user2) groups=1008(user2),1009(group1)
# 给 user1 、user2 设置密码
passwd user1
# ...
passwd user2
# ...
# 创建操作目录
cd /tmp
mkdir testsgid
ll -d testsgid
# drwxrwxr-x. 2 root root 6 Jun 14 03:42 testsgid
chown :group1 testsgid
chmod g+w testsgid
ll -d testsgid
# drwxrwxr-x. 2 root group1 6 Jun 14 03:52 /tmp/testsgid
演示
su - user1
cd /tmp/testsgid
touch user1.test
ll user1.test
# -rw-rw-r--. 1 user1 user1 0 Jun 14 03:44 user1.test
## 这里 user1.test 的属主和数组都是user1
su - user2
cd /tmp/testsgid
touch user2.test
ll user2.test
# -rw-rw-r--. 1 user2 user2 0 Jun 14 03:57 user2.test
## 这里 user2.test 的属主和数组都是user2
# 对 testsgid 添加 sgid 修饰
chmod g+s /tmp/testsgid
ll -d /tmp/testsgid
# drwxrwsr-x. 2 root group1 42 Jun 14 03:57 /tmp/testsgid
su - user2
cd /tmp/testsgid
touch user2.sgid.test
ll user2.sgid.test
# -rw-rw-r--. 1 user2 group1 0 Jun 14 04:03 user2.sgid.test
## 这时新创建文件的属主就变成 testsgid 文件夹的属主了
### ... 同样使用 user1 在 testsgid 中创建文件,属主也都变成 group1 了
sticky
一般情况下,对于属组/全局可写的目录,组内的所有用户/全局用户都可以在该目录创建文件或者删除文件,无论是否属主是否是自己。
若是对目录使用了sticky权限,则每个用户都可以创建新文件/目录,但是只能删除属主是自己的部分。
root用户除外,root依然可以删除所有。
# 命令格式
chmod o{+|-}t file...
sticky的权限位在其他用户的可以执行权限x的位置,如果发起调用的用户本身有执行权限,则显示为s,否则显示为T
sticky 权限目前只对目录有效,用来阻止非文件的所有者删除文件。系统中的/tmp和/var/tmp两个目录默认就是具有sticky权限的。
ll -d /tmp
# drwxrwxrwt. 17 root root 4096 Jun 14 04:05 /tmp
权限信息中最后一位 t 表明该目录被设置了 sticky 权限。
还有一种为特殊权限位设置权限的方式,在基于通用权限八进制授权机制的基础上,在左侧再增加一位八进制数字,用以表示特殊权限位。如 chmod 7777 file
facl 访问控制列表
file access control lists
这个功能主要是提供在传统的ugo和suid/sgid/sticky之外的另一种更灵活、更精细的权限控制方式,通过facl可以针对单一的用户或者组设置特定的权限。
facl允许你给任何的用户或用户组设置任何文件/目录的访问权限。
getfacl用来获取指定文件/目录的facl信息
格式getfacl file_path
setfacl用来设置文件/目录的facl权限
参数示例说明
-msetfacl -m u:username:rwx filepath
setfacl -m g:groupname:rwx filepath配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
-xsetfacl -x u:username filepath
setfacl -x g:username filepath删除指定用户/组的所有 facl 参数,不可与 -m同用
-Rsetfacl -R -m g:groupname:rwx filepath递归执行
-d配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
-b移除所有的 ACL 配置参数;
$ getfacl user2.sgid.test
# file: user2.sgid.test
# owner: user2
# group: group1
user::rw-
group::rw-
other::r--
$ setfacl -m u:user1:rwx user2.sgid.test
$ getfacl user2.sgid.test
# file: user2.sgid.test
# owner: user2
# group: group1
user::rw-
user:user1:rwx
group::rw-
mask::rwx
other::r--
$ setfacl -m g:basher:rwx user2.sgid.test
$ getfacl user2.sgid.test
# file: user2.sgid.test
# owner: user2
# group: group1
user::rw-
user:user1:rwx
group::rw-
group:basher:rwx
mask::rwx
other::r--
$ ll user2.sgid.test
# 看到权限的后面多了个 + 号
-rw-rwxr--+ 1 user2 group1 0 Jun 14 04:03 user2.sgid.test
复制

umask命令
umask 设置了用户创建文件的默认权限,它与 chmod 的效果刚好相反,umask设置的是权限“补码”,既用来取消对应的权限,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
一般来说,umask命令是在/etc/profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久 性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。
对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。
目录则允许设置执行权限,这样针对目录来说umask中各个数字最大可以到7。
若没有文件掩码时,文件的默认权限为0666,文件夹的默认权限为0777。但是系统为了保护用户创建文件和文件夹的权限,此时系统会有一个默认的用户掩码(umask),大多数的Linux系统中root的默认掩码为0022,非特殊用户的默认掩码为0002。
权限公式:新建文件的时候,666和掩码对位相减后,对奇数位进行+1 ,偶数不变 ; 新建文件夹的时候,777和掩码直接对位相减即可。
例如,当umask为251的时候,创建文件的权限为:0666-0251=0415,奇数加一处理后为426。创建文件夹的权限为:0777-0251=0526
热心网友
时间:2023-05-03 07:59
在Linux系统中,FAT文件系统和NTFS文件系统(通过ntfs-3g实现)默认不支持文件权限控制。这是因为这两个文件系统是在Windows操作系统上开发和使用的,Windows系统中没有和Linux类似的基于用户/组的文件权限控制机制。
在FAT文件系统和NTFS文件系统上,可以通过挂载时添加一些额外的 mount 选项(如umask、uid、gid等)来实现一些基本的权限控制。但这种方法并不能完全替代Linux系统中的完整的文件权限控制机制,例如不能实现对文件夹的递归访问权限控制等。
因此,建议在Linux系统上使用支持文件权限控制的文件系统,如ext4、XFS等。这些文件系统可以有效地保护文件和文件夹的访问和控制,是Linux系统下的主流文件系统类型。
热心网友
时间:2023-05-03 08:00
您好,在Linux系统中,FAT32文件系统不支持文件权限控制。FAT32是一种比较早期的文件系统,它最初被设计用于Windows操作系统,因此没有考虑到Linux系统中的文件权限控制机制。在FAT32文件系统中,所有文件和目录都被视为“公共”的,即所有用户都具有相同的读写权限。这意味着,无论是系统管理员还是普通用户,都无法对文件和目录进行访问控制,也无法*其他用户对它们的访问。因此,对于需要进行严格的文件权限控制的应用场景,建议使用支持文件权限控制的文件系统,如ext4、NTFS等。
热心网友
时间:2023-05-03 08:00
FAT32文件系统不支持文件权限控制。这是因为FAT32文件系统最初是由微软设计用于DOS操作系统,而DOS操作系统不支持文件权限控制。虽然现在FAT32文件系统可以在Linux系统中使用,但它仍然无法支持文件权限控制。
在Linux系统中,文件系统权限是非常重要的,因为它们决定了哪些用户能够访问和修改文件。大多数常见的Linux文件系统,如ext4、XFS和NTFS,都支持文件权限控制。如果你需要在Linux系统上使用一个文件系统,建议选择支持文件权限控制的文件系统。
热心网友
时间:2023-05-03 08:01
在linux系统中哪个文件系统不支持文件权限控制
在linux系统中,FAT32文件系统不支持文件权限控制。