前言
Linux文件一般分为两种,一般文件和目录文件。是系统最底层的安全设定之一,所以要保证文件可以被可用的用户做相应操作
在普通文件上:
r:可读,可以使用类似cat等命令查看文件内容;读是文件的最基本权限,没有读权限,普通文件的一切操作行为都被限制。
w:可写,可以编辑此文件;
x:可执行,表示文件可由特定的解释器解释并运行。可以理解为windows中的可执行程序或批处理脚本,双击就能运行起来的文件。
在目录上:
r:可以对目录执行ls以列出目录内的所有文件;读是文件的最基本权限,没有读权限,目录的一切操作行为都被限制。
w:可以在此目录创建或删除文件/子目录;
x:可进入此目录,可使用ls -l查看文件的详细信息。
文件权限的查看
ls -l file #除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
ls -ld dir #查看目录本身权限
ll file #功能相同
ll -d dir #
ll -a dir #
文件权限的读取
解读 - | rw- | r-- | r–|. 1 | student | student | 2068 | Oct 14 21:46 | passwd
#####1 . "-"文件的类型
- #空文件,或者文本
d #目录
l #软链接
s #socket 套接字
b #block 块设备
c #字符设备
2. "rw-"文件的权限
rw-|rw-|r–
第1个"rw-"第2个"rw-"第3个"r–"分别表示如下:
1.[u] 文件拥有者对文件能做什么操作
2.[g] 文件所有组对文件能做什么操作
3.[o] 其他人对文件能做什么操作
3. 个数
对文件:文件硬链接个数(文件内容被记录的次数)
对目录:目录中子目录的个数
4. 文件的所有人
5. 文件所有组
6. 大小
对文件:文件大小
对目录:目录中子文件元数据(matedate)大小
7.文件的内容被修改的时间
8. 文件的名称
修改文件
为了更直观的查看文件权限修改可以使用
watch -n 1 ls -lR dir 来监控目录下的文件及子文件
改用户及用户组
chown可以修改文件所有者和所属组。
这个指令只有是由系统管理者(root)所使用
chgrp更改文件和目录的所属组,要求组已经存在。
对于链接文件而言,修改组的作用对象是链接的源文件,而非链接文件本身。
chown username file|dir
chown user.group file|dir
chown -R user.group dir
chgrp group file|dir
chgrp -R group dir
chmod <u|g|o><+|-|=><r|w|x> file|dir
权限chmod的改变方式
权限的模式有两种体现:数字体现方式和字符体现方式。
权限的数字表示:"-"代表没有权限,用0表示。
r------------------4
w------------------2
x------------------1
例如:rwx rw- r–对应的数字权限是764,732代表的权限数值表示为rwx -wx -w-。
- 可以使用字符方式修改权限
所有者使用字母"u"表示,所属组使用"g"来表示,其他使用"o"来表示,而字母"a"同时表示它们三者。所以使用字符方式修改权限时,需要指定操作谁的权限chmod u+x /mnt/file1 chmod g-r /mnt/file2 chmod ug-r /mnt/file3 chmod u-r,g+x /mnt/file4 chmod -r /mnt/file5 chmod o=r-x /mnt/file6
2… 使用数值方式修改权限
chmod 755 file
umask
umask值用于设置用户在创建文件时的默认权限。对于root用户(实际上是UID小于200的user),系统默认的umask值是022;对于普通用户和系统用户,系统默认的umask值是002。
-
永久更改umask
vim /etc/profile #编写系统配置文件 source /etc/profile #让更改立即生效
-
临时更改umask
vim /etc/bashrc #shell配置文件 source /etc/bashrc #让更改立即生效
特殊权限
1.sticky粘制位
如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,其它用户就不可以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置才可使用。
设定方式:
chmod o+t dir
chmod 1xxx dir
实例
chmod 777 abc
chmod +t abc
等价于
chmod 1777 abc
2.suid 冒险位
只针对与2进制可执行文件
当文件上有suid时任何人执行这个文件中记的程序产生的进程都属于文件的所有人
设定方式
chmod u+s file
chmod 4xxx file
3.sgid 强制位
针对二进制文件和目录。
针对二进制文件时,权限升级为命令的所属组权限。
针对目录时,目录中所建立的文件或子目录的组将继承默认父目录组,其本质还是提升为目录所属组的权限。此时目录应该要有rx权限,普通用户才能进入目录,如果普通用户有w权限,新建的文件和目录则以父目录组为默认组。
以2代表sgid,如2755,和suid组合如6755。
设定方式
chmod g+s file|dir
chmod 2xxx file|dir
acl权限列表
通常只通过这3个权限位是无法完全合理设置权限问题的,例如如何仅设置某单个用户具有什么权限。这时候需要使用扩展acl。
acl是一种特殊权限,它是文件系统上功能,用于解决所有者、所属组和其他这三个权限位无法合理设置单个用户权限的问题。
acl列表管理
setfacl -m u:username:rwx file #设定username对file拥有rwx权限
setfacl -m g:group:rwx file #设定group组成员对file拥有rwx权限
setfacl -x u:username file #从acl列表中删除username
setfacl -b file #关闭file上的acl列表
当权限出现"+"是表示acl开启赋予了一个用户对这个文件acl的特殊权力
然后发现本来只有root用户可以修改的文件,特定用户student也可以编写
getfacl file #查看acl开启的文件的权限
# file: file #文件名称
# owner: root #文件拥有者
# group: root #文件拥有组
user::rw- #文件拥有人的权限
user:kiosk:rwx #指定用户的权限
group::r-- #文件拥有组的权力
mask::rwx #能赋予用户的最大权力伐值
other::r-- #其他人的权限
acl的默认权限设定
acl默认权限只针对目录设定
acl权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限
setfacl -m d:u:student:rwx /mnt/westos