Linux文件系统权限:
权限对象:
文件拥有者(属主)
群组(属组):属性相同的用户放在同一组中
其他人
权限类型:
[root@localhost b]# ls -l
total 0
d rwxr-xr-x. 2 root root 6 Jul 29 09:20 c
r:4
w:2
x:1
练习:r--r--r--:444
rw-rwx-r;674(以加法进行计算)
1、rwx权限说明:
1、对于文件而言:
r:可以获取文件的数据
w:可以修改文件的数据
x:可以将此文件运行为进程
2、对于目录而言:
r:可以使用 ls 命令获取文件列表
w:可以修改文件列表,即创建和删除
x:表示我们可以 cd 到此目录,并且可以使用 ls -l 获取文件的详细属性
2、权限判断逻辑:
文件:前提条件,用户能够进入文件所在目录
删除文件:看用户是否具备对目录的 w 权限
1、判断用户身份,顺序依次为:owner - group - other
创建文件:和删除文件逻辑相同
目录:前提条件:判断用户是否能够成功进入目录所在目录,也就是说要有 x 权限
删除目录:对上级目录有w权限,在以此依次判断是不是上级目录的属主(左三位),属组(中三位),其他(右三位)
3、权限管理命令:
chmod
chmod [OPTION]... MODE[,MODE]... FILE...
or: chmod [OPTION]... OCTAL-MODE FILE...
or: chmod [OPTION]... --reference=RFILE FILE...
三类用户(UGO模型):
u:属主
g:属组
o:其他
a:所有
chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
1. 赋权表示法,rwx
u= u=r(=表示覆盖)
g=
o=
a=
chmod u= ,g= , o=
或者
chmod a=
2. 授权表示法:
u+ , u-
g+ , g-
o+ , o-
a+ , a-
注意:只有用户自己修改自己的文件
chmod 777 filename
从属关系:
chown(既可以修改属主,也可修改属组) ,
chgrp(直接修改属组)
-R:递归修改
注意:只有管理员可以修改
chown username:groupname dirname
chown username: name
chown :groupname name
chgrp groupname name
小练习:
1、新建用户组:hr,tech,edu
[root@localhost /]# groupadd hr
[root@localhost /]# groupadd tech
[root@localhost /]# groupadd edu
2、新建用户要求:
tom是hr组成员,
jerry是tech组成员
natasha是tech组成员
gentoo是edu组成员
admin不属上面三组
[root@localhost /]# useradd -G hr tom
[root@localhost /]# useradd -G tech jerry
[root@localhost /]# useradd -G tech natasha
[root@localhost /]# useradd -G edu gentoo
[root@localhost /]# useradd admin
或者:
[root@localhost /]# gpasswd -a natasha tech
Adding user natasha to group tech
[root@localhost /]# gpasswd -a gentoo edu
Adding user gentoo to group edu
3、新建目录要求:
/pub目录为公共资源,所有用户均可以读写执行。
/HR目录只有hr用户可以写入,其他用户只有只读权限
/TECH目录只有tech组成员可以写入,其他用户没有任何权限
/EDU目录只有edu组成员可以访问写入
/ADM目录只有admin用户可以访问,只有读写执行权限,其他用户没有任何权限
[root@localhost /]# mkdir /pub
[root@localhost /]# ll -d /pub
drwxr-xr-x. 2 root root 6 Jul 29 11:49 /pub
[root@localhost /]# chmod 777 /pub
[root@localhost /]# chmod a=rwx /pub
[root@localhost /]# chmod u=rwx,g=rwx,o=rwx /pub
[root@localhost /]# chmod g+w,o+w /pub
[root@localhost /]# mkdir /HR1
[root@localhost /]# chmod o-x /HR
[root@localhost /]# ll -d /HR
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR
[root@localhost /]# chmod o-x /HR/
[root@localhost /]# ll -d /HR
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR/
[root@localhost /]# chown :hr /HR/
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root hr 6 Jul 29 11:28 /HR/
[root@localhost /]# chmod g+w /HR/
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root hr 6 Jul 29 11:28 /HR/
[root@localhost /]# mkdir /TECH-1
[root@localhost /]# ll -d /TECH-1/
drwxr-xr-x. 2 root root 6 Jul 29 11:54 /TECH-1/
[root@localhost /]# chown jerry /TECH-1/
[root@localhost /]# ll -d /TECH-1/
drwxr-xr-x. 2 jerry root 6 Jul 29 11:54 /TECH-1/
[root@localhost /]# chmod 700 /TECH-1/
[root@localhost /]# ll -d /TECH-1/
drwx------. 2 jerry root 6 Jul 29 11:54 /TECH-1/
[root@localhost /]# mkdir test
[root@localhost /]# chown admin:admin /test
[root@localhost /]# ll -ld /test
drwxr-xr-x. 2 admin admin 6 Jul 29 11:57 /test
进程安全上下文:
指进程对文件的访问权限模型:
进程的属主与文件的属主是否相同,如果相同,则应用的是属主权限。
否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组的权限。
否则,使用other权限。
基本权限 ACL:
(访问控制列表)
1、针对单个用户设置
2、针对用户组设置
3、让子文件或者子目录继承父目录的权限
查看系统是否支持ACL:
[root@localhost ~]# tune2fs -l /dev/sda2 |grep "Defaul mount options:"
设置ACL:
setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m:配置 ACL 权限,不能与-x一同使用
-x:删除 ACL 配置
-b:移除所有的 ACL 配置
-R:递归配置
-d:配置默认的 ACL 参数,只对目录生效 (只能编辑,不能创建和新增)
1、对单个用户设置ACL
[root@localhost tmp]# setfacl -m u:nebula:rw /tmp/aclfile
//setfacl -m 用户:用户名:权限 /路径 (-u表示对单个用户设置权限,-g表示对用户组,没有o,用户名必须事先存在)
[root@localhost tmp]# getfacl /tmp/aclfile
user:nubula:rw-
//getfacl /路径
2、对用户组进行设置ACL
[root@localhost tmp]# setfacl -m g:hr:rw aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
group:hr:rw-
mask::rw-
other::r--
3、对目录设置ACL
[root@localhost tmp]# mkdir mydir
[root@localhost tmp]# setfacl -m d:u:jerry: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:jerry:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@localhost tmp]# cd mydir
[root@localhost mydir]# ls
[root@localhost mydir]# touch testfile
[root@localhost mydir]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:jerry:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-(mask同真为真)
other::r--
[root@localhost tmp]# mkdir testdir
[root@localhost tmp]# getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
权限掩码:
umask
[root@localhost tmp]# umask
0022 //每一组的权限位有四位
文件权限:666 - 022 = 644
目录:777-022 = 755
特殊权限:
SUID: s
当在文件所有者的 x 权限上出现s时,表示当前这个文件具有 SUID 权限。
SUID的权限:
1、SUID权限仅仅对二进制程序才有效,(不能用于脚本、目录上,一般放在系统的命令上)
2、执行者对于该程序有 x 权限
3、本权限仅仅在执行程序的过程中才有效(即变成进程才有效)
4、程序的执行者拥有该程序的拥有者的权限
如果当前这个文件属主位没有 x 权限,显示大写 S
[root@localhost mydir]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
SGID: s(继承组)
SGID的权限:
1、SGID对二进制有效
2、执行者对该程序具有可执行权限 即 x 权限
3、主要用于目录之上:
SBIT: t
SBIT的权限:
1、主要针对于other位
2、作用于目录
3、在该目录下创建的文件或目录,(不论你具有什么权限,)只有自己和root可以删除
4、对文件无效
[root@localhost mydir]# ll -ld /tmp
drwxrwxrwt. 36 root root 4096 Jul 29 16:01 /tmp
SUID , SGID , SBIT
字符表示法 :s s t u+s
数字表示法 :4 2 1
chmod 0755 文件 :删除 s 权限(如果失败则输入u-s , g-s:表示属主和 属组分别减s)
1755 :1表示当前目录具有SBIT权限
[root@localhost tmp]# chmod 4755 testdir1
[root@localhost tmp]# ll
drwsr-xr-x. 2 root root 6 Jul 29 16:59 testdir1
[root@localhost tmp]# chmod 2755 testdir
[root@localhost tmp]# ll
drwsr-sr-x. 2 root root 6 Jul 29 16:59 testdir1
[root@localhost tmp]# chmod 1755 testdir
[root@localhost tmp]# ll
drwsr-sr-t. 2 root root 6 Jul 29 16:59 testdir1
[root@localhost tmp]# chmod u-s,g-s testdir1
[root@localhost tmp]# ll
drwxr-xr-x. 2 root root 6 Jul 29 16:59 testdir1
chattr:显示文件的隐藏属性
a:append 只能够向文件中添加数据,不能够删除数据(只能追加,不能覆盖)
i:当前文件不能被删除,改名 和 链接,同时不能写入内容
A:atime 访问时间不能修改
lsattr:列出文件的一些隐藏属性
[root@localhost tmp]# chattr +a file{2
[root@localhost tmp]# lsattr file2
-----a--------- file2
[root@localhost tmp]# echo asd > file2
-bash: file2: Operation not permitted
【扩展:】
stat:查看系统存储的详细信息
练习:
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
[root@localhost tmp]# groupadd mariadb
[root@localhost tmp]# useradd -M -g mariadb -s /sbin/nologin mariadb
[root@localhost tmp]# cat /etc/passwd
mariadb:x:40009:50004::/home/mariadb:/sbin/nologin
[root@localhost tmp]# 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 tmp]# groupadd -g 5000 nebulaedu
[root@localhost tmp]# useradd -d /users/gentoo gentoo
[root@localhost tmp]# passwd gentoo
[root@localhost tmp]# tail /etc/passwd
gentoo:x:40013:40013::/users/gentoo:/bin/bash
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
[root@localhost tmp]# useradd fedora
[root@localhost tmp]# usermod -d /users/fedora fedora
[root@localhost tmp]# passwd fedora
[root@localhost tmp]# tail /etc/passwd
fedora:x:40012:40012::/users/fedora:/bin/bash
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
[root@localhost tmp]# useradd -d /users/www www
useradd: cannot create directory /users/www
[root@localhost tmp]# tail /etc/passwd
www:x:40014:40014::/users/www:/bin/bash
[root@localhost tmp]# userdel www
5、为用户gentoo和fedora新增附加组nebulaedu;
[root@localhost tmp]# usermod -aG nebulaedu gentoo
[root@localhost tmp]# usermod -aG nebulaedu fedora
[root@localhost tmp]# id fedora
uid=40012(fedora) gid=40012(fedora) groups=40012(fedora),5000(nebulaedu)
[root@localhost tmp]# id gentoo
uid=40013(gentoo) gid=5000(gentoo)
groups=40013(gentoo),5000(nebulaedu)
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为nebulaedu,并让属组对目录本身拥有写权限
[root@localhost ~]# cp -a /var/log /tmp
[root@localhost tmp]# chgrp nebulaedu /tmp/log
[root@localhost tmp]# ll -d /tmp/log
drwxr-xr-x. 6 root nebulaedu 4096 Aug 1 09:50 /tmp/log
[root@localhost tmp]# chmod 731 log
[root@localhost tmp]# ll -d /tmp/log
drwx-wx--x. 6 751 nebulaedu 4096 Aug 1 09:50 /tmp/log
7、研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B
[root@localhost ~]# groupadd A
[root@localhost ~]# groupadd B
[root@localhost ~]# useradd -G A Peter
[root@localhost ~]# useradd -G B Mike
[root@localhost /]# usermod -aG A David
[root@localhost /]# usermod -aG B Jack
[root@localhost /]# tail /etc/group
A:x:50005:David,Peter
B:x:50006:Jack,Mike
(1.)建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;并要求在此目录下创建的文件研发组内成员可以互相访问
[root@localhost ~]# mkdir /project_a
[root@localhost /]# chown :A /project_a/
[root@localhost /]# chmod 770 /project_a/
[root@localhost /]# ll -d /project_a/
drwxrwx---. 2 root A 6 Aug 1 11:04 /project_a/
[root@localhost project_a]# chmod 2770 /project_a/
(2.)建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;要求在此目录下创建的文件行政部人员只能删除自己的文件,不得删除其他人员文件
[root@localhost /]# mkdir /project_b
[root@localhost /]# chown :B /project_b/
[root@localhost /]# chmod 770 /project_b/
[root@localhost /]# ll -d /project_b/
drwxrwx---. 2 root B 6 Aug 1 11:15 /project_b/
[root@localhost project_b]# chmod 1770 /project_b/
[Jack@localhost project_b]$ vi 3
[Mike@localhost project_b]$ cat 3
1234567
[Mike@localhost project_b]$ echo "zx" > 3
[Mike@localhost project_b]$ cat 3
zx
[Mike@localhost project_b]$ rm 3
rm: cannot remove ‘3’: Operation not permitted
//表示在Jack下创建的文件3,切换至Mike下只能对文件3进行增,改,查,而不能对齐进行删除