【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT) 文件权限表示: 文件权限分类: UGO含义: 普通权限: 修改权限chmod: 修改文件属主和属组chown: 任务实施: 文件特殊权限: 补充:chmod和chown设置文件权限和设置用户和组 总结: 默认权限(遮罩权限)

  chmod 2770 /home/admins,刚看到这个命令,有点不解,后边770分别表示用户,组,其他人,前面的2不知道代表的是什么意思。百度之后发现2是代表八进制数,也是一种权限,它的三个bit的含义分别是SUID,SGID,SBIT

参考博客:https://czj.so/385/chmod%E7%9A%84%E7%AC%AC%E5%9B%9B%E4%BD%8D%E6%95%B0.html

权限管理命令(chattr、lsattr、sudo)https://www.cnblogs.com/HeiDi-BoKe/p/11911684.html

chgrp改变文件或目录的属组:https://www.cnblogs.com/HeiDi-BoKe/p/11912806.html

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

 文件类型:

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

文件权限分类:

  • 普通权限:用户正常情况对文件具有的权限
  • 高级权限:用户对某个文件有特殊需求时,普通权限不能满足时需要设置高级权限
  • 默认权限:系统里创建的文件,都会有个默认权限(目录:rwxr-xr-x 755,文件:rw-r--r-- 644)

UGO含义:

  UGO:指用户身份,每个字母代表不同用户身份。

  • U(the user who owns it):文件的拥有者owner或创建者
  • G(other users in the file's group):在文件的所属组(默认是创建文件的用户的主组)里的用户
  • O(other users not in the fiile's group):既不是文件的创建者,也不在文件属组里的用户,称为其他人。
  • A (all users):所有人

普通权限:

1.针对目录

  拥有rwx-,分别表示:

  • read 具有查看该目录里面内容(ls命令列出);
  • write 在该目录下可以创建,删除,重命名等操作;
  • execute 可以进入或切换到该目录里(cd命令);
  • - 该目录没有权限。

2.针对文件

  拥有rwx-,分别表示:

  • read 具有查看该文件内容(cat/more/less/tail/head等命令查看);
  • write 可以修改文件内容(vi命令编辑文件);
  • execute 可以执行该文件(脚本文件,一般程序文件,命令都需要执行权限);
  • - 该文件没有权限;

修改权限chmod:

1.chmod用法

chmod 【选项模式(权限) 文件名
常见选项:
-R,--recursive        递归更改目录或文件权限

2.更改文件权限的方式

字母形式:

u:表示文件拥有者
g:表示文件属组里的用户
o:表示其他人,既不是文件创建者,也不在文件属组
a:表示所有人

实列:

# 准备环境
[root@tourby tmp]# cd /tanbaobao/
[root@tourby tanbaobao]# ls
test
[root@tourby tanbaobao]# mkdir dir1
[root@tourby tanbaobao]# touch dir1/file{1..5}
[root@tourby tanbaobao]# touch dir1/test{1..3}
[root@tourby tanbaobao]# ls -R dir1/
dir1/:
file1  file2  file3  file4  file5  test1  test2  test3
[root@tourby tanbaobao]# ls -Rl dir1/
dir1/:
总用量 0
-rw-r--r--. 1 root root 0 6月   3 10:20 file1
-rw-r--r--. 1 root root 0 6月   3 10:20 file2
-rw-r--r--. 1 root root 0 6月   3 10:20 file3
-rw-r--r--. 1 root root 0 6月   3 10:20 file4
-rw-r--r--. 1 root root 0 6月   3 10:20 file5
-rw-r--r--. 1 root root 0 6月   3 10:20 test1
-rw-r--r--. 1 root root 0 6月   3 10:20 test2
-rw-r--r--. 1 root root 0 6月   3 10:20 test3

# 创建用户
[root@tourby tanbaobao]# useradd yunwei
[root@tourby tanbaobao]# useradd admin
[root@tourby tanbaobao]# usermod -G admin yunwei
[root@tourby tanbaobao]# id yunwei
uid=1004(yunwei) gid=1004(yunwei) 组=1004(yunwei),1005(admin)

# 使用yunwei用户登录,能查看目录和文件内容,但是无法写入内容到文件中。因为没有w写的权限。
[root@tourby tanbaobao]# echo "yunwei" | passwd --stdin yunwei
更改用户 yunwei 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@tourby tanbaobao]# su - yunwei
[yunwei@tourby ~]$ cd /tanbaobao/dir1/
[yunwei@tourby dir1]$ ls -l
总用量 0
-rw-r--r--. 1 root root 0 6月   3 10:20 file1
-rw-r--r--. 1 root root 0 6月   3 10:20 file2
-rw-r--r--. 1 root root 0 6月   3 10:20 file3
-rw-r--r--. 1 root root 0 6月   3 10:20 file4
-rw-r--r--. 1 root root 0 6月   3 10:20 file5
-rw-r--r--. 1 root root 0 6月   3 10:20 test1
-rw-r--r--. 1 root root 0 6月   3 10:20 test2
-rw-r--r--. 1 root root 0 6月   3 10:20 test3
[yunwei@tourby dir1]$ pwd
/tanbaobao/dir1
[yunwei@tourby dir1]$ echo hello > file1
-bash: file1: 权限不够

#yunwei用户既不是文件创建者也不是文件属组。所以为其他人创建写w的权限
[yunwei@tourby dir1]$ exit
注销
[root@tourby tanbaobao]# cd dir1/
[root@tourby dir1]# chmod o+w file1

# 验证,写入成功
[root@tourby dir1]# su - yunwei
[yunwei@tourby ~]$ cd /tanbaobao/dir1/
[yunwei@tourby dir1]$ echo hello > /tanbaobao/dir1/file1
[yunwei@tourby dir1]$ cat /tanbaobao/dir1/file1 
hello
# 同时设置ugo权限
[root@tourby dir1]# chmod u+x,g=rw,o-r file3

#所有人具有执行权限
[root@tourby dir1]# chmod a+x file4

# 取消所有人的执行权限
[root@tourby dir1]# chmod -x file4

数字形式:

r:4
w:2
x:1
-:0

修改文件属主和属组chown:

  前提条件,用户和组需存在

1.chown命令用法

# 修改文件属主
chown 用户名 文件名

# 修改文件属主和属组
chown 用户名.组名 文件名
chown 用户名:组名 文件名
chown 用户名. 文件名    (没有指定组名则使用默认用户主组)

# 只修改文件属组
chown .组名 文件名
chown :组名 文件名

-R选项表示递归修改

补充:chgrp只能修改文件属组,参考https://www.cnblogs.com/HeiDi-BoKe/p/11912806.html

[root@tourby dir1]# chgrp admin test*
[root@tourby dir1]# ll
-rw-r--r--. 1 root   admin  0 6月   3 10:20 test1
-rw-r--r--. 1 root   admin  0 6月   3 10:20 test2
-rw-r--r--. 1 root   admin  0 6月   3 10:20 test3

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

任务实施:

# 在跳板机上创建目录
[root@tourby tanbaobao]# mkdir code

# 权限管控
## 创建开发人员和组
[root@tourby tanbaobao]# groupadd coding
[root@tourby tanbaobao]# useradd -G coding lidamao
[root@tourby tanbaobao]# useradd -G coding wangergou
[root@tourby tanbaobao]# id lidamao
uid=1011(lidamao) gid=1012(lidamao) 组=1012(lidamao),1011(coding)
[root@tourby tanbaobao]# id wangergou
uid=1012(wangergou) gid=1013(wangergou) 组=1013(wangergou),1011(coding)

## 由于上边开发人员都属于coding组。所以改变目录属组和权限,只有开发人员可以使用,创建爱你,删除等操作
[root@tourby tanbaobao]# chgrp coding code/
[root@tourby tanbaobao]# chmod g+w code/
[root@tourby tanbaobao]# ll -d code/
drwxrwxr-x. 2 root coding 6 6月   3 11:40 code/

## 其他人没有查看该目录内容的权利(只有开发部门有)
[root@tourby tanbaobao]# chmod o-rx code/
[root@tourby tanbaobao]# ll -d code/
drwxrwx---. 2 root coding 6 6月   3 11:40 code/

## 测试权限
[root@tourby tanbaobao]# su - lidamao
[lidamao@tourby ~]$ cd /tanbaobao/code/
[lidamao@tourby code]$ touch file{1..3}
[lidamao@tourby code]$ ll
总用量 0
-rw-rw-r--. 1 lidamao lidamao 0 6月   3 11:51 file1
-rw-rw-r--. 1 lidamao lidamao 0 6月   3 11:51 file2
-rw-rw-r--. 1 lidamao lidamao 0 6月   3 11:51 file3

[root@tourby tanbaobao]# su - wangergou
[wangergou@tourby ~]$ touch /tanbaobao/code/test{1..3}
[wangergou@tourby ~]$ ll /tanbaobao/code/
总用量 0
-rw-rw-r--. 1 lidamao   lidamao   0 6月   3 11:51 file1
-rw-rw-r--. 1 lidamao   lidamao   0 6月   3 11:51 file2
-rw-rw-r--. 1 lidamao   lidamao   0 6月   3 11:51 file3
-rw-rw-r--. 1 wangergou wangergou 0 6月   3 11:53 test1
-rw-rw-r--. 1 wangergou wangergou 0 6月   3 11:53 test2
-rw-rw-r--. 1 wangergou wangergou 0 6月   3 11:53 test3

# 只能自己管理自己,不能删除别人文件,这个是针对目录本身,所以需要设置目录的权限(这里需要用到高级权限)
# SBIT位,只能删除自己创建的文件
[root@tourby tanbaobao]# chmod o+t /tanbaobao/code/
[root@tourby tanbaobao]# ll -d code/
drwxrwx--T. 2 root coding 84 6月   3 11:53 code/

文件特殊权限:

1. SUID针对命令或脚本文件(属主操作)

  SUID冒险位是一种对二进制程序进行设置的特殊权限。可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。PS:里的执行权限指x。

   例如:所有用户可以执行passwd命令修改自己密码,但是密码保存在/etc/shadow文件中,该文件默认权限为000,除了root用户以外,其他用户都没有查看或编辑该文件的权限。但如果在执行passwd命令时加上SUID特殊权限,就可以使普通用户对该文件获得临时的所有者身份,将密码写入该文件中。如:皇上授予大臣的尚方宝剑,见此剑如见皇上。大臣能使用该宝剑严惩贪官,但并不代表他就是皇上。所以在这里是一种有条件、临时的特殊权限授权方法。

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

PS:文件属主的x权限,s代替.表示被设置了SUID。如果属主位没有x权限,会显示为大写S,表示有故障(权限无效

在理解特殊权限之前,需要先具备几个关于安全上下文的认知:

 前提:进程有属主和属组;文件有属主和属组;

 1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限;

2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;

3) 进程访问文件时的权限,取决于进程的发起者:

   a) 进程的发起者,同文件的属主:则应用文件属主权限;

  b) 进程的发起者,属于文件的属组;则应用文件属组权限;

  c) 应用文件“其它”权限; 

  通常情况下普通用户test启动vim后,系统会创建一个以当前用户test为属主属组的vim进程。此时vim进程的属主属组为test:test,由于无论是属主还是属组都不具有对/etc/passwd的编辑权限。所以这个vim进程无权编辑/etc/passwd。而给/usr/bin/vim设置了SUID之后,test或任何用户启动vim程序时,系统创建的vim进程的属主则是取了/usr/bin/vim这个程序文件自身的属主root,所以此时vim进程的属主属组为root:test系统检查发现正好匹配了/etc/passwd的属主,于是放行vim进程。其他命令同理。

权限设置:

# 字母表示法
chmod u+s 文件名
chmod u-s 文件名

# 数字表示法
# 添加SUID权限到二进制程序文件(添加到DIR无意义)在普通三位数字权限位之前,用4代表添加的SUID位
chmod 4755 文件    
chmod 0xxx 文件    # 可以删除文件的SUID(无法删除目录的SUID)  

2. SGID一般针对目录(属组操作)

  SGID强制位其功能有两点。一是让执行者临时拥有属组的权限,和SUID一样只对拥有二进制的执行文件有效。二是在某目录中创建的文件自动继承该目录的用户组(只对目录进行设置)。

  例如/usr/sbin/sendmail.sendmail文件,权限如下:

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

格式:

# 字母表示法
chmod g+s 目录/文件...
chmod g-s 目录/文件...

# 数字表示法 
# 在普通数字权限位前,用2代表添加SGID位
chmod 2755  DIR/FILE  # 添加SGID到目录或文件
chmod 0755 DIR/FILE 删除文件的SGID,(目录不受影响)
chmod 755 DIR/FILE 同上 

实例:

# 给目录赋予SGID权限
# 1.使用普通用户test1登录。创建目录并分权限
[test1@VM_0_10_centos test]$ mkdir /tmp/dir1
[test1@VM_0_10_centos test]$ chmod 2777 /tmp/dir1/
[test1@VM_0_10_centos test]$ ll -d /tmp/dir1/
drwxrwsrwx 2 test1 test1 4096 Nov 25 17:17 /tmp/dir1/

# 2.使用普通用户test2,在该目录下创建文件和目录
[test2@VM_0_10_centos dir1]$ touch test2file.txt
[test2@VM_0_10_centos dir1]$ mkdir test2dir
[test2@VM_0_10_centos dir1]$ ll
total 4
drwxrwsr-x 2 test2 test1 4096 Nov 25 17:20 test2dir
-rw-rw-r-- 1 test2 test1    0 Nov 25 17:20 test2file.txt

PS:结果显示,test2dir1目录下创建的文件和目录都自动继承了test1的属组,而且新目录的权限也继承了SGID。所以设定了SGID的目录中的所有新建文件和目录都会自动属于组test1.

# 新建/tmp/test目录,要求 openstack 和docker 用户对其有写权限,且在目录创建的文件的属组都为cloud组;要求每一个用户不能删除别人的文件,但可以编辑
[root@VM_0_10_centos~]# mkdir /tmp/test
[root@VM_0_10_centos~]# groupadd cloud
[root@VM_0_10_centos~]# useradd openstack -g cloud
[root@VM_0_10_centos~]# useradd docker -g cloud
[root@VM_0_10_centos~]# chown :cloud /tmp/test
[root@VM_0_10_centos~]# chmod o+t /tmp/test
[root@VM_0_10_centos~]# chmod g+s /tmp/test/
[root@VM_0_10_centos~]# ls -ld /tmp/test
drwxr-sr-t. 2 root cloud 4096 Mar 14 10:22 /tmp/test

 

SBIT(Sticky Bit)针对公共目录,控制删除

  SBIT称之为特殊权限位之粘滞位。确保只能删除自己的文件,而不能删除其他用户的文件。相当于对某目录设置SBIT之后,该目录中的文件只能被其所有者执行删除操作。

  1. 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除和改名自己的文件或目录
  2. 只能作用在目录.普通文件设置无意义,且会被linux内核忽略
  3. 用户在设置Sticky权限的目录下新建的目录不会自动继承Sticky权限 

  如/tmp目录是一个公共共享的目录。

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

格式:

# 字母表示法:
chmod o+t 目录...
chmod o-t 目录...
chmod +t 目录...

# 数字表示法:
# 在普通数字权限位前,用1代表添加Sticky位 
chmod 1755 目录

实例:

# 在系统中创建一个很多用户可以共同使用的目录,但是要求用户之间不能互相删除改
# 1.创建共享的目录
[root@VM_0_10_centos test]# mkdir shareSBIT
[root@VM_0_10_centos test]# chmod 1777 shareSBIT/
[root@VM_0_10_centos test]# ll -d shareSBIT/
drwxrwxrwt 2 root root 4096 Nov 25 17:32 shareSBIT/
# 2.登录其他两个用户创建文件或目录(test1,test2)
[test1@VM_0_10_centos shareSBIT]$ touch test1file
[test1@VM_0_10_centos shareSBIT]$ ll
total 0
-rw-rw-r-- 1 test1 test1 0 Nov 25 17:33 test1file
[root@VM_0_10_centos shareSBIT]# su test2
[test2@VM_0_10_centos shareSBIT]$ touch test2file
[test2@VM_0_10_centos shareSBIT]$ ll
total 0
-rw-rw-r-- 1 test1 test1 0 Nov 25 17:33 test1file
-rw-rw-r-- 1 test2 test2 0 Nov 25 17:34 test2file
# 3.测试。在test2用户中删除test1创建的文件(修改,移动同样)
[test2@VM_0_10_centos shareSBIT]$ rm -rf test1file 
rm: cannot remove ‘test1file’: Operation not permitted

补充:chmod和chown设置文件权限和设置用户和组

chmod

  用于设置文件或目录权限。

格式:

chmod [选项] 权限 文件或目录

PS:对目录需要加上-R参数,表示递归

chown

  用于设置用户和组。

格式:

chown [选项] 所有者:所属组 文件或目录名

PS:对目录需要加上-R参数,表示递归

总结:

  SUID作用于文件、SGID作用于文件和目录、SBIT作用于目录

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

添加权限需注意:

# 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
chmod u+s ... 添加SUID
chmod g+s ... 添加SGID
chmod +s ...同时添加SUID和SGID
chmod -s ...同时删除SUID和SGID
chmod o+t ...添加Sticky
chmod +t ...同上

# 数字权限表示法添加/删除时:
# 数字权限法可以同时删除文件的所有三种超级权限
chmod 0755 FILE
chmod  755 FILE

# 数字权限法只能删除目录的Sticky.不能删除目录的SUID和SGID.
# 数字权限法每次只能设置一种超级权限.添加权限时:对于文件,会删除掉原有的其他超级权限。对于目录,添加SUID或SGID时,Sticky会被删除. 
#
所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限.


#几个权限位映射参考:
SUID: user, 占据属主的执行权限位;
s: 属主拥有x权限 S:属主没有x权限

SGID: group, 占据group的执行权限位;
s: group拥有x权限 S:group没有x权限

Sticky: other, 占据ohter的执行权限位;
t: other拥有x权限
T:other没有x权限

默认权限(遮罩权限)

  用户创建时,默认就有的权限。默认权限由umask来控制。

1.umask

  管理员umask 0022(目录755,文件644)和普通用户umask 0002(目录775,文件664)不一样。

临时控制(用umask命令设置,只在当前终端有效):

  默认目录最大权限0777,文件0666。

计算公式:umask = 文件最大权限-文件默认权限

如:umask 0007  临时设置umask权限

目录默认权限:0777 - umask = 0777 - 0007 = 0770

普通文件默认权限:0666 - umask = 0666 - 0007 = 0660(如果是负数用0代替)

注意:文件默认创建时不会有x执行权限。如果修改了umask,默认权限也不会设置x执行

会往前进一步,如:

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

永久控制(写入配置文件,对所有终端有效):

【linux命令 】chmod设置权限 + chown设置属主和属组 + 文件特殊权限(SUID、SGID、SBIT)
文件权限表示:
文件权限分类:
UGO含义:
普通权限:
修改权限chmod:
修改文件属主和属组chown:
任务实施:
文件特殊权限:
补充:chmod和chown设置文件权限和设置用户和组
总结:
默认权限(遮罩权限)

1.针对所有用户生效
# vim /etc/bashrc
在文件最后添加:
umask 0007

重新读取配置文件让其生效
# source /etc/bashrc
或
# . /etc/bashrc

2.针对某个用户生效
# vim ~/.bashrc
在文件最后添加:
umask 0007

扩展ACL访问控制策略https://www.cnblogs.com/HeiDi-BoKe/p/11912349.html

w

 表示在该目录下可以创建,删除,重命名等操作