目录权限
前面学过了目录类型,d开头的是目录,-开头的是文件。
注意:这里说的是普通用户,超级用户不受限制。
- 如果目录没有r,就无法查看目录里的文件。
- 如果目录没有w,就无法在目录里新建文件。
缺省权限
对于普通文件,起始权限是666,默认不带可执行。
对于目录文件,只是权限是777,默认带可执行。
umask 权限掩码
最终权限=起始权限&(-umask)
umask目的是凡是umask中出现的权限都不应该在最终全限中出现。
默认权限由操作系统自主决定,无法在创建前进行修改,通过umask让系统可配置能够灵活的满足需要的情况。配置umask,可以控制文件的默认权限,让我们的代码都是可控的。
粘滞位
在一个普通用户的目录下,在里面创建一个普通用户文件和超级用户文件。这个普通用户的文件相对于这个超级用户的文件访问权限是other,在普通用户下可以根据rwx对超级用户文件进行操作。给当这个超级用户文件other访问权限rwx修改为为不可写不可读不可执行时,现在在普通用户下不能对超级用户的文件进行任何操作。但是在普通用户下可以对此文件进行删除。这时可以得出一个结论,一个文件是否能删除与文件本身无关,与此时所处的目录的w权限有关。
当两个用户需要共享一个文件的时候, tmp 目录是多用户环境中的公共目录,在tmp目录下生成一个公共目录。此时两个用户都能对此尽心修改,当然两个用户之外的用户也可以对此文件进行修改。这时就需要引入粘滞位。
在 Linux 系统中,粘滞位(Sticky Bit) 是一种特殊权限位,主要用于控制对特定目录中文件的删除操作。设置粘滞位后,当前用户只能删除自己的共享文件,删不掉另一个用户的共享文件。只有文件的所有者或 root 用户才能删除或移动该文件,而其他用户即使有写权限也不能删除或移动这些文件。
当一个目录被设置为"粘滞位"(用chmod +t)
chmod +t directory # 为目录设置粘滞位
chmod -t directory # 移除目录的粘滞位
删除tmp目录下的共享文件,root删除。
sudo
udo命令 用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers
中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
$ sudo su -
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
这个命令相当于使用root超级用户重新登录一次shell,只不过密码是使用的当前用户的密码。而且重要是,该命令会 重新加载/etc/profile文件以及/etc/bashrc文件等系统配置文件,并且还会重新加载root用户的S H E L L 环境变量所对应的配置文件 ∗ ∗ ,比如: r o o t 超级用户的 SHELL环境变量所对应的配置文件 ,比如:root超级用户的SHELL环境变量所对应的配置文件∗∗,比如:root超级用户的SHELL是/bin/bash,则会加载/root/.bashrc等配置。如果是/bin/zsh,则会加载/root/.zshrc等配置,执行后是完全的root环境。
$ sudo -i
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
这个命令基本与 sudo su -
相同,执行后也是root超级用户的环境,只不过是多了一些当前用户的信息。
$ sudo -s
# env|grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' --color
个命令相当于 以当前用户的S H E L L 开启了一个 r o o t 超级用户的 n o − l o g i n 的 s h e l l ,不会加载 / e t c / p r o f i l e 等系统配置 ∗ ∗ 。所以 / e t c / p r o f i l e 文件中定义的 T E S T E T C 环境变量就看不到了,但是会 ∗ ∗ 加载 r o o t 用户对应的配置文件 ∗ ∗ ,比如 r o o t 用户的 SHELL开启了一个root超级用户的no-login的shell,不会加载/etc/profile等系统配置 。所以/etc/profile文件中定义的TEST_ETC环境变量就看不到了,但是会加载root用户对应的配置文件,比如root用户的SHELL开启了一个root超级用户的no−login的shell,不会加载/etc/profile等系统配置∗∗。所以/etc/profile文件中定义的TEST E TC环境变量就看不到了,但是会∗∗加载root用户对应的配置文件∗∗,比如root用户的SHELL是/bin/zsh,那么会加载/root/.zshrc配置文件,执行完后,不会切换当前用户的目录。
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。