对于文件权限的设定是系统最底层的,安全设定方法之一。同时确保了文件可以被可用的用户进行相应的操作。
ls -l file
ls -ld dir
ll file
ll -d dir
- | rw-rw-r-- | 1 | kiosk | kiosk | 0 | JuL 21 09:18 | file
- [1] [2] [3] [4] [5] [6] [7] [8]
[1] 文件类型
- | 空文件,或者文本 |
d | 目录 |
l | 软连接(快捷方式) |
s | socket 套接字 |
b | block 块设备 |
c | 字符设备 |
[2]文件的权限
rw- | rw- |r–
1 2 3
1:【u】文件的所有人能对文件进行的操作
2:【g】文件的所有组能对文件进行的操作
3:【o】其他人能对文件进行什么操作
[3] 对文件来说:指文件硬链接的个数(文件内容在数据区被记录的次数)
对目录来说:指目录中子目录的个数
[4] 指文件的所有人的名称
[5] 指文件所有组
[6] 对文件来说:指文件的大小
对目录来说:指目录中子文件的元数据(matedate可以理解为文件的属性)
[7] 指文件内容最后一次被修改的时间
[8] 文件或目录的名称
chown (改变用户或者改变用户和组)| chgrp(仅仅只改变组)
chown username file|dir ##改变相应文件或目录的用户名为username
chown username:group file|dir ##改变相应文件或目录的用户名和组为username,group
chown -R username:group dir ##不仅改变目录本身的user和group,同时改变该目录下子目录的user和group
chgrp group file|dir
chgrp -R group dir
用超级用户创建文件可以看到,文件的所有人和所有组都为root
chown tom file 改变文件所有人为tom
chgrp tom file 改变文件所有组为tom
在root用户下建立递归目录1,并将file文件移动到该目录下,分别用 chown -R ,chage -R 命令改变该目录下的所有人和所有组。
chown可以同时递归改变所有人,所有组
1.对权限的理解
r | 对文件来说:指是否可以查看文件的内容 —>cat file 对目录来说:指是否可以查看目录中有什么子目录或者子文件 ---->ls dir |
w | 对文件来说:指是否可以对文件内容进行编辑 对目录来说:指是否可以对目录中的子目录或子文件的元数据进行更改 |
x | 对文件来说:指是否可以通过文件名称调用文件内记录的程序 对目录来说:指是否可以进入目录 |
2.更改权限的方式
监控权限的改变
watch " ls -l file|dir"
第一种:
chmod <+|-|=> file|dir
例如
chmod u+x /mnt/file1
chmod g-r /mnt/file2
chmod ug-r /mnt/file3
chmod u-r,g+x /mnt/file4
chmod o=r-x /mnt/file5
chmod -r /mntt/file6 ##给该文件所有位都减 r 权限,等价于 chmod a-r /mnt/file6
第二种:
r=4 w=2 x=1 -=0
r-x | r-- | --x
5 4 1
chmod 541 /mnt/file1
未改变权限前的文件
按照上述命令更改文件权限,chmod 777 1/file 改变目录1中的file1文件权限为公共
chmod 333 1/file1等价于file1中所有人权限-r
chmod u-w,u+r 1/file1给文件file1所有人增加读权限,去掉写权限。
系统建立文件或目录会默认设定该文件或目录的权限,权限的预留保证了系统的安全与开放,不同的系统默认的权限不同,系统建立的目录的权限应该为777-umask的权限值,文件的权限值为777-umask-111,这并不是数字的加减(umask数值越大系统的安全性越高)
如下图所示:系统默认umask值为022,所以新建的目录权限为755(rwxr-xr-x)新建文件权限为644(r-wr–r--).
umask 077 ##临时设定系统的umask值为077,在临时设定系统的umask为077后700,新建立的文件权限为600(不是数字的加减)。
注意:umask只能对当时打开的进程进行设定,属于临时设定,打开其他的shell则设定失效
1.更改系统的环境配置文件 /etc/profile
59 if [ $UID -gt 199 ] && [ “id -gn
” = “id -u n
” ]; then ##如果uid大于(-gt)199,并且(&&)gid=uid
60 umask 002 ##umask为022,普通用户的umask
61 else
62 umask 022 ##否则umask为022.root用户的umask
更改shell的配置文件 /etc/bashrc
2 . 让更改立即生效
source /etc/profile
source /etc/bashrc
注意:当建立一个文件或目录后,在永久更改umask,则之前和之后建立的文件或目录的权限仍为之前系统默认权限,因为在打开这个shell时已经读取过修改之前的文件。在使用source命令之后,之前和之后建立的文件和目录权限都更改为配置文件所设定的。
如图所示:更改配置文件使root用户系统umask数值为012
3.特殊权限
sticky ##粘制位
作用:只对目录生效,当一个目录上有sticky权限时,在这个目录下的文件只能被文件的所有者删除,其他的用户不能删除。
设定方式:chmod o+t dir
chmod 1xxx dir
如下图:建立公共目录(所有用户可以对该目录进行读写删除操作),用不同的身份在/1目录下建立文件,并在su用户身份下删除在root 用户身份下建立的/1/1(观察到可以删除)。
如下图所示:当给公共目录加上sticky权限后,可以发现只有文件的所有者才可以删除自己建立的文件,su用户不能删除root用户在/1下建立的文件。
注意:给公共目录加上sticky位后,其他用户无法在该目录下对别人所建立的文件进行删除操作(但可以进行读写操作),这并不是权限不允许,而是这个请求被拒绝。
sgid ##强制位
作用
对文件:只针对二进制可执行文件,当文件上有sgid权限时,任何人执行此文件生成的进程都属于文件的组
对目录:当目录上有sgid权限时,任何人在该目录下建立的文件都属于目录的所有组
设定方式:chmod g+s file|dir
chmod 2xxx file|dir
如图所示:监控执行cat命令的所有人,所有组,在没有给文件添加sgid权限之前,su用户执行此文件时生成的进程归属于su用户的所有组。
watch ' ps ax -o user,group,comm | grep cat
如图所示 :在给文件添加sgid之后,su用户执行该文件时生成的进程归属于root用户的所有组。
suid ##冒险位
作用 :只针对二进程可执行文件,当文件上有suid权限时,任何人执行该文件所产生的进程都属于文件的所有人
设定方式:chmod u+s file
chmod 4xxx file
注解:chmod 6xxx file 同时具有suid和sgid功能
s[g]s[u]t[o] 241
如图所示:在上述操作执行后,给该文件加上suid功能,可以观察到su用户在执行该文件时,其所有人为root
facl 权限列表
1.作用 让特定的用户对特定的文件拥有特定的文件拥有特定的权力
2.facl列表内容
- rw - rwxr - - + 1 root root 0 Jul 21 15:12 file
^
当查看文件权限时,若+存在表示某用户对该文件拥有特殊权限
getfcal filename 查看facl开启的文件权限显示
file : file | 文件的名称 |
owner : root | 文件的所有者 |
group :root | 文件的所有组 |
user::rw- | 文件所有人的权限 |
user:su:rwx | 指定用户对该文件的权限 |
mask::rwx | mask能赋予用户的最大权限 |
group::rw- | 文件所有组的权限 |
other::r– | 其他人的权限 |
3.对facl列表的管理(上述)
getfacl filename 查看facl开启的文件权限
setfacl -m u:username:rwx filename ##指定用户对该文件拥有rwx权限
setfacl -m g:group:rw filename ##设定group组成员对该文件具有rw权限
setfacl -x u:username filename ##从facl列表中删除用户setfacl -x g:group filename ##从facl列表中删除用户组
setfacl -b filename ##关闭该文件的facl列表
如图所示:在上述图片的基础上,指定用户su对该文件拥有rwx权限,设定su的组成员具有rw权限
如图所示:从该文件的facl列表中删除用户su,删除用户组su
4.mask值设定
在权限列表中,mask表示能生效的最大权利值
chmod g-w filename
当用chmod减小文件权限时,mask的值会发生改变
如果要恢复mask值
setfacl -m m:rwx:filename
5.facl默认权限的设定
facl权限只针对设定完成之后建立的目录生效,已经存在的是不会继承默认设定
setfacl -m d:u:username:rw /1 ##设定该用户时,目录/1下建立的所有文件权限都为rw,已经存在的文件不会默认设定
如下图所示:设定在su用户下,目录/1下建立文件,文件的权限都为rw(可以观察到之前建立的文件file1的权限没有发生改变)
stefacl -k /1 ##取消默认设定
如图:取消默认设定