Linux文件权限中的w属性

很多概念以为自己知道,实际不然,文件权限就是一个。

文件权限中的w属性对于普通文件和目录是不同的:

  • 对于普通文件,可以修改文件的内容
  • 对于目录,可以修改目录的内容,如增加文件,删除文件。

来看一个例子。这里面涉及2个用户:root和bill。

sudo useradd bill
sudo mkdir /usr/local/share/test
> /usr/local/share/test/foo
mkdir /usr/local/share/test/bar_dir
> /usr/local/share/test/bar_dir/bar
chmod o+w /usr/local/share/test

现在来看一下文件和目录的权限:

# ls -ld /usr/local/share
drwxr-xr-x. 7 root root 75 Aug 11 11:52 /usr/local/share

# ls -ld /usr/local/share/test
drwxr-xrwx. 2 root root 17 Aug 11 11:53 /usr/local/share/test

# ls -l /usr/local/share/test/foo
-rw-r--r--. 1 root root 0 Aug 11 11:53 /usr/local/share/test/foo

# ls -ld /usr/local/share/test/bar_dir
drwxr-xr-x. 2 root root 17 Aug 11 11:57 /usr/local/share/test/bar_dir

# ls -l /usr/local/share/test/bar_dir/bar
-rw-r--r--. 1 root root 0 Aug 11 11:57 /usr/local/share/test/bar_dir/bar

那么对于test目录和其下的目录和文件,bill用户可以操作吗?

我们先切换到用户bill:

su - bill

首先对于目录,bill用户无权删除,因为其没有上层目录/usr/local/share的w权限:

$ rm -fr /usr/local/share/test
rm: cannot remove ‘/usr/local/share/test/bar_dir/bar’: Permission denied

那么对于test目录下的foo文件呢,其实也是可以删除的,因为bill有test目录的w权限:

$ cd /usr/local/share/test
$ ls -l foo
-rw-r--r--. 1 root root 0 Aug 11 12:04 foo
$ id
uid=54322(bill) gid=54331(bill) groups=54331(bill) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ rm foo
rm: remove write-protected regular empty file ‘foo’? y
$ ls -l foo
ls: cannot access foo: No such file or directory

并且,bill用户可以在test目录中生成新文件:

$ > newfile
$ ls -l newfile
-rw-rw-r--. 1 bill bill 0 Aug 11 12:05 newfile

我们再以root用户重新生成foo文件,那么bill可以修改文件foo吗?

用vi编辑foo文件,保存时报警说是只读文件:
在这里插入图片描述
但是,用w!可以保存成功:
在这里插入图片描述
只不过owner变了:

$ ls -l foo
-rw-r--r--. 1 bill bill 25 Aug 11 12:09 foo

所以,bill可以修改文件的内容,但是不能保持原来的属主。相当于把文件删除然后自己再新建议一个。

最后对于test目录下的目录bar_dir,删除失败:

$ pwd
/usr/local/share/test

$ ls -ld .
drwxr-xrwx. 3 root root 36 Aug 11 12:15 .

$ ls -l bar_dir/
total 0
-rw-r--r--. 1 root root 0 Aug 11 11:57 bar

$ rm -fr bar_dir
rm: cannot remove ‘bar_dir/bar’: Permission denied

$ cd bar_dir

$ rm bar
rm: remove write-protected regular empty file ‘bar’? y
rm: cannot remove ‘bar’: Permission denied

这里需要说明一下,删除失败是因为其删除不了目录中的文件。如果root用户帮他把bar文件先删除,则空的目录是可以删除的:

$ id -un
bill

$ rmdir bar_dir

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值