Linux文件系统权限
权限对象
文件拥有者
群组:用户组,把属性相同的用户放到一个组中
其他人
权限类型
d rwxr-xr-x. 2 root root 4096 Jul 24 19:25 an
r:4 w:2 x:1
r- -r- -r- - 444
rw - rwx -r 674
rwx权限说明
1、对于文件而言
r:可以获取文件的数据
w:可以修改文件数据
x:可以将此文件运行为进程(为二进制可执行文件)
2、对于目录而言
r:可以使用ls命令获取文件列表
w:可以修改文件列表,即创建和删除
x:表示我们可以cd到此目录并且可以使用ls -l获取文件的详细属性
权限判断逻辑:
文件:前提条件,用户能够进入到文件所在目录
删除文件:看用户是否具备对文件所在目录的w权限
1、判断用户身份,owner(属主) - group(属组) - other:左三位 - 中三位 -右三位
创建文件:和删除文件逻辑相同
目录:前提条件,当前用户能否进入到目录所在的目录,x
删除目录:用户对目录所在目录是否具有w权限
1、判断用户身份,owner(属主) - group(属组) - other:左三位 - 中三位 -右三位
创建目录:和删除目录逻辑相同
权限管理命令
chmod
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… --reference=RFILE FILE…
三类用户:u(属主)g(属组)o(其他)a(所有)
MODE表示法:
赋权表示法,rwx(覆盖)
u= u=r
g=
o=
a=
chomd u=,g=,o=
chomd a=
授权表示法
u+,u-
g+,g-
o+,o-
a+,a-
注意:只有用户自己修改自己的文件
chomd 777 filename
从属关系
chown(既可以修改属主又可以修改属组)
chgrp(直接修改属组)
-R:递归修改
chown username:groupname(必须事先存在) name
chown username:(必须事先存在) name
chown :groupname(必须事先存在) name
chgrp groupname name
注意:只有管理员可以修改
chown,chgrp
-R:递归修改
注意:只有管理员可以修改
进程安全上下文:
进程对文件访问权限模型:
进程的属主与文件的属主是否相同,如果相同,则应用的是属主权限
否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组的权限
否则,使用other权限
基本权限ACL:
1、可针对单个用户设置
2、针对用户组设置
3、子文件/子目录继承父目录的权限(只能编辑,不能创建)
继承
[root@localhost tmp]# setfacl -m d:u:nebula:rwx mydir/
[root@localhost tmp]# getfacl mydir/
#file: mydir/
#owner: root
#group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:nebula:rwx
default:group::r-x
default: mask ::rwx
default:other::r-x
[root@localhost tmp]# cd mydir/
[root@localhost mydir]# touch testfile
[root@localhost mydir]# getfacl testfile
#file: testfile
#owner: root
#group: root
user::rw-
user:nebula:rwx #effective:rw-
group::r-x #effective:r–
mask::rw-
other::r–
查看系统是否支持ACL
[root@localhost ~]# tune2fs -l /dev/sda2 | grep “Default mount options:”
设置ACL
setfacl [-bkndRLPvh] [{-m|-x} acl_spec][{-M|-X} acl_file] file …
-m:配置ACL权限,不能和-x同时使用
针对用户:[root@localhost tmp]# setfacl -m u:nebula:rw aclfile
针对用户组:[root@localhost tmp]# setfacl -m g:tech:rw aclfile
查看:[root@localhost tmp]# getfacl aclfile
-x:删除ACL配置
-b:移除所有的ACL配置
- R:递归配置acl
-d:配置默认的acl参数,只对目录有效
权限掩码
umask
文件权限:666-022
644
目录: 777-022
755
特殊权限:
SUID:当在文件所有者的x权限上出现s时,表示当前这个文件具有SUID权限(不能放在脚本和目录上,一般放在系统可执行的二进制程序上) s
1、SUID权限仅仅对二进制程序有效
2、执行者对于该程序有x权限
3、本权限仅仅在执行程序的过程中有效
4、程序的执行者拥有该程序的拥有者的权限
如果当前这个文件属主位没有x权限,显示大写S
[root@localhost mydir]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
SGID: s(用来继承父目录的属组)
1、SGID也是对二进制文件有效
2、执行者对该程序具有可执行权限 x权限
3、主要用于目录之上
SBIT: t
1、主要针对other位
2、作用于目录
3、在该目录下创建新的文件或目录,只有自己和root可以删除
4、对文件无效
[root@localhost mydir]# ll -ld /tmp/
drwxrwxrwt. 4 root root 4096 Jul 28 21:37 /tmp/
SUID,SGID,SBIT
字符表示法
s s t u+s
数字表示法
4 2 1
chmod 0755:消除s
1755:添加s
[root@localhost tmp]# cp /usr/bin/passwd .
[root@localhost tmp]# chmod u+s passwd
[root@localhost tmp]# ll
total 52
-rw-rw-r–+ 1 root root 6 Jul 28 20:25 aclfile
drwxrwxr-x+ 2 root root 4096 Jul 28 22:14 mydir
-rwsr-xr-x. 1 root root 30768 Jul 28 22:54 passwd
drwxr-xr-x. 2 root root 4096 Jul 28 22:54 testdir
-rw-------. 1 root root 0 Jul 24 17:07 yum.log
[root@localhost tmp]# chmod 0755 passwd
[root@localhost tmp]# ll
total 52
-rw-rw-r–+ 1 root root 6 Jul 28 20:25 aclfile
drwxrwxr-x+ 2 root root 4096 Jul 28 22:14 mydir
-rwxr-xr-x. 1 root root 30768 Jul 28 22:54 passwd
drwxr-xr-x. 2 root root 4096 Jul 28 22:54 testdir
-rw-------. 1 root root 0 Jul 24 17:07 yum.log
[root@localhost tmp]# chmod 4755 passwd
[root@localhost tmp]# ll
total 52
-rw-rw-r–+ 1 root root 6 Jul 28 20:25 aclfile
drwxrwxr-x+ 2 root root 4096 Jul 28 22:14 mydir
-rwsr-xr-x. 1 root root 30768 Jul 28 22:54 passwd
drwxr-xr-x. 2 root root 4096 Jul 28 22:54 testdir
-rw-------. 1 root root 0 Jul 24 17:07 yum.log
[root@localhost tmp]# chmod 757 passwd
[root@localhost tmp]# ll
total 52
-rw-rw-r–+ 1 root root 6 Jul 28 20:25 aclfile
drwxrwxr-x+ 2 root root 4096 Jul 28 22:14 mydir
-rwxr-xrwx. 1 root root 30768 Jul 28 22:54 passwd
drwxr-xr-x. 2 root root 4096 Jul 28 22:54 testdir
-rw-------. 1 root root 0 Jul 24 17:07 yum.log
[root@localhost tmp]# chmod 2755 passwd
[root@localhost tmp]# ll
total 52
-rw-rw-r–+ 1 root root 6 Jul 28 20:25 aclfile
drwxrwxr-x+ 2 root root 4096 Jul 28 22:14 mydir
-rwxr-sr-x. 1 root root 30768 Jul 28 22:54 passwd
drwxr-xr-x. 2 root root 4096 Jul 28 22:54 testdir
-rw-------. 1 root root 0 Jul 24 17:07 yum.log
chattr:显示隐藏属性
a:append 只能够向文件添加数据,不能删除数据(只能追加)
[root@localhost tmp]# chattr +a file1
[root@localhost tmp]# lsattr file1
-----a-------e- file1
[root@localhost tmp]# echo 111 >> file1
i :文件不能被删除,改名,链接同时不能够写入内容
A:atime 访问时间不可修改
lsattr:列出文件的隐藏属性
stat:查看文件的详细信息
练习:
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
[root@localhost ~]# groupadd mariadb
[root@localhost ~]# useradd -M -g mariadb -s /sbin/nologin mariadb
[root@localhost ~]# su - mariadb
su: warning: cannot change directory to /home/mariadb: No such file or directory
This account is currently not available.
2、新建GID为5000的组nebulaedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
[root@localhost ~]# groupadd -g 5000 nebulaedu
[root@localhost ~]# useradd -d /users/gentoo gentoo
[root@localhost ~]# passwd gentoo
gentoo:x:1003:1003::/users/gentoo:/bin/bash
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
[root@localhost ~]# useradd fedora
[root@localhost ~]# usermod -d /users/fedora fedora
[root@localhost ~]# passwd fedora
fedora:x:1004:1004::/users/fedora:/bin/bash
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
[root@localhost ~]# useradd www
[root@localhost ~]# usermod -d /users/www www
[root@localhost ~]# userdel www
5、为用户gentoo和fedora新增附加组nebulaedu;
[root@localhost ~]# usermod gentoo -aG nebulaedu
[root@localhost ~]# id gentoo
uid=1003(gentoo) gid=1003(gentoo) groups=1003(gentoo),5000(nebulaedu)
[root@localhost ~]# usermod fedora -aG nebulaedu
[root@localhost ~]# id fedora
uid=1004(fedora) gid=1004(fedora) groups=1004(fedora),5000(nebulaedu)
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为nebulaedu,并让属组对目录本身拥有写权限
[root@localhost var]# cp -a /var/log /tmp/
[root@localhost tmp]# chown :nebulaedu /tmp/log
[root@localhost tmp]# ls -l
total 8
drwxr-xr-x. 6 root nebulaedu 4096 Jul 31 09:41 log
[root@localhost tmp]# chmod g+w log
[root@localhost tmp]# ls -l
total 8
drwxrwxr-x. 6 root nebulaedu 4096 Jul 31 09:41 log
研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B;
[root@localhost tmp]# useradd David
[root@localhost tmp]# useradd Peter
[root@localhost tmp]# useradd Jack
[root@localhost tmp]# useradd Mike
[root@localhost tmp]# groupadd A
[root@localhost tmp]# groupadd B
[root@localhost tmp]# usermod -aG A David
[root@localhost tmp]# usermod -aG A Peter
[root@localhost tmp]# usermod -aG B Jack
[root@localhost tmp]# usermod -aG B Mike
[root@localhost tmp]# cat /etc/group
A:x:5001:David,Peter
B:x:5002:Jack,Mike
1.建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;并要求在此目录下创建的文件研发组内成员可以互相访问
[root@localhost tmp]# mkdir project_a
[root@localhost tmp]# chown :A project_a
[root@localhost tmp]# ll
drwxr-xr-x. 2 root A 6 Jul 31 11:08 project_a
[root@localhost tmp]# chmod 770 project_a
drwxrwx---. 2 root A 6 Jul 31 11:08 project_a
[root@localhost ~]# chmod 2770 /tmp/project_a
[root@localhost tmp]# ll
drwxrws---. 2 root A 49 Jul 31 15:32 project_a
2.建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;要求在此目录下创建的文件行政部人员只能删除自己的文件,不得删除其他人员文件
[root@localhost tmp]# mkdir project_b
[root@localhost tmp]# chown :B project_b
[root@localhost tmp]# ll
drwxr-xr-x. 2 root B 6 Jul 31 11:59 project_b
[root@localhost tmp]# chmod 770 project_b
[root@localhost tmp]# ll
drwxrwx---. 2 root B 6 Jul 31 11:59 project_b
[root@localhost tmp]# chmod 2770 project_b
[root@localhost tmp]# chmod 1770 project_b
[root@localhost tmp]# ll
drwxrws--T. 2 root B 17 Jul 31 16:21 project_b