Linux多用户共享文件

linux文件权限分为 属主权限、属组权限、其他用户权限、特殊权限。

特殊权限

  1. s:setUID, 用户执行有s权限的文件时,会以属主身份去执行。eg: 普通用户执行passwd修改密码时,会通过passwd的属主,也就是root去执行。

    设置SetUID
    chmod 4xxx < file-name >
    chmod u+s < file-name >
    取消SetUID
    chmod xxx < file-name >
    chmod u-s < file-name >
  2. s:setGID, 对于文件,执行该文件时,以组权限执行。对于目录,新文件会以该目录的默认属组作为默认属组。

    设置SetGID
    chmod 2xxx
    chmod g+s
    取消SetGID
    chmod xxx
    chmod g-s
  3. t:StickBit, 粘滞位,t权限的目录有wx权限,进程结束后文件依然驻留在内存中,无法被其他用户删除。

    设置SBIT
    chmod 1xxx < dir-name >
    chmod o+t < dir-name >
    取消SBIT
    chmod xxx < dir-name >
    chmod o-t < dir-name >

共享目录

根据setGID的特性,可以实现大范围地创建并共享文档。

  • 先做准备工作
# 创建一个分享组
parallels@abosen:~/temp$ sudo groupadd shared
# 添加当前用户到分享组
parallels@abosen:~/temp$ sudo usermod -a parallels -G shared
# 创建新用户,并添加到分享组,-M 不创建home目录
parallels@abosen:~/temp$ sudo useradd -M person2share -G shared
# 检查结果
parallels@abosen:~/temp$ id person2share
uid=1001(person2share) gid=1002(person2share) groups=1002(person2share),1001(shared)
parallels@abosen:~/temp$ cat /etc/group | grep shared
shared:x:1001:parallels,person2share
  • 共享目录
# 创建共享目录
parallels@abosen:~/temp$ mkdir shared_dir
parallels@abosen:~/temp$ ls -lF
total 4
drwxrwxr-x 2 parallels parallels 4096 Oct 31 15:37 shared_dir/
# 修改目录组,设置SGID
parallels@abosen:~/temp$ sudo chgrp shared shared_dir/
parallels@abosen:~/temp$ sudo chmod g+s shared_dir
parallels@abosen:~/temp$ ls -lF
total 4
drwxrwsr-x 2 parallels shared 4096 Oct 31 15:37 shared_dir/
# 注意到组权限x变为了s,设置SGID成功
# 目录下新建一个文件,该文件所属组为目录组,文件执行权限为组权限。可能需要设置umask
parallels@abosen:~/temp$ cd shared_dir/
parallels@abosen:~/temp/shared_dir$ touch testfile
parallels@abosen:~/temp/shared_dir$ ls -lF
total 0
-rw-rw-r-- 1 parallels shared 0 Oct 31 15:42 testfile
  • 测试
# 关闭属主权限
parallels@abosen:~/temp/shared_dir$ sudo chmod u-rw testfile
[sudo] password for parallels:
parallels@abosen:~/temp/shared_dir$ ls -lF
total 0
----rw-r-- 1 parallels shared 0 Oct 31 15:42 testfile
parallels@abosen:~/temp/shared_dir$ cat testfile
cat: testfile: Permission denied
# 切换用户进行尝试
parallels@abosen:~/temp/shared_dir$ su person2share
Password:
$ ls -lF /home/parallels/temp/shared_dir/testfile
----rw-r-- 1 parallels shared 0 Oct 31 15:42 /home/parallels/temp/shared_dir/testfile
$ echo hello > /home/parallels/temp/shared_dir/testfile
$ cat /home/parallels/temp/shared_dir/testfile
hello

你可能感兴趣的:(shell,linux)