一个文件权限的实验:umask和setgid

本文实验基于The Linux Command Line, 2nd Edition,第9章:Permissions中的实验。技术点是umask和setgid

新建2个用户,karen和bill:

sudo useradd bill
sudo useradd karen

系统自动建立了与用户名相同的group:

$ id bill
uid=54322(bill) gid=54332(bill) groups=54332(bill)

$ id karen
uid=54323(karen) gid=54333(karen) groups=54333(karen)

因为她们都属于音乐兴趣组,因此新建组music,并赋予此2用户,作为secondary/supplementary group:

sudo groupadd music
sudo usermod bill -G music
sudo usermod karen -G music

确认加组成功:

$ id bill
uid=54322(bill) gid=54332(bill) groups=54332(bill),54334(music)

$ id karen
uid=54323(karen) gid=54333(karen) groups=54333(karen),54334(music)

创建一个共享工作目录:

sudo mkdir /usr/local/share/Music

由于umask是0022,即000-000-010-010,因此group和other的w权限被去掉了:

$ umask
0022

$ ls -ld /usr/local/share/Music
drwxr-xr-x. 2 root root 6 Aug  9 02:16 /usr/local/share/Music

由于Music目录是共享目录,因此修改其group权限为music,并增加group的写权限:

$ sudo chown :music /usr/local/share/Music
$ ls -ld /usr/local/share/Music
drwxr-xr-x. 2 root music 6 Aug  9 01:45 /usr/local/share/Music

$ sudo chmod g+w /usr/local/share/Music
$ ls -ld /usr/local/share/Music
drwxrwxr-x. 2 root music 6 Aug  9 01:45 /usr/local/share/Music

到这里,按照原文的说法,应该有2个问题。

  1. 创建的文件,不能被同组其他成员修改
  2. 创建的文件,组并非music,而是与用户名相同的组

分别以karen和bill用户登录,并各自在共享目录中生成文件:

$ ls -l /usr/local/share/Music
total 0
-rw-rw-r--. 1 bill  bill  0 Aug  9 02:25 bill
-rw-rw-r--. 1 karen karen 0 Aug  9 02:25 karen

我们发现问题1并不存在,原因是用户的umask是0002,而并非原书中的0022:

$ id
uid=54323(karen) gid=54332(karen) groups=54332(karen),54333(music) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ umask
0002

那为何karen,bill的umask是0002?原因在/etc/profile文件中:

...
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
...

第2个问题,可以通过setgid解决:

sudo chmod g+s /usr/local/share/Music

再次分别以karen和bill用户登录,并各自在共享目录中生成文件:

$ ls -lt
total 0
-rw-rw-r--. 1 karen music 0 Aug  9 09:35 karen01
-rw-rw-r--. 1 bill  music 0 Aug  9 09:35 bill01
## 上面是setgid之后生成的

## 下面是setgid之前生成的
-rw-rw-r--. 1 bill  bill  0 Aug  9 08:48 bill
-rw-rw-r--. 1 karen karen 0 Aug  9 08:47 karen

可以看到,新的文件所属的group变为了目录的group,即music。而非执行操作用户(karen或bill)的group。

概念参看这里

Setting the setgid permission on a directory causes files and subdirectories created within to inherit its group ownership, rather than the primary group of the file-creating process.

清理:

userdel -r bill
userdel -r karen
groupdel music
rm -fr /usr/local/share/Music

参考

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值