文件目录(权限)

特殊权限

特殊权限对文件的影响对目录的影响
u+s(setuid) (-rwsr-xr-x)以拥有文件的用户身份执行文件无影响
g+s(setgid) (drwxr-sr-x)以拥有文件的组身份执行文件在目录中最新创建的文件将继承组所有者
o+t(sticky) (drwxrwxrwt)无影响对目录有写入访问权限的用户仅可以删除其所拥有的文件,无法删除或强制保存到其他用户所拥有的文件
简介

1、u+s

[student@workstation ~]$ ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 33544 Dec 14  2019 /usr/bin/passwd

setuid权限可以通过“—s------”辨认出。可以通过小写的s辨认出setuid权限,表示将以拥有该文件的用户root的身份运行命令,而不是以运行命令的用户身份。如果所有者不具有执行权限,将有大写的S取代。

2、g+s

[student@workstation ~]$ ls -ld /run/log/journal
drwxr-sr-x. 4 root systemd-journal 80 Sep 22 10:09 /run/log/journal

setgid权限可以通过“------s—”辨认出。特殊权限setgid表示在该目录中创建的文件将继承该目录的“组”所有权,而不是继承自创建用户。通常用于组协作目录,将文件从默认的专有组自动更改为共享组,或者当前目录中的文件始终都应有特定的组所有时使用。

[student@workstation ~]$ ls -ld /usr/bin/locate
-rwx--s--x. 1 root slocate 47128 Aug 12  2018 /usr/bin/locate

如果对可执行文件设置了setgid(g+s),则命令以拥有该文件的组执行,而不是以运行命令的用户身份运行。方式与setuid类似。如果组不具有执行权限,将会有大写S取代。

3、o+t

[student@workstation ~]$ ls -ld /tmp
drwxrwxrwt. 10 root root 4096 Sep 22 19:23 /tmp

sticky权限可以通过”---------t“ 辨认出。只有文件的所有者(及root)才能删除该目录中的文件。如果其他不具有执行权限,将会有大写T取代。

设置特殊权限
# 符号表示
setuid = u+s;setgid = g+s;sticky = o+t
# 数值表示
setuid = 4;setgid = 2;sticky = 1

基本权限

简介

文件和目录的级别

  • 用户所有者(u)
  • 组所有者(g)
  • 其他(o)

文件和目录的权限

  • 读(r)
  • 写(w)
  • 执行(x)

创建文件或目录时,权限基于三个因素:

  • 基本权限
  • umask

自动分配给某个文件或目录的基本权限不是文件和目录最终的默认权限。当创建文件或目录时,基本权限会被umask更改。基本权限和umask的组合会为文件和目录创建默认权限。

设置基本权限
权限符号数值
无权限0
执行–x1
-w-2
写和执行-wx3
r–4
读和执行r-x5
读写rw-6
读、写、执行rwx7
  • 目录的基本权限是777(drwxrwxrwx),任何人授予读、写和执行的权限。意味着目录所有者、组、和其他用户可以列出目录的内容,并且可以在该目录下中创建、删除和编辑。当然一个目录中的文件也可以通过授权改变权限以组织其他用户进行编辑。
  • 文件的基本权限是666(-rw-rw-rw-),任何人都授予读写权限。意味着文件所有者、组和其他用户都可以读和编辑该文件。
-rwxr-xr-x. 1 root root 10271880 Oct 19 23:23 vmlinuz-4.18.0-348.el8.x86_64
- 表示一个文件
rwx 表示文件所有者有读、写和执行权限
r-x 表示组有读和执行权限,但没有在文件中写入的权限
r-x 表示其他用户有读和执行权限,但没有在文件中写入的权限
. 表示为该文件设定了selinux安全上下文
drwxr-xr-x. 3 root root       21 Dec 18 21:55 loader
d 表示是一个目录
rwx 表示目录所有者有读取、写入和访问目录内容的权限
r-x 表示组有写入和访问目录的权限,但是没有读取目录中内容的权限
r-x 表示其他用户有写入和访问目录的权限,但是没有读取目录中内容的权限
. 表示为该目录设定了selinux安全上下文

umask

简介
    umask会自动从基本权限值中删除权限,以提高linux系统的整体安全性。主要控制如何为新创建的文件和目录设置文件权限的变量。

    创建文件或者目录时,会为其分配初始权限。有两个因素会影响这些初始权限。首先是要创建的常规文件和目录,其次是umask。

    如果是创建新目录,操作系统首先会为其分配八进制权限0777(drwxrwxrwx)。如果是创建新的常规文件,操作系统则为其配八进制权限0666(-rw-rw-rw-)。shell会话还会设置一个umask,以进一步限制初始设置的权限(这是一个八进制位掩码,用于清楚由该进程创建新文件和目录的权限)。**先看一个例子:**
[student@workstation ~]$ umask
0002     # 当前用户的umask为0002
[student@workstation ~]$ touch default.txt
[student@workstation ~]$ ls -ld default.txt 
-rw-rw-r--. 1 student student 0 Sep 22 20:49 default.txt
# 首先系统为文件分配权限为0666(-rw-rw-rw-),umask为0002;最终文件权限为0664(-rw-rw-r--)
[student@workstation ~]$ mkdir default
[student@workstation ~]$ ls -ld default
drwxrwxr-x. 2 student student 6 Sep 22 20:49 default
# 首先系统为目录分配权限为0777(drwxrwxrwx),umask为0002;最终目录权限为0775(drwxrwxr-x)

将umask设置为0,再看下:

[student@workstation ~]$ umask 0
[student@workstation ~]$ umask
0000
[student@workstation ~]$ touch default2.txt
[student@workstation ~]$ ls -ld default2.txt 
-rw-rw-rw-. 1 student student 0 Sep 22 20:57 default2.txt 
# 新创建文件权限为0666(-rw-rw-rw-),这是因为umask设为了0
[student@workstation ~]$ mkdir default2
[student@workstation ~]$ ls -ld default2
drwxrwxrwx. 2 student student 6 Sep 22 20:58 default2 
# 新创建目录权限为0777(drwxrwxrwx.),这是因为umask设为了0

屏蔽组和其他的所有文件和目录权限,umask设为077:

[student@workstation ~]$ umask 077
[student@workstation ~]$ umask
0077

[student@workstation ~]$ touch default3.txt
[student@workstation ~]$ ls -ld default3.txt 
-rw-------. 1 student student 0 Sep 22 21:07 default3.txt

[student@workstation ~]$ mkdir default3
[student@workstation ~]$ ls -ld default3
drwx------. 2 student student 6 Sep 22 21:07 default3
    如果在umask中设置了一个位,则新文件中的对应的权限将被清楚。例如:umask 0002可清楚其他用户的写入位。前导零表示特殊的用户和组权限未被清楚。umask为0077时,清楚新创建文件的所有组和其他权限。这段文字对比以上示例已经很清晰了吧,接着往下看......

umask符号和数值表示如下:

权限符号数值
读、写、执行rwx0
读写rw-1
读和执行r-x2
r–3
写和执行-wx4
-w-5
执行–x6
无权限7
[sunyinpeng@foundation ~]$ umask
0002
[sunyinpeng@foundation ~]$ umask -S
u=rwx,g=rwx,o=rx
[root@foundation ~]# umask
0022
[root@foundation ~]# umask -S
u=rwx,g=rx,o=rx
    umask的第一个数字代表特殊权限。最后三位数字分别代表用户拥有者(u)、组群所有者(g)和其他(o)中删除的权限。

举几个例子:介绍基本权限和umask组合分配后生成的默认权限

标准用户创建目录时

umask被设备为002(rwxrwxr-x),目录的基本权限被设置为777(rwxrwxrwx)。则创建目录的默认权限为775(drwxrwxr-x)。可以理解为基本权限数值减去umask数值。

[sunyinpeng@foundation ~]$ mkdir umask_directory
[sunyinpeng@foundation ~]$ ls -l
total 0
drwxrwxr-x. 2 sunyinpeng sunyinpeng 6 Dec 20 21:27 umask_directory

drwxrwxr-x 权限:目录所有者、组可以列出目录的内容,并且可以在该目录下(以及子目录)中创建、删除和编辑项。其他用户只能列出该目录的内容并将其下移到其中。

标准用户创建文件时

umask被设备为002(rwxrwxr-x),文件的基本权限被设置为666(-rw-rw-rw-),最终默认权限为644(-rw-rw-r–)。

[sunyinpeng@foundation ~]$ touch umask_file
[sunyinpeng@foundation ~]$ ls -l umask_file 
-rw-rw-r--. 1 sunyinpeng sunyinpeng 0 Dec 20 21:35 umask_file

-rw-rw-r-- 权限:文件拥有者和组可以读取和编辑该文件,其他用户只能读取文件。

root用户创建目录时

umask被设备为022(rwx-r-xr-x),目录的基本权限被设备为777(rwxrwxrwx)。最终默认权限为755(rwxr-xr-x)。

[root@foundation ~]# mkdir umask_directory
[root@foundation ~]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Dec 20 21:40 umask_directory

drwxr-xr-x 权限:目录所有者可以列出目录的内容,并且可以在该目录下(以及子目录)中创建、删除和编辑。组和其他用户只能列出该目录的内容并将其移动。

root用户创建文件时

umask被设置为022(rwxr-xr-x),文件的基本权限被设置为666(rw-rw-rw-),最终权限为644(-rw-r–r–)。

[root@foundation ~]# touch umask_file
[root@foundation ~]# ls -l umask_file 
-rw-r--r--. 1 root root 0 Dec 20 21:54 umask_file

-rw-r–r-- 权限:文件所有者可以读取和编辑文件,而组和其他用户只能读取文件。

以上内容一定会有一个疑问,怎么管理umask的数值来给定文件默认权限呢?接下来,进行刨析

设置UMASK

显示umask的当前数值和符号值

[sunyinpeng@foundation ~]$ umask
0002
[sunyinpeng@foundation ~]$ umask -S
u=rwx,g=rwx,o=rx

[root@foundation ~]# umask
0022
[root@foundation ~]# umask -S
u=rwx,g=rx,o=rx

bash的umask

bash一般有两种状态,登录状态和非登录状态。

可以使用echo $0确认,显示bash则为非登录shell状态,显示- bash,则为登录shell状态。

[root@foundation ~]# echo $0
bash

非登录的默认umask在/etc/bashrc文件中,登录的默认umask在/etc/profile中。

[root@foundation ~]# grep umask /etc/bashrc
    # By default, we want umask to get set. This sets it for non-login shell.
       umask 002
       umask 022

[root@foundation ~]# grep umask /etc/profile
# By default, we want umask to get set. This sets it for login shell
    umask 002
    umask 022

特定用户的umask

特定用户的umask默认在该用户的家目录下的 .bashrc文件中配置。

[root@foundation ~]# find / -name .bashrc
/etc/skel/.bashrc
/root/.bashrc
/home/sunyinpeng/.bashrc

新创建主目录的umask

新创建用的用户主目录指定的umask权限默认在/etc/login.defs文件中。

[root@foundation ~]# grep UMASK /etc/login.defs
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
UMASK           022
# If HOME_MODE is not set, the value of UMASK is used to create the mode.

设置shell启动时默认umask

标准用户的UID为200或以上,并且用户名和主要组名相同,就会分配一个002的umask;否则将为022,root用户的默认umask是022。umask中的任何前导零均可以省略。

作为root用户,可以通过添加名为/etc/profile.d/local-umask.sh的shell启动脚本来更改此设置。

例如:

对于UID大于199且用户名和主要组名相匹配的用户,将umask设为007,其他的则设置022。

[root@workstation ~]# vim /etc/profile.d/local-umask.sh
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 007
else
    unask 022
fi

如果只想每个人的umask都设为022,可以使用以下内容。

[root@workstation ~]# vim /etc/profile.d/local-umask.sh
umask 022
    当然,bash shell 用户的系统默认umask值在/etc/profile和/etc/bashrc文件中定义,可以在其主目录的.bash_profile和.bashrc文件中覆盖系统默认值。

访问控制

简介

在Linux中,每个目录或文件每次只能有一个用户所有者和组群所有者,譬如:

[root@foundation ~]# ll
total 0
drwxr-xr-x. 2 root       root       6 Dec 20 21:40 umask_directory
-rw-r--r--. 1 sunyinpeng sunyinpeng 0 Dec 20 21:54 umask_file

在这种情况下要授予用户权限来访问属于不同用户或组群的特定文件或目录,同时将其他文件和目录保留为私密,可以使用ACL,也就是访问控制列表。

例如,下面一个文件为特定用户文件,授予jerry用户和lisa组对该文件也有像特定用户所有者和组相同的权限。

设置访问控制
[root@foundation ~]# getfacl umask_file 
# file: umask_file
# owner: sunyinpeng
# group: sunyinpeng
user::rw-
group::r--
other::r--

[root@foundation ~]# setfacl -m u:jerry:rw- umask_file 
[root@foundation ~]# setfacl -m g:lisa:r-- umask_file 
[root@foundation ~]# getfacl umask_file 
# file: umask_file
# owner: sunyinpeng
# group: sunyinpeng
user::rw-
user:jerry:rw-
group::r--
group:lisa:r--
mask::rw-
other::r--

例子

现有两个群组stday_groups和student_groups,10个用户student0-student9,用户和群组分布如下:

组群用户
stday_groupsstudent0
student1
student2
student3
student4
student5
student_groupsstudent6
student7
student8
student9

需要在环境中创建/opt/material目录,且目录需要特权用户root管理,在该目录下需要创建两个文件confidential、topsecret。

confidential文件所属组为stday_groups,有组内student0用户全权管理,组内其他用户除读取该文件以外不能做任何操作,其它用户对该文件没有任何权限。

topsecret文件所属组为student_groups,有组内student6用户全权管理,组内其它用户除执行以外不能做任何操作,另外除stday_groups组中的student0和student1对该文件有读写权限以外,其他用户对该文件没有任何权限。

[root@foundation ~]# mkdir /opt/meterial
[root@foundation ~]# ls -ld /opt/meterial/
drwxr-xr-x. 2 root root 6 Dec 26 23:20 /opt/meterial/

[root@foundation ~]# touch /opt/meterial/confidential
[root@foundation ~]# touch /opt/meterial/topsecret
[root@foundation ~]# ls -l /opt/meterial/
total 0
-rw-r--r--. 1 root root 0 Dec 26 23:24 confidential
-rw-r--r--. 1 root root 0 Dec 26 23:24 topsecret

[root@foundation ~]# chown student0:stday_groups /opt/meterial/confidential 
[root@foundation ~]# chmod u=rwx,g=r,o=- /opt/meterial/confidential 
[root@foundation ~]# ls -ld /opt/meterial/confidential 
-rwxr-----. 1 student0 stday_groups 0 Dec 26 23:24 /opt/meterial/confidential

[root@foundation ~]# chown student6:student_groups /opt/meterial/topsecret 
[root@foundation ~]# chmod u=rwx,g=x,o=- /opt/meterial/topsecret
-rwx--x----. 1 student6 student_groups 0 Dec 26 23:24 /opt/meterial/topsecret

[root@foundation ~]# setfacl -m u:student0:rw /opt/meterial/topsecret 
[root@foundation ~]# setfacl -m u:student1:rw /opt/meterial/topsecret 
[root@foundation ~]# getfacl /opt/meterial/topsecret 
getfacl: Removing leading '/' from absolute path names
# file: opt/meterial/topsecret
# owner: student6
# group: student_groups
user::rwx
user:student0:rw-
user:student1:rw-
group::--x
mask::rwx
other::---

例子

1、创建名为/home/peng目录。

2、将/home/peng目录的组所有权改为yinpeng组。

3、验证yinpeng组中的用户是否能够在/home/techdocs目录中创建和编辑文件。

4、设置/home/peng目录的权限。对/home/peng目录配置setgid(2),所有者/用户和组具有读取/写入/执行权限(7),其他用户则没有权限(0)。

5、验证是否已正确设置权限。

6、确认yinpeng组中的用户能够在/home/peng目录中创建和编辑文件。不属于yinpeng组的用户无法在/home/peng目录中创建和编辑文件。用户peng1和peng2在yinpeng组中。用户student不在该组中。

7、修改全局登录脚本。普通用户应具有一个umask设置,该设置将阻止其他人查看或修改新的文件和目录。(对于UID大于199且用户名和主要组名相匹配的用户,创建/etc/profile.d/local-umask.sh文件,从而将umask设为007,其他人的则设为022。)

1
[root@controller ~]# mkdir /home/peng
2
[root@controller ~]# chown :yinpeng /home/peng
[root@controller ~]# ls -ld /home/peng
drwxr-xr-x. 2 root yinpeng 6 Sep 22 23:14 /home/peng 
3
[peng1@controller ~]$ touch /home/peng/doc.txt
touch: cannot touch '/home/peng/doc.txt': Permission denied 
4
[root@controller ~]# chmod 2770 /home/peng
5
[root@controller ~]# ls -ld /home/peng
drwxrws---. 2 root yinpeng 6 Sep 22 23:15 /home/peng 
6
[peng1@controller ~]$ touch /home/peng/doc.txt
[peng1@controller ~]$ echo "text" >> /home/peng/doc.txt
[peng1@controller ~]$ ls /home/peng
doc.txt
[peng1@controller ~]$ cat /home/peng/doc.txt 
text
[student@controller ~]$ touch /home/peng/text.txt
touch: cannot touch '/home/peng/text.txt': Permission denied
[student@controller ~]$ echo text2 >> /home/peng/doc.txt
-bash: /home/peng/doc.txt: Permission denied
7
[root@controller ~]# vim /etc/profile.d/local-umask.sh 
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 007  # 770(rwxrwx---)
else
    umask 022  # 755(rwxr-xr-x)
fi
[student@controller ~]$ umask
0007 
[root@controller ~]# umask
0022
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值