1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > linux限制组访问权限 linux用户和组管理以及文件权限访问控制ACL策略

linux限制组访问权限 linux用户和组管理以及文件权限访问控制ACL策略

时间:2018-11-25 06:01:47

相关推荐

linux限制组访问权限 linux用户和组管理以及文件权限访问控制ACL策略

01、通配符

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件。

通配符采用特定的符号,表示特定的含义,此符号称为元 meta 字符。

常见的通配符如下:

* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件

? 匹配任何单个字符

~ 当前用户家目录

~mage 用户mage家目录

~+和. 当前工作目录

~- 前一个工作目录

[0-9] 匹配数字范围

[a-z] 字母

[A-Z] 字母

[wang] 匹配列表中的任何的一个字符

[^wang] 匹配列表中的所有字符以外的字符

Linux系统中预定义的字符类:

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母,表示 a-z

[:upper:]: 任意大写字母,表示 A-Z

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:blank:]:水平空白字符

[:space:]:水平或垂直空白字符

[:punct:]:标点符号

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:图形字符

[:xdigit:]:十六进制字符

练习:

1)显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录

[root@centos7 etc]#touch 1 123dir123 1d 33 3SHEll

[root@centos7 etc]#mkdir _dir 123 1dir 2

[root@centos7 etc]#ls -ad /etc/[^[:alpha:]][[:alpha:]]*

/etc/1d /etc/1dir /etc/_dir /etc/3SHEll

##文件1、123dir123、33和目录123、2匹配不上,第二位要跟一个字母。

2)复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

[root@centos7 etc]#touch p123dir01 p123dir_

[root@centos7 etc]#mkdir /tmp/mytest1;cp -ad /etc/p*[^[:digit:]] /tmp/mytest1

[root@centos7 etc]#ls /tmp/mytest1

p123dir_ pam.d passwd- pki pm popt.d ppp printcap profile.d python

passwd pkcs11 plymouth polkit-1 postfix prelink.conf.d profile protocols

3)将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

[root@centos7 etc]#tr 'a-z' 'A-Z' /tmp/issue.out

[root@centos7 etc]#cat /tmp/issue.out

\S

KERNEL \R ON AN \M

[root@centos7 etc]#cat /etc/issue|tr '[:lower:]' '[:upper:]' >/tmp/issue

[root@centos7 etc]#cat /tmp/issue

\S

KERNEL \R ON AN \M

02、Linux用户和组

2.1 用户和组管理命令

用户管理命令

useradd

usermod

userdel

组帐号维护命令

groupadd

groupmod

groupdel

2.1.1 用户创建useradd

useradd 命令可以创建新的Linux用户

格式:

useradd [options] LOGIN

常见选项:

-u UID

-g GID 用户的所属基本组,可为组名,也可为GID

-G GROUP1[,GROUP2,...] 用户的附加组,组需要已存在

-c “COMMENT" 用户的注释信息,passwd中的第5列内容

-d HOME_DIR 以指定的路径(不存在)为家目录

-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中

-N 不创建私用组做主组,使用users组做主组

-r 创建系统用户 Centos6之前:ID<500,Centos7以后:ID<1000

-m 创建家目录,用于系统用户(不加m,系统用户不创建家目录)

-M 不创建家目录,用于非系统用户(不加M,非系统用户创建家目录)

范例:

#新建系统用户apache,uid48,主组apache,家目录/var/www,描述信息为Apache,不登录系统。

useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache

useradd命令默认值设定由/etc/default/useradd定义

[root@centos8 ~]# cat /etc/default/useradd

#useradd default file

GROUP=100

HOME=/home

INACTIVE=-1 ##对应/etc/shadow的第7列,即用户密码过期的宽限期

EXPIRE= ##对应/etc/shadow的第8列,即用户账号的有效期

SHELL=/bin/bash ##shell默认类型

SKEL=/etc/skel ##新建的用户家目录中,从skel目录中复制默认文件到用户家目录

CREATE_MAIL_SPOOL=yes ##默认创建用户的邮箱

新建用户的相关文件

/etc/default/useradd

/etc/skel/*

/etc/login.defs

2.1.2 用户属性修改usermod

usermod命令可以修改用户属性

格式:

usermod [option] login

常见选项:

-u UID: 新UID

-g GID: 新主组

-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使

用-a选项,即-aG

-s SHELL:新的默认SHELL

-c 'COMMENT':新的注释信息

-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项

-l login_name: 新的名字

-L: lock指定用户,在/etc/shadow 密码栏的增加!

-U: unlock指定用户,将/etc/shadow 密码栏的!拿掉

-e YYYY-MM-DD: 指明用户账号过期日期

-f INACTIVE: 设定非活动期限,即宽限期

2.1.3 删除用户userdel

格式:

userdel [OPTION]... Login

常见选项:

-f, --force 强制

-r, --remove 删除用户家目录和邮箱 #家目录和邮箱的数据都会删除,要慎重使用-r选项

2.1.4 切换用户或以其他用户身份执行命令

su: 即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令。

格式:

su [options...] [-] [user [args...]]

常见选项:

-l --login su -l UserName 相当于 su - UserName

-c, --command pass a single command to the shell with -c

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。

[root@centos7 ~]# su wang

[wang@centos7 root]$ pwd

/root

[wang@centos7 root]$ touch wang.txt

touch: cannot touch ‘wang.txt’: Permission denied

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换说明:root su至其他用户无须密码;非root用户切换时需要密码。

[root@centos7 ~]# su - wang 等价于su -l wang

Last login: Sun Dec 13 17:23:00 CST on pts/0

[wang@centos7 ~]$ touch wang.txt

[wang@centos7 ~]$ pwd

/home/wang

[wang@centos7 ~]$ ll

total 0

-rw-rw-r-- 1 wang wang 0 Dec 13 17:23 wang.txt

注意:su 切换新用户后,使用 exit 退回至旧的用户,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

su和su -的区别测试:

如果用户名前面没有-,那么创建wang.txt时,会提示没有权限,因为不完全切换到wang后,还在root的家目录中,但wang没有权限在root目录下创建文件。如果从tmp目录下切换wang用户,就可以创建。

[root@vickie ~]# su wang -c "touch wang1.txt"

touch: cannot touch 'wang1.txt': Permission denied

[root@vickie ~]# su - wang -c "touch wang2.txt"

[root@vickie ~]# ll /home/wang

-rw-rw-r--. 1 wang wang 0 Nov 15 22:07 wang2.txt

[root@vickie ~]# cd /tmp

[root@vickie tmp]# su wang -c "touch wang3.txt"

[root@vickie tmp]# ll /tmp

-rw-------. 1 wang wang 0 Nov 15 22:07 wang3.txt

换个身份执行命令:

su [-] UserName -c 'COMMAND'

范例:

普通用户下查看/etc/shadow密码文件,只有root才有这个查看权限;所以需要

1)先切换到su - root用户;

2)getent shadow;

3)退出root用户:exit;

需要这3步才能完成。

下面就用一条命令来实现,这就是-c选项。

[wang@centos7 ~]$ su -c "cat /etc/shadow" ##切换到root(可以省略)下,查看shadow文件

password: ##输入的是root的密码

root:$6$/3wDwp9YS75XfiMV$sSLgRo7AdjuGLPXI/jXXL4NcM84ztA8v8QMsbKjleANju2iYNCYO2zfgblo8kNNWNOVRz5vLavJfO4gILmqoc1::0:99999:7:::

bin:*:17834:0:99999:7:::

...省略...

[root@centos7 ~]# su - wang -c "touch wang1" ##用wang的账户创建wang1文件,所有者和所属组都是wang

[root@centos7 ~]# ll ~wang/

-rw-rw-r-- 1 wang wang 0 Dec 9 20:16 wang1

2.1.5 设置密码

1)passwd:修改用户密码

格式:

passwd [OPTIONS] UserName

常用选项:

-d:删除指定用户密码

-l:锁定指定用户

-u:解锁指定用户

-e:强制用户下次登录修改密码

-f:强制操作

-n mindays:指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-i inactivedays:非活动期限

--stdin:从标准输入接收用户密码,Ubuntu无此选项

范例:设置用户下次必须更改密码

[root@centos7 ~]# useradd mage

[root@centos7 ~]# echo magedu|passwd --stdin mage

Changing password for user mage.

passwd: all authentication tokens updated successfully.

[root@centos7 ~]# getent passwd mage

mage:x:1014:1014::/home/mage:/bin/bash

[root@centos7 ~]# getent shadow mage

mage:$6$KflBA0mF$ziCWoXsmwRHJOxD5sx2cmFtHSJwnWO5qUPw/2IkLsN9metoeGmWKylc2.TjfGGDcSUp0eWOykhLXYWiJY3N.Z0:18609:0:99999:7::: ##设置密码时的日期是1970年1月1日后的第18609天

[root@centos7 ~]# passwd -e mage ##设置用户密码到期,下次登录修改密码

Expiring password for user mage.

passwd: Success

[root@centos7 ~]# getent shadow mage

mage:$6$KflBA0mF$ziCWoXsmwRHJOxD5sx2cmFtHSJwnWO5qUPw/2IkLsN9metoeGmWKylc2.TjfGGDcSUp0eWOykhLXYWiJY3N.Z0:0:0:99999:7::: ##密码的日期为0,下次登录必须修改密码

[root@centos7 ~]# su - mage

[mage@centos7 ~]$ exit

logout

[root@centos7 ~]# su - wang

Last login: Sun Dec 13 17:20:14 CST on pts/0

[wang@centos7 ~]$ su - mage

Password:

You are required to change your password immediately (root enforced)

Changing password for mage.

(current) UNIX password:

New password: ##密码需满足安全性要求,否则会提示BAD PASSWORD

Retype new password:

Last login: Sun Dec 13 17:29:40 CST on pts/0

2)chage:修改用户密码策略

格式:

chage [OPTION]... LOGIN

常见选项:

-d LAST_DAY #更改密码的时间 -d 0 username ##登录时修改密码(shadow的第3列为0)

-m --mindays MIN_DAYS

-M --maxdays MAX_DAYS

-W --warndays WARN_DAYS

-I --inactive INACTIVE #密码过期后的宽限期

-E --expiredate EXPIRE_DATE #用户的有效期

-l 显示密码策略

范例:

[root@centos7 ~]# chage -m 3 -M 42 -W 14 -I 7 -E -05-31 wang

[root@centos7 ~]# chage -l wang

Last password change : Dec 13,

Password expires : Jan 24,

Password inactive : Jan 31,

Account expires : May 31,

Minimum number of days between password change : 3

Maximum number of days between password change : 42

Number of days of warning before password expires : 14

[root@centos7 ~]# getent shadow wang

wang:$6$kBfAjQG6$0MMX.ASO/Qnbj.FpWap.G8M8KiVU8VqCnXAeWyVRtZfC7awHtVDtw37AAO9b84FzjcFiHZqSxy0eafy.ygP47.:18609:3:42:14:7:18778:

##设置wang用户下次登录时修改密码

[root@centos7 ~]# chage -d 0 wang

[root@centos7 ~]# getent shadow wang

wang:$6$kBfAjQG6$0MMX.ASO/Qnbj.FpWap.G8M8KiVU8VqCnXAeWyVRtZfC7awHtVDtw37AAO9b84FzjcFiHZqSxy0eafy.ygP47.:0:3:42:14:7:18778:

[root@centos7 ~]# chage -l wang

Last password change : password must be changed

Password expires : password must be changed

Password inactive : password must be changed

Account expires : May 31,

Minimum number of days between password change : 3

Maximum number of days between password change : 42

Number of days of warning before password expires : 14

2.2 组管理

2.2.1 创建组

groupadd:创建组

格式:

groupadd [options] group_name

常见选项:

-g GID 指明GID号;[GID_MIN, GID_MAX] # groupadd -g 80 tomcat

-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

范例:

[root@centos7 ~]# groupadd -g 48 -r apache

[root@centos7 ~]# getent group apache

apache:x:48:

[root@centos7 ~]# getent gshadow apache

apache:!::

2.2.2 组属性修改

groupmod:组属性修改

格式:

groupmod [options] group_name

常见选项:

-n group_name: 新名字

-g GID: 新的GID

范例:

[root@centos7 ~]# groupmod -n www tomcat

[root@centos7 ~]# getent group www

www:x:48:

[root@centos7 ~]# groupmod -g 49 www

[root@centos7 ~]# getent group www

www:x:49:

2.2.3 删除组

groupdel:删除组

格式:

groupdel [options] group_name

常见选项:

-f, --force 强制删除,即使是用户的主组也强制删除组

2.2.4 更改组密码

gpasswd:可以更改组密码,也可以修改附加组的成员关系

格式:

gpasswd [option] GROUP

常见选项:

-a user group #将user添加至指定组中

-d user group #从指定附加组中移除用户user

-A user1,user2,... #设置有管理权限的用户列表

范例:

#增加用户wang到g1组

[root@centos7 ~]# groupadd g1

[root@centos7 ~]# id wang

uid=1013(wang) gid=1013(wang) groups=1013(wang)

[root@centos7 ~]# gpasswd -a wang g1

Adding user wang to group g1

[root@centos7 ~]# id wang

uid=1013(wang) gid=1013(wang) groups=1013(wang),1015(g1)

[root@centos7 ~]# groups wang ##查看wang用户属于什么组

wang : wang g1

[root@centos7 ~]# getent group g1

g1:x:1015:wang

[root@centos7 ~]# groupadd g2

[root@centos7 ~]# gpasswd -a wang g2 ##再增加wang到g2组

Adding user wang to group g2

[root@centos7 ~]# groups wang

wang : wang g1 g2

#而使用usermod增加组用户时

[root@centos7 ~]# usermod -G g1 wang #把wang用户添加到g1组

[root@centos7 ~]# groups wang

wang : wang g1

[root@centos7 ~]# usermod -G g2 wang #把wang用户添加到g2组,替换了g1组

[root@centos7 ~]# groups wang

wang : wang g2

[root@centos7 ~]# usermod -aG g1 wang #把wang用户增加到g1组,同时在两个组

[root@centos7 ~]# groups wang

wang : wang g1 g2

##删除组成员 -d只能删除附加组,不能删除主组

[root@centos7 ~]# gpasswd -d wang g1

Removing user wang from group g1

[root@centos7 ~]# groups wang

wang : wang g2

[root@centos7 ~]# gpasswd -d wang wang

Removing user wang from group wang

gpasswd: user 'wang' is not a member of 'wang'

2.2.5 临时切换主组

newgrp:临时切换主组,如果用户本不属于此组,则需要密码

格式:

newgrp [-] [group]

范例:

wang用户属于g1组,临时切换主组时,不需要密码,创建的文件主组是g1,exit退出后主组还是wang。

wang用户不在g2组,临时切换主组时,需要密码,才能临时切换主组。

[root@centos7 ~]# id wang

uid=1000(wang) gid=1000(wang) groups=1000(wang), 1002(g1)

[root@centos7 ~]# su - wang

[wang@centos7 ~]$ newgrp g1

[wang@centos7 ~]$ touch g1.txt

[wang@centos7 ~]$ ll g1.txt

-rw-r--r-- 1 wang g1 0 Dec 10 10:20 g1.txt

[wang@centos7 ~]$ newgrp g2

Password:

[wang@centos7 ~]$ exit

[root@centos7 ~]# gpasswd g2 ##设置g2组的密码为123456

[root@centos7 ~]# su - wang

[wang@centos7 ~]$ newgrp g2

Password: 123456

[wang@centos7 ~]$ touch g2.txt

-rw-r--r-- 1 wang g2 0 Dec 10 10:21 g2.txt

[wang@centos7 ~]$ exit

[root@centos7 ~]#

2.2.6 更改及查看组成员

1)groupmems:可以管理附加组的成员关系

格式:

groupmems [options] [action]

常用选项:

-g, --group groupname #更改为指定组 (只有root)

-a, --add username #指定用户加入组

-d, --delete username #从组中删除用户

-p, --purge #从组中清除所有成员

-l, --list #显示组成员列表

范例:

[root@centos7 ~]# groups wang

wang : wang g2

[root@centos7 ~]# groupmems -a wang -g g1 ##等同于usermod -aG g1 wang或gpasswd -a wang g1

[root@centos7 ~]# groups wang

wang : wang g1 g2

[root@centos7 ~]# groupmems -d wang -g g1 ##等同于gpasswd -d wang g1

[root@centos7 ~]# groups wang

wang : wang g2

[root@centos7 ~]# groupmems -a mage -g g2

[root@centos7 ~]# getent group g2 ##g2附加组中有wang和mage两个用户

g2:x:1016:wang,mage

[root@centos7 ~]# groupmems -l -g g2 ##同上

wang mage

[root@centos7 ~]# groupmems -p -g g2 ##清除g2组中的所有成员

[root@centos7 ~]# getent group g2

g2:x:1016:

2)groups:查看用户关系

格式:

groups [OPTION]...[USERNAME]...

范例:

[root@centos7 ~]# groupmems -a wang -g g2

[root@centos7 ~]# groups wang

wang : wang g2

2.3 练习

(1)、创建组distro,其GID为;

(2)、创建用户mandriva, 其ID号为1005;基本组为distro;

(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;

(4)、给用户mageia添加密码,密码为mageedu,并设置用户密码7天后过期

(5)、删除mandriva,但保留其家目录;

(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

(7)、修改slackware的默认shell为/bin/tcsh;

(8)、为用户slackware新增附加组admins,并设置不可登陆。

#1)创建组distro,其GID为

[root@centos7 ~]#groupadd -g distro

[root@centos7 ~]#getent group distro

distro:x::

[root@centos7 ~]#getent gshadow distro

distro:!::

#2)创建用户mandriva, 其ID号为1005;基本组为distro

#3)创建用户mageia,其ID号为1100,家目录为/home/linux

[root@centos7 ~]#useradd -u 1005 -g distro mandriva

[root@centos7 ~]#useradd -u 1100 -d /home/linux mageia

[root@centos7 ~]#getent passwd mandriva mageia

mandriva:x:1005:::/home/mandriva:/bin/bash

mageia:x:1100:1100::/home/linux:/bin/bash

[root@centos7 ~]#getent shadow mandriva mageia

mandriva:!!:18605:0:99999:7:::

mageia:$6$JanLoJ/w$EIf8mRkpHWujJVoMID5SsBZ2G835FpVM.xjgXwyi6gXZzCemNJ0IsrDOodJ8edHocG/i6MPpzl.cSNpDLLZ5a.:18605:0:99999:7:::

[root@centos7 etc]#ll /home

drwx------ 2 dong dong 83 Nov 23 13:28 dong

drwx------ 2 mageia mageia 62 Dec 9 11:27 linux

drwx------ 2 mandriva distro 62 Dec 9 11:27 mandriva

#4)给用户mageia添加密码,密码为mageedu,并设置用户密码7天后过期

[root@centos7 etc]#echo mageedu |passwd --stdin mageia

Changing password for user mageia.

passwd: all authentication tokens updated successfully.

[root@centos7 etc]#chage -M 7 mageia

[root@centos7 etc]#getent shadow mageia

mageia:$6$re3Ski3l$FkIN/jw1zSWnauHG4xM1OMyOXQmbTo4FcfPhyxGv4CrjWqul1TEzQh0DOS5UXB6tbVOMLJy.vBRk55G7D8/Pv.:18617:0:7:7:::

#测试密码有效期

[root@centos7 etc]#date 12211217 ##修改时间为7天后

Wed Dec 17 12:21:00 CST

[root@centos7 etc]#su - dong

Last login: Wed Dec 9 14:19:27 CST on pts/0

[dong@centos7 ~]$su - mageia

Password:

You are required to change your password immediately (password aged)

Changing password for mageia.

(current) UNIX password:

New password:

Retype new password:

Last login: Wed Dec 9 14:20:21 CST on pts/0

#5)删除mandriva,但保留其家目录;

[root@centos7 ~]#userdel mandriva

[root@centos7 ~]#ll /home

total 0

drwx------ 2 dong dong 83 Nov 23 13:28 dong

drwx------ 2 mageia mageia 101 Dec 30 linux

drwx------ 2 1005 distro 62 Dec 9 11:27 mandriva

#6)创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

[root@centos7 ~]#groupadd peguin

[root@centos7 ~]#getent group peguin

peguin:x::

[root@centos7 ~]#useradd -u 2002 -g distro -G peguin slackware

[root@centos7 ~]#getent passwd slackware

slackware:x:2002:::/home/slackware:/bin/bash

[root@centos7 ~]#id slackware

uid=2002(slackware) gid=(distro) groups=(distro),(peguin)

#7)修改slackware的默认shell为/bin/tcsh;

[root@centos7 ~]#usermod -s /bin/tcsh slackware

[root@centos7 ~]#getent passwd slackware

slackware:x:2002:::/home/slackware:/bin/tcsh

#8)为用户slackware新增附加组admins,并设置不可登陆。

[root@centos7 ~]#groupadd admins

[root@centos7 ~]#getent group admins

admins:x::

[root@centos7 ~]#usermod -aG admins -s /sbin/nologin slackware

[root@centos7 ~]#groups slackware

slackware : distro peguin admins

[root@centos7 ~]#id slackware

uid=2002(slackware) gid=(distro) groups=(distro),(peguin),(admins)

[root@centos7 ~]#getent passwd slackware

slackware:x:2002:::/home/slackware:/sbin/nologin

03、文件权限管理

3.1 文件所有者和属组属性操作

3.1.1 设置文件的所有者chown

chown 命令可以修改文件的属主,也可以修改文件属组

格式:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

chown [OPTION]... --reference=RFILE FILE...

说明:

OWNER #只修改所有者

OWNER:GROUP #同时修改所有者和属组

:GROUP #只修改属组,冒号也可用 . 替换

--reference=RFILE #参考指定的的属性,来修改

-R #递归,此选项慎用,非常危险!

范例:

[root@centos7 ~]# cp /etc/fstab /data/f1.txt

[root@centos7 data]# ll

-rw-r--r-- 1 root root 465 Dec 13 20:04 f1.txt

[root@centos7 data]# chown wang f1.txt

[root@centos7 data]# ll

-rw-r--r-- 1 wang root 465 Dec 13 20:04 f1.txt

[root@centos7 data]# chown :g1 f1.txt

[root@centos7 data]# ll

-rw-r--r-- 1 wang g1 465 Dec 13 20:04 f1.txt

[root@centos7 data]# chown mage:g2 f1.txt

[root@centos7 data]# ll

-rw-r--r-- 1 mage g2 465 Dec 13 20:04 f1.txt

## --reference=选项的使用

[root@centos7 data]# cp /etc/issue f2.txt

[root@centos7 data]# ll

-rw-r--r-- 1 mage g2 465 Dec 13 20:04 f1.txt

-rw-r--r-- 1 root root 23 Dec 13 20:06 f2

[root@centos7 data]# chown --reference=f1.txt f2

[root@centos7 data]# ll

-rw-r--r-- 1 mage g2 465 Dec 13 20:04 f1.txt

-rw-r--r-- 1 mage g2 23 Dec 13 20:06 f2

## -R选项

[root@centos7 ~]# chown -R wang.g1 /data/

[root@centos7 ~]# ll /data/

-rw-r--r-- 1 wang g1 465 Dec 13 20:04 f1.txt

-rw-r--r-- 1 wang g1 23 Dec 13 20:06 f2

注意:-R这个选项要慎用,如果不小心执行了/*,就会把根目录下的所有目录和文件的属性改掉。仅次于rm -rf /*这个命令。

chown -R wang.g1 /data /* ##本来想修改/data目录的属性,但多了一个空格成了/data 和/*了,就把根目录下的所有目录和文件属性改掉了

3.1.2 设置文件的属组信息chgrp

chgrp 命令可以只修改文件的属组

格式:

chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

范例:

[root@centos7 data]# ll f2

-rw-r--r-- 1 wang g1 23 Dec 13 20:06 f2

[root@centos7 data]# chgrp g2 f2

[root@centos7 data]# ll f2

-rw-r--r-- 1 wang g2 23 Dec 13 20:06 f2

3.2 文件权限

3.2.1 文件权限说明

文件的权限主要针对三类对象进行定义:

owner:属主,u

group:数组,g

other:其他,o

注意:用户的最终权限,是从左向右进行顺序匹配,即所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限。

每个文件针对每类访问者都定义了三种常用权限

r Readable 读

w Writable 写

x eXcutable 执行

对文件的权限:

r 可使用文件查看类的工具,如cat等获取文件的内容

w 可修改其内容

x 可以把文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行的)

对目录的权限:

r 可以使用ls查看此目录中文件列表

w 可以在此目录中创建文件,也可以删除此目录中的文件,而和此被删除的文件的权限无关

x 可以cd进入目录,可使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限

X 只给目录x权限,如果目录中的文件u有x权限,则所有属性都加上x权限;u无x权限,则不添加x权限

范例:

#修改f1.txt文件的所有者为wang,附加组为g2,权限是u=,o=rwx

[root@centos7 data]# id wang

uid=1013(wang) gid=1013(wang) groups=1013(wang),1016(g2)

[root@centos7 data]# ll f1.txt

-rw-r--r-- 1 wang g1 3 Dec 13 20:04 f1.txt

[root@centos7 data]# chown wang.g2 f1.txt

[root@centos7 data]# ll f1.txt

-rw-r--r-- 1 wang g2 3 Dec 13 20:04 f1.txt

[root@centos7 data]# chmod u=,o=rwx f1.txt

[root@centos7 data]# ll f1.txt

----r--rwx 1 wang g2 3 Dec 13 20:04 f1.txt

#切换到wang,修改或访问f1.txt文件,都拒绝,因为u权限为空。

[root@centos7 data]# su wang

[wang@centos7 data]$ echo wang01 >f1.txt

bash: f1.txt: Permission denied

[wang@centos7 data]$ cat f1.txt

cat: f1.txt: Permission denied

##但可以为此文件添加rwx的权限,因为f1.txt的所有者是wang用户

[wang@centos7 data]$ chmod u+rwx f1.txt

[wang@centos7 data]$ cat f1.txt

123

[wang@centos7 data]$ ll f1.txt

-rwxr--rwx 1 wang g2 3 Dec 13 20:04 f1.txt

[wang@centos7 data]$

3.2.2 修改文件权限chmod

格式:

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

#参考RFILE文件的权限,将FILE的修改为同RFILE

chmod [OPTION]... --reference=RFILE FILE...

说明:

MODE: who opt permission

who: u,g,o,a

opt: + - =

permission: r,w,x

修改指定一类用户的所有权限

u= g= o= ug= a= u=,g=

修改指定一类用户某个或某个权限

u+ u- g+ g- o+ o- a+ a- + -

-R: 递归修改权限

chmod u+wx,g-r,o=rx file

chmod -R g+rwx /testdir

chmod 600 file

范例:设置X权限

a+X权限:

1)对目录和子目录增加x可执行权限

2)对目录中的文件

​ u有x权限的,那么g和o都会增加x权限;

​ u无x权限的,都保持不变,不会增加x权限。

a+x权限:会全部增加x执行权限

#初始化/data目录,文件如下,f1.txt所有者有x权限

[wang@centos7 data]$ ll

drwxrwxr-x 2 wang wang 19 Dec 13 21:07 dir

-rwxr--rw- 1 wang g2 465 Dec 13 20:04 f1.txt

-rw-r--r-- 1 wang g2 23 Dec 13 20:06 f2

[wang@centos7 data]$ cp f1.txt dir

[wang@centos7 data]$ ll dir

-rwxr--r-- 1 wang wang 465 Dec 13 21:07 f1.txt

-rw-r--r-- 1 wang wang 465 Dec 13 21:07 fstab

#-R递归增加a+X

[wang@centos7 data]$ chmod -R a+X /data

[wang@centos7 data]$ ll

drwxrwxr-x 2 wang wang 33 Dec 13 21:07 dir ##目录都增加x权限

-rwxr-xrwx 1 wang g2 465 Dec 13 20:04 f1.txt ##u有x,都增加x权限

-rw-r--r-- 1 wang g2 23 Dec 13 20:06 f2 ##u无x,保持不变

[wang@centos7 data]$ ll dir

total 8

-rwxr-xr-x 1 wang wang 465 Dec 13 21:07 f1.txt ##子目录下的文件也一样

-rw-r--r-- 1 wang wang 465 Dec 13 21:07 fstab

##a+x权限

[wang@centos7 data]$ chmod -R a+x /data

[wang@centos7 data]$ ll

drwxrwxr-x 2 wang wang 33 Dec 13 21:07 dir

-rwxr-xrwx 1 wang g2 465 Dec 13 20:04 f1.txt

-rwxr-xr-x 1 wang g2 23 Dec 13 20:06 f2 ##所有文件和目录都增加了x权限

w权限:删除此目录中的文件,和此被删除的文件权限无关,和它的上级目录权限有关系。

1)下面的例子中,dir1目录是mage g1的组权限,但给了other rwx的权限。而建立的root2文件,给了最高的什么用户(除了root外)都不能访问的权限。所以wang用户不能读写root2文件,但这个root2文件在dir1目录中,而wang用户属于other组,对dir1目录拥有rwx的权限,所以可以删除

root2文件。

[root@vickie data]# chown mage:g3 dir1

[root@vickie data]# ll

drwxr-xrwx. 2 mage g3 6 Nov 16 02:33 dir1

[root@vickie data]# id wang

uid=1001(wang) gid=1001(wang) groups=1001(wang),1006(g1),1007(g2)

[root@vickie data]# touch dir1/root2.txt

[root@vickie data]# chmod a= dir1/root2.txt

[root@vickie data]# ll dir1/root2.txt

----------. 1 root root 0 Nov 16 02:34 dir1/root2.txt

[root@vickie data]# su wang

[wang@vickie data]$ echo wang-write-root2 >dir1/root2.txt

bash: dir1/root2.txt: Permission denied

[wang@vickie data]$ rm -rf dir1/root2.txt

[wang@vickie data]$

2)wang用户的附属组是g1,切换到wang下,修改f1文件的所属组,那么可以修改成g1组,但不能修改成wang用户不属于的组,如g3

[root@vickie data]# id wang

uid=1001(wang) gid=1001(wang) groups=1001(wang),1006(g1)

[root@vickie data]# su wang

[wang@vickie data]$ ll

-rwxr--rwx. 1 wang g2 13 Nov 16 01:52 f1.txt

[wang@vickie data]$ chown :g1 f1.txt

[wang@vickie data]$ ll

-rwxr--rwx. 1 wang g1 13 Nov 16 01:52 f1.txt

[wang@vickie data]$ chown :g3 f1.txt

chown: changing group of 'f1.txt': Operation not permitted

[wang@vickie data]$

3)设置dir1目录的权限是rwx

dir1目录的权限是drwxr-xrwx,而wang用户不在g1组。那么wang用户不能删除dir2目录,因为dir2里面有文件,

不是空目录。wang用户可以在dir1中创建文件,如wang1.txt

#初始化用户和组

[root@centos8-com data]# groupmems -a wang -g g2

[root@centos8-com data]# groupmems -a mage -g g1

[root@centos8-com data]# groups wang

wang : wang g2

[root@centos8-com data]# groups mage

mage : mage g1

[root@centos8-com data]# id wang

uid=1000(wang) gid=1000(wang) groups=1000(wang),1003(g2)

[root@centos8-com data]# id mage

uid=1001(mage) gid=1001(mage) groups=1001(mage),1002(g1)

#修改dir1目录的权限,mage所有者,g1组

[root@centos8-com data]# chown -R mage.g1 dir1

[root@centos8-com data]# ll dir1

drwxr-xr-x. 2 mage g1 20 Nov 16 01:21 dir1

[root@centos8-com data]# cd dir1/dir2

[root@centos8-com dir2]# ll

total 0

-rw-r--r--. 1 mage g1 0 Nov 16 01:21 f2.txt

#修改dir1目录的权限为o=rwx

[root@centos8-com data]# chmod o=rwx dir1

[root@centos8-com data]# ll

total 0

drwxr-xrwx. 3 mage g1 18 Nov 16 01:20 dir1

#切换到wang用户下

[root@centos8-com data]# su wang

[wang@centos8-com data]$ cd dir1

[wang@centos8-com dir1]$ ll

total 0

drwxr-xr-x. 2 mage g1 20 Nov 16 01:21 dir2

#删除dir2目录,没有权限,因为dir2目录下有文件f2,而wang用户对f2文件没有权限。

[wang@centos8-com dir1]$ rm -rf dir2

rm: cannot remove 'dir2/f2.txt': Permission denied

[wang@centos8-com dir1]$ ll dir2/

total 0

-rw-r--r--. 1 mage g1 0 Nov 16 01:21 f2.txt

[wang@centos8-com dir1]$ cat dir2/f2.txt

[wang@centos8-com dir1]$ echo "wang2" >>dir2/f2.txt

bash: dir2/f2.txt: Permission denied

#但wang用户可以在dir1目录下新建文件,因为wang用户对dir1目录有读写权限。

[wang@centos8-com dir1]$ touch wang1.txt

[wang@centos8-com dir1]$ ll

total 0

drwxr-xr-x. 2 mage g1 20 Nov 16 01:21 dir2

-rw-rw-r--. 1 wang wang 0 Nov 16 02:19 wang1.txt

#切换到root用户,把dir2目录下的f2文件删除,那么dir2就是空目录了,那么wang用户有other的rwx权限,就可以删除dir2了。

[wang@centos8-com dir1]$ su

Password:

[root@centos8-com dir1]# rm -f dir2/f2.txt

[root@centos8-com dir1]# su wang

[wang@centos8-com dir1]$ rm -rf dir2

[wang@centos8-com dir1]$

[wang@centos8-com dir1]$ ll

total 0

-rw-rw-r--. 1 wang wang 0 Nov 16 02:19 wang1.txt

4)设置dir1目录的other权限为rw

对文件夹不能只有w权限,还需要有x执行权限,否则不能进入dir1目录,只能列出dir1目录中的文件,但不能查看,也不能删除。

[root@centos8-com data]# chmod o=rw dir1

[root@centos8-com data]# ll

total 0

drwxr-xrw-. 2 mage g1 23 Nov 16 02:24 dir1

-rwxr--rwx. 1 wang wang 0 Nov 16 02:29 f1.txt

[root@centos8-com data]# ll dir1

total 0

-rw-rw-r--. 1 wang wang 0 Nov 16 02:19 wang1.txt

[root@centos8-com data]# su wang

[wang@centos8-com data]$ cd dir1

bash: cd: dir1: Permission denied ##other组对dir1目录没有x权限,将无法进入该目录

[wang@centos8-com data]$ ll dir1

ls: cannot access 'dir1/wang1.txt': Permission denied

total 0

-????????? ? ? ? ? ? wang1.txt ##列出dir1目录的列表,可以看到有文件wang1.txt

[wang@centos8-com data]$ rm -f dir1/wang1.txt ##但不能删除自己建的这个wang1.txt文件。

rm: cannot remove 'dir1/wang1.txt': Permission denied

5)设置dir1目录的权限为wx

[root@centos8-com data]# chmod o=wx dir1

[root@centos8-com data]# ll

total 0

drwxr-x-wx. 2 mage g1 23 Nov 16 02:24 dir1

-rwxr--rwx. 1 wang wang 0 Nov 16 02:29 f1.txt

[root@centos8-com data]# su wang

[wang@centos8-com data]$ ll dir1 ##wang用户对dir1目录没有r权限,所以不能列出目录中的内容

ls: cannot open directory 'dir1': Permission denied

[wang@centos8-com data]$ cd dir1 ##wang用户对dir1目录有x权限,所以可以进入

[wang@centos8-com dir1]$ ll

ls: cannot open directory '.': Permission denied

[wang@centos8-com dir1]$ ll wang1.txt ##因为知道dir1中有wang1文件,所以直接列出这个文件是可以的。

-rw-rw-r--. 1 wang wang 0 Nov 16 02:19 wang1.txt

[wang@centos8-com dir1]$ echo "wang1" >wang1.txt ##也可以写入内容

[wang@centos8-com dir1]$ rm -f wang1.txt ##也可以删除该文件,上述的可行条件是,必须知道该目录下有这个文件,知道这个文件名,才能这样操作。

综上所述,一般对目录常用的权限有rwx r-x ---这三种,r和x是成对出现的。

r可以列出目录内容;

x可以进入目录里。

6)X权限

chmod -R a+X /data

表示把/data目录下的子目录添加x执行权限,同时把/data目录下的有x执行权限的文件,都加上x执行权限;但没有x执行权限的文件不会增加,这样保证了原来没有x执行权限的文件也不会有x执行权限。

/data目录下的文件准备,权限如下:

[root@centos8-com data]# chmod u+x wang.txt

[root@centos8-com data]# ll

total 0

drw-r---w-. 2 mage g1 6 Nov 16 02:49 dir1 ##都没有x权限

-rw-r--rw-. 1 wang wang 0 Nov 16 02:29 f1.txt ##wang所有者,都没有x权限

-rwxr--r--. 1 root root 0 Nov 16 03:00 f2.txt ##root所有者有x权限,其他没有x权限

-rwxr--r--. 1 wang wang 0 Nov 16 03:02 wang.txt ##wang所有者有x权限,其他没有x权限

[root@centos8-com data]# cd ..

[root@centos8-com /]# chmod -R a+X /data ##递归对/data目录增加a+X权限

[root@centos8-com /]# ll /data

total 0

drwxr-x-wx. 2 mage g1 6 Nov 16 02:49 dir1 ##子目录增加了x权限

-rw-r--rw-. 1 wang wang 0 Nov 16 02:29 f1.txt ##还是没有x权限

-rwxr-xr-x. 1 root root 0 Nov 16 03:00 f2.txt ##都有x权限

-rwxr-xr-x. 1 wang wang 0 Nov 16 03:02 wang.txt ##都有x权限

3.3 新建文件和目录的默认权限

umask 的值可以用来保留在创建文件权限

实现方式:

新建文件的默认权限:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变。

​ 666:因为默认的生成文件是不能带x执行权限的,所以先把x权限去掉,即777-111=666

新建目录的默认权限: 777-umask

非特权用户umask默认是 002

root的umask 默认是 022

查看umask

umask

umask -S

umask -p

修改umask

umask 002

umask u=rw,g=r,o=

持久保存umask

全局设置: /etc/bashrc

用户设置:~/.bashrc

范例:

[root@centos8 ~]# umask

0022

[root@centos8 ~]# umask -S

u=rwx,g=rx,o=rx

[root@centos8 ~]# umask -p

umask 0022

[root@centos8 ~]# umask

0022

[root@centos8 ~]# ( umask 666;touch /data/f1.txt ) #加(),umask只是临时一次使用

[root@centos8 ~]# umask

0022

[root@centos8 ~]# ll /data/f1.txt

----------. 1 root root 0 Dec 13 08:44 /data/f1.txt

3.4 Linux文件系统上的特殊权限

三种常见的权限:r, w, x

三种特殊权限:SUID, SGID, Sticky

3.4.1 特殊权限SUID

进程有属主和属组;文件有属主和属组

suid作用在文件上时,该文件执行的时候,就会继承该文件的所有者的权限;

sgid作用在文件上时,该文件执行的时候,就会继承该文件的所属组的权限;

sticky作用在目录上时,只有目录中文件的所有者或root才能增删改该文件,不能删除其他用户创建的文件;

sgid作用在目录上时,用户创建的文件所有者是自己,所属组继承上层目录的组。

任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限;

启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组;

进程访问文件时的权限,取决于进程的发起者。

(a) 进程的发起者,同文件的属主,则应用文件属主权限

(b) 进程的发起者,属于文件属组,则应用文件属组权限

(c) 应用文件“其它”权限

二进制的可执行文件上SUID权限功能:

任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限;

启动为进程之后,其进程的属主为原程序文件的属主;

SUID只对二进制可执行程序有效;

SUID设置在目录上无意义。

SUID权限设定:

chmod u+s FILE...

chmod 6xxx FILE

chmod u-s FILE...

范例:

1)普通用户wang不能打开、修改、删除/etc/shadow文件,但通过passwd可以修改自己的密码,并存在shadow中。因为/usr/bin/passwd所有者上有suid位,那么wang用户访问passwd时,就临时切换成root用户来访问passwd文件了。

[root@centos7 ~]#ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 27856 Apr 1 /usr/bin/passwd

2)普通用户wang访问不了shadow文件,但把cat命令加上u+s权限后,wang也能临时切换成root用户来访问shadow文件了,这很危险。

[root@centos7 ~]# su wang

[wang@centos7 root]$ cat /etc/shadow

cat: /etc/shadow: Permission denied

[root@centos7 ~]# chmod u+s /usr/bin/cat

[root@centos7 ~]# su wang

[wang@centos7 root]$ cat /etc/shadow

root:$6$6aKJ...::0:99999:7:::

bin:*:18358:0:99999:7:::

...省略...

3.4.2 特殊权限SGID

二进制的可执行文件上SGID权限功能:

任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属组为原程序文件的属组

1、SGID权限在文件上的设定:

chmod g+s FILE...

chmod 2xxx FILE

chmod g-s FILE...

2、目录上的SGID权限功能:

​ 默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录。

SGID权限设定:

chmod g+s DIR...

chmod 2xxx DIR

chmod g-s DIR...

范例:

root下新建dir2目录,切换到wang用户,但不能创建文件到dir2目录,因为wang是other组,只有r-x权限;

而只修改dir2的主组为it后,root新建的root2文件的所有者和所属组还是root;而把sgid设置在目录dir2上后,无论root用户还是普通wang用户,都可以在dir2里新建文件,并且所属组为it组。

#1)初始化dir2目录和it组

[root@centos7 ~]#groupadd it

[root@centos7 ~]#cd /data

[root@centos7 data]#mkdir dir2

[root@centos7 data]#ll

drwxr-xr-x 2 root root 6 Dec 14 14:07 dir2

#2)改变dir2目录的主组为it组

[root@centos7 data]#chgrp it dir2

[root@centos7 data]#ll

drwxr-xr-x 2 root it 6 Dec 14 14:07 dir2

[root@centos7 data]#touch dir2/root2 ##新建的root2文件,主组还是root组

[root@centos7 data]#ll dir2/root2

-rw-r--r-- 1 root root 0 Dec 14 14:07 dir2/root2

#3)切换到wang用户,不能创建文件

[root@centos7 data]#su wang

[wang@centos7 data]$touch dir2/wang2 ##切换到wang用户下,不能新建文件

touch: cannot touch ‘dir2/wang2’: Permission denied

#4)dir2目录设置sgid权限

[wang@centos7 data]$chmod 2777 dir2 ##在dir2目录上设置sgid,需要root用户来操作

chmod: changing permissions of ‘dir2’: Operation not permitted

[wang@centos7 data]$exit

exit

[root@centos7 data]#chmod 2777 dir2 ##设置sgid

[root@centos7 data]#ll dir2 -d ##属组的标志位是s

drwxrwsrwx 2 root it 45 Dec 14 14:07 dir2

#5)测试,root下新建root3文件,wang用户新建wang3文件,所属组均为it组

[root@centos7 data]#touch dir2/root3 ##创建root3和wang3,主组就是it组了

[root@centos7 data]#su wang

[wang@centos7 data]$touch dir2/wang3

[wang@centos7 data]$ll dir2

total 0

-rw-r--r-- 1 root root 0 Dec 14 14:07 root2

-rw-r--r-- 1 root it 0 Dec 14 14:08 root3

-rw-rw-r-- 1 wang it 0 Dec 14 14:09 wang3 ##所属组均为it组

[14:09:04 wang@centos7 data]$

3.4.3 特殊权限 Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权;

在目录设置Sticky 位,只有文件的所有者或root才可以删除该文件。

sticky 设置在文件上无意义

Sticky权限设定:

chmod o+t DIR...

chmod 1xxx DIR

chmod o-t DIR...

范例:

[root@centos7 data]#ll /tmp -d

drwxrwxrwt. 10 root root 251 Dec 14 14:14 /tmp

3.5 设定文件特殊属性

lsattr:显示特定属性

chattr:设置文件的特殊属性,可以防止 root 用户误操作删除或修改文件

+i:不能删除,改名,更改

+a:可以追加内容,不能删除文件原有内容,不能删除文件,不能改名

范例:

chattr可以+i +a增加特殊属性,也可以用-i -a去掉特殊属性。

+a可以追加内容,但不能用vim等软件删除其他已有内容。

1)chattr特殊属性作用在文件上

#初始化测试环境,为文件分别设置+a和+i属性

[root@centos7 data]#echo "chattr +a option" > f-a.txt

[root@centos7 data]#echo "chattr +i option" > f-i.txt

[root@centos7 data]#chattr +i f-i.txt

[root@centos7 data]#chattr +a f-a.txt

[root@centos7 data]#lsattr

-----a---------- ./f-a.txt

----i----------- ./f-i.txt

##测试删除、改名和修改内容,root也不能删除或修改文件了

[root@centos7 data]#rm -f f-i.txt

rm: cannot remove ‘f-i.txt’: Operation not permitted

[root@centos7 data]#mv f-i.txt fi

mv: cannot move ‘f-i.txt’ to ‘fi’: Operation not permitted

[root@centos7 data]#echo "hello" >>f-i.txt

-bash: f-i.txt: Permission denied

[root@centos7 data]#rm -f f-a.txt

rm: cannot remove ‘f-a.txt’: Operation not permitted

[root@centos7 data]#mv f-a.txt fa

mv: cannot move ‘f-a.txt’ to ‘fa’: Operation not permitted

[root@centos7 data]#echo "hello" >>f-a.txt ##可以echo追加内容

[root@centos7 data]#cat f-a.txt

chattr +a option

hello

[root@centos7 data]#vim f-a.txt ##经测试不能修改文件已有内容,增删改都不行,不能保存,但每次都会生成一个文件的备份。

[14:35:32 root@centos7 data]#ll

-rw-r--r-- 1 root root 23 Dec 14 14:30 f-a.txt

-rw-r--r-- 1 root root 23 Dec 14 14:30 f-a.txt~

-rw-r--r-- 1 root root 23 Dec 14 14:33 f-a.txy~

-rw-r--r-- 1 root root 23 Dec 14 14:33 f-a.txz~ ##编辑过3次f-a.txt文件

-rw-r--r-- 1 root root 17 Dec 14 14:28 f-i.txt

2)chattr特殊属性作用在目录上

[root@centos7 data]#cp /etc/fstab dir/

[root@centos7 data]#ll dir

-rw-r--r-- 1 root root 465 Dec 14 14:44 fstab

[root@centos7 data]#lsattr

-----a---------- ./dir

[root@centos7 data]#lsattr dir

---------------- dir/fstab

[root@centos7 data]#rm dir/fstab -rf

rm: cannot remove ‘dir/fstab’: Operation not permitted

[root@centos7 data]#mv dir/fstab dir/f1

mv: cannot move ‘dir/fstab’ to ‘dir/f1’: Operation not permitted

[root@centos7 data]#echo "hello" >> dir/fstab

[root@centos7 data]#cat dir/fstab

# /etc/fstab

# Created by anaconda on Sat Jul 6 14:34:58

/dev/mapper/centos-root / xfs defaults 0 0

UUID=4d6ce1ba-16ec-4d37-951c-afd012231267 /boot xfs defaults 0 0

/dev/mapper/centos-swap swap swap defaults 0 0

hello ##这是新追加的hello内容

3)去掉文件的a或i属性

[root@centos7 data]#chattr -a dir f-a.txt

[root@centos7 data]#chattr -i f-i.txt

[root@centos7 data]#lsattr

---------------- ./f-a.txt

---------------- ./f-i.txt

---------------- ./f-a.txt~

---------------- ./f-a.txz~

---------------- ./f-a.txy~

---------------- ./dir

3.6 访问控制列表

3.6.1 ACL权限功能

ACL:Access Control List,实现灵活的权限管理

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

ACL生效顺序:

所有者,自定义用户,所属组|自定义组,其他人

3.6.2 ACL相关命令

setfacl 可以设置ACL权限

getfacl 可查看设置的ACL权限

格式:

setfacl

-m:修改 u|g:用户|组 -或0:无权限

setfacl -m u:USERNAME:- filename|directory

setfacl -m u:USERNAME:rw filename|directory

setfacl -m g:GROUP:r file|directory

-x:删除用户的权限

setfacl -x u:USERNAME file|directory

-b:删除所有acl权限

setfacl -b file

-Rm dir #递归对目录dir添加acl权限

setfacl -Rm u:wang:w dir

-Rb dir #递归删除目录dir的acl权限

setfacl -Rb dir

getfacl file|directory

mount -o acl /directory

#清除所有ACL权限

setfacl -b file1

#复制file1的acl权限给file2

getfacl file1 | setfacl --set-file=- file2

3.6.3 setfacl设置文件和目录的acl权限

1)setfacl对文件设置acl权限

#初始化文件环境

[root@centos7 data]#echo magedu >f1.txt

[root@centos7 data]#ll f1.txt

-rw-r--r-- 1 root root 7 Dec 14 15:02 f1.txt

[root@centos7 data]#setfacl -m u:wang:- f1.txt ##设置wang用户对f1文件没有任何权限

[root@centos7 data]#ll f1.txt

-rw-r--r--+ 1 root root 7 Dec 14 15:02 f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:--- ##wang用户没有权限访问

group::r--

mask::r--

other::r--

#切换到wang用户下,进行测试,不能查看、删除、修改f1.txt文件,可以列出f1的属性

[root@centos7 data]#su wang

[wang@centos7 data]$cat f1.txt

cat: f1.txt: Permission denied

[wang@centos7 data]$echo hello >>f1.txt

bash: f1.txt: Permission denied

[wang@centos7 data]$rm -f f1.txt

rm: cannot remove ‘f1.txt’: Permission denied

[wang@centos7 data]$mv f1.txt f2

mv: cannot move ‘f1.txt’ to ‘f2’: Permission denied

[wang@centos7 data]$ll f1.txt

-rw-r--r--+ 1 root root 7 Dec 14 15:02 f1.txt

2)setfacl对目录设置acl权限

#初始化环境

[root@centos7 data]#mkdir dir

[root@centos7 data]#setfacl -m u:wang:0 dir ##设置wang用户对dir目录没有任何权限

[root@centos7 data]#getfacl dir

# file: dir

# owner: root

# group: root

user::rwx

user:wang:---

group::r-x

mask::r-x

other::r-x

[root@centos7 data]#cp /etc/redhat-release dir/os

[root@centos7 data]#cat dir/os

CentOS Linux release 7.8. (Core)

#切换到wang用户下测试,不能cd进入目录,不能列表,不能复制文件

[root@centos7 data]#su wang

[wang@centos7 data]$cd dir

bash: cd: dir: Permission denied

[wang@centos7 data]$ls dir/os

ls: cannot access dir/os: Permission denied

[wang@centos7 data]$ll

drwxr-xr-x+ 2 root root 16 Dec 14 15:07 dir

-rw-r--r--+ 1 root root 7 Dec 14 15:02 f1.txt

[wang@centos7 data]$cp /tmp/issue dir/

cp: cannot stat ‘dir/issue’: Permission denied

[wang@centos7 data]$rm -rf dir

rm: cannot remove ‘dir’: Permission denied

3.6.4 setfacl设置组的acl权限

把mage和wang用户分别加入到g1组中,然后设置g1组的acl权限,测试其对文件的访问限制。

#1)初始化,新建g1组,把mage用户加入到g1组中,给g1设置w的acl权限访问f1.txt

[root@centos7 data]#setfacl -m u:wang:0 f1.txt

[root@centos7 data]#groupadd g1

[root@centos7 data]#setfacl -m g:g1:w f1.txt

[root@centos7 data]#ll f1.txt

-rw-rw-r--+ 1 root root 7 Dec 14 15:02 f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:--- ##wang用户没在g1组,对f1.txt文件无任何访问权限

group::r--

group:g1:-w- ##g1组设置为w的权限

mask::rw-

other::r--

#2)切换到mage用户测试,mage还未加入到g1组中,所以mage对f1.txt是other权限,r只读

[root@centos7 data]#su mage

[mage@centos7 data]$cat f1.txt ##可以查看f1.txt的文件内容

magedu

[mage@centos7 data]$echo hello >>f1.txt ##但不能写入

bash: f1.txt: Permission denied

[mage@centos7 data]$rm -rf f1.txt ##跟不能删除

rm: cannot remove ‘f1.txt’: Permission denied

[mage@centos7 data]$exit

exit

#3)mage用户加入到g1组中,g1只有w权限,所以可以追加内容,但不能查看

[root@centos7 data]#gpasswd -a mage g1

Adding user mage to group g1

[root@centos7 data]#groupmems -l -g g1

mage

[root@centos7 data]#id mage

uid=(mage) gid=(mage) groups=(mage),2024(g1)

[root@centos7 data]#su mage

[mage@centos7 data]$echo hello >>f1.txt #可以追加内容到到f1.txt

[mage@centos7 data]$cat f1.txt #但不能查看文件内容了

cat: f1.txt: Permission denied

[mage@centos7 data]$exit

exit

#4)把wang用户也加入到g1组中测试,wang的权限本身是---,所以不会因为加入g1组中而改变

[root@centos7 data]#groupmems -a wang -g g1

[root@centos7 data]#groupmems -l -g g1

mage wang

[root@centos7 data]#id wang

uid=(wang) gid=(wang) groups=(wang),2024(g1)

[root@centos7 data]#su wang

[wang@centos7 data]$cat f1.txt ##不能查看f1.txt文件的内容

cat: f1.txt: Permission denied

[wang@centos7 data]$echo wang01>>f1.txt ##也不能追加内容

bash: f1.txt: Permission denied

[wang@centos7 data]$

3.6.5 mask 权限

mask只影响除所有者和other的之外的人和组的最大权限

mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

用户或组的设置必须存在于mask权限设定范围内才会生效

用法:

setfacl -m mask::rx file ##设置mask的acl权限为rx

设置mask权限:普通用户和组的权限要和mask相等或低于mask权限

#1)初始化文件,wang用户acl权限-,g1组acl权限w,mage属于g1组

[root@centos7 data]#setfacl -m u:wang:- f1.txt

[root@centos7 data]#setfacl -m g:g1:w f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:---

group::r--

group:g1:-w-

mask::rw-

other::r--

[root@centos7 data]#ll f1.txt

-rw-rw-r--+ 1 root root 13 Dec 14 15:25 f1.txt

[root@centos7 data]#chmod g=r f1.txt ##设置组权限为r

[root@centos7 data]#ll f1.txt

-rw-r--r--+ 1 root root 13 Dec 14 15:25 f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:---

group::r--

group:g1:-w- #effective:--- ##g1组的有效权限无

mask::r-- ##mask权限变为r,影响的是user:wang和group、group:g1

other::r--

#mage属于g1组,所以对f1.txt文件没有访问权限

[root@centos7 data]#id mage

uid=(mage) gid=(mage) groups=(mage),2024(g1)

[root@centos7 data]#su mage

[mage@centos7 data]$cat f1.txt

cat: f1.txt: Permission denied

[mage@centos7 data]$echo mage >>f1.txt

bash: f1.txt: Permission denied

#2)设置mask权限为rw

[root@centos7 data]#setfacl -m mask::rw f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:---

group::r--

group:g1:-w-

mask::rw- ##rw

other::r--

#3)设置wang用户权限为rwx

[root@centos7 data]#setfacl -m u:wang:rwx f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:rwx ##wang用户权限为rwx

group::r--

group:g1:-w-

mask::rwx ##mask值也是rwx

other::r--

#4)设置mask为rw

[root@centos7 data]#setfacl -m mask::r f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:rwx #effective:r-- ##有效权限为r

group::r--

group:g1:-w-

mask::r-- ##设置为rw

other::r--

[root@centos7 data]#su wang

[wang@centos7 data]$cat f1.txt

magedu

hello

[wang@centos7 data]$echo wang >>f1.txt

bash: f1.txt: Permission denied

--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样,只是添加ACL就可以了。

格式:

setfacl --set u::rw,u:wang:rw,g::r,o::- file1

范例:

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:---

group::r--

group:g1:-w- #effective:---

mask::r--

other::r--

[root@centos7 data]#setfacl --set u::rw,u:wang:rx,g::r,o::- f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:r-x

group::r--

mask::r-x

other::---

3.6.6 备份和还原ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。

但是tar等常见的备份工具是不会保留目录和文件的ACL信息。

范例:

#备份ACL

getfacl -R /tmp/dir > acl.txt

#消除ACL权限

setfacl -R -b /tmp/dir

#还原ACL权限

setfacl -R --set-file=acl.txt /tmp/dir

#还原ACL权限

setfacl --restore acl.txt

#查看ACL权限

getfacl -R /tmp/dir

#1)初始化文件

[root@centos7 data]#setfacl --set u::rw,u:wang:rx,g::r,o::- f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:r-x

group::r--

mask::r-x

other::---

#2)备份f1的acl权限

[root@centos7 data]#getfacl -R f1.txt >acl.txt

[root@centos7 data]#cat acl.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:r-x

group::r--

mask::r-x

other::---

#3)删除f1的acl权限

[16:28:05 root@centos7 data]#setfacl -R -b f1.txt

[16:28:32 root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

group::r--

other::---

#4)恢复f1的acl权限

[root@centos7 data]#setfacl -R --set-file=acl.txt f1.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:r-x

group::r--

mask::r-x

other::---

[root@centos7 data]#setfacl -R -b f1.txt #另一种恢复方式

[root@centos7 data]#setfacl --restore acl.txt

[root@centos7 data]#getfacl f1.txt

# file: f1.txt

# owner: root

# group: root

user::rw-

user:wang:r-x

group::r--

mask::r-x

other::---

3.7 练习

创建用户user1、user2、user3。在/data/下创建目录test

(1)、目录/data/test属主、属组为user1

(2)、在目录属主、属组不变的情况下,user2对文件有读写权限

(3)、user1在/data/test目录下创建文件a1.sh, a2.sh, a3.sh, a4.sh,设置所有用户都不可删除1.sh,2.sh文件、除了user1及root之外,所有用户都不可删除a3.sh,a4.sh

(4)、user3增加附加组user1,同时要求user1不能访问/data/test目录及其下所有文件

(5)、清理/data/test目录及其下所有文件的acl权限

#初始化用户和目录

[root@centos7 data]# useradd user1

[root@centos7 data]# useradd user2

[root@centos7 data]# useradd user3

[root@centos7 data]# mkdir /data/test -p

[root@centos7 data]# ll test -d

drwxr-xr-x 2 root root 6 Dec 22 23:04 test

#1)目录/data/test属主、属组为user1

[root@centos7 data]# chown -R user1.user1 test

[root@centos7 data]# ll test -d

drwxr-xr-x 2 user1 user1 6 Dec 22 23:04 test

#2)在目录属主、属组不变的情况下,user2对文件有读写权限

[root@centos7 data]# gpasswd -a user2 -g user1

Adding user user2 to group user1

[root@centos7 data]# id user2

uid=(user2) gid=(user2) groups=(user2),(user1)

[root@centos7 data]# chown g+w test

[root@centos7 data]# ll test -d

drwxrwxr-- 2 user1 user1 58 Dec 22 23:31 test

[root@centos7 data]# su user2

[user2@centos7 data]$ echo magedu >test/user2

[user2@centos7 data]$ cat test/user2

magedu

#3)user1在/data/test目录下创建文件a1.sh, a2.sh, a3.sh, a4.sh,设置所有用户都不可删除1.sh,2.sh文件、除了user1及root之外,所有用户都不可删除a3.sh,a4.sh

##创建文件

[user1@centos7 data]$ touch test/a{1..4}.sh

[user1@centos7 data]$ ll test/

total 0

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a1.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a2.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a3.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a4.sh

##设置文件特殊权限+i,所有用户都不能删除该文件

[user1@centos7 data]$ chattr +i test/a1.sh test/a2.sh ##普通用户不能设置

chattr: Operation not permitted while setting flags on test/a1.sh

chattr: Operation not permitted while setting flags on test/a2.sh

[user1@centos7 data]$ exit

[root@centos7 data]# chattr +i test/a{1..2}.sh ##root用户下设置特殊权限

[root@centos7 data]# lsattr test

----i----------- test/a1.sh

----i----------- test/a2.sh

---------------- test/a3.sh

---------------- test/a4.sh

##测试使用root用户删除文件,失败

[root@centos7 data]# rm test/a1.sh -rf

rm: cannot remove ‘test/a1.sh’: Operation not permitted

[root@centos7 data]# rm test/a2.sh -rf

rm: cannot remove ‘test/a2.sh’: Operation not permitted

##为test目录增加特殊权限sticky位,只有所有者和root用户才能删除目录中的文件,其他用户都不能删除

[root@centos7 data]# chmod o+t test

[root@centos7 data]# ll test -d

drwxrwxr-t 2 user1 user1 58 Dec 22 23:20 test

[root@centos7 data]# ll test/

total 0

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a1.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a2.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a3.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a4.sh

[root@centos7 data]# su user2

[user2@centos7 data]$ rm test/a3.sh -rf

rm: cannot remove ‘test/a3.sh’: Permission denied

[user2@centos7 data]$ exit

exit

[root@centos7 data]# su user1

[user1@centos7 data]$ rm test/a3.sh -rf

[user1@centos7 data]$ ll test/

total 0

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a1.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a2.sh

-rw-rw-r-- 1 user1 user1 0 Dec 22 23:20 a4.sh

#4)user3增加附加组user1,同时要求user3不能访问/data/test目录及其下所有文件

#把user3添加到user1组中

[root@centos7 data]# gpasswd -a user3 -g user1

Adding user user3 to group user1

[root@centos7 data]# groups user3

user3 : user3 user1

[root@centos7 data]# id user3

uid=(user3) gid=(user3) groups=(user3),(user1)

[root@centos7 data]# su user3

[user3@centos7 data]$ echo magedu >test/a1.sh ##a1.sh设置了+i特殊属性,不能修改内容

bash: test/a1.sh: Permission denied

[user3@centos7 data]$ echo magedu >test/a4.sh ##a4.sh没有设置,可以修改内容

[user3@centos7 data]$ cat test/a4.sh

magedu

#设置acl权限,使得user3不能访问test目录及其下所有文件

[root@centos7 data]# setfacl -m u:user3:- test

[root@centos7 data]# getfacl test

# file: test

# owner: user1

# group: user1

# flags: --t

user::rwx

user:user3:---

group::rwx

mask::rwx

other::r-x

[root@centos7 data]# su user3

[user3@centos7 data]$ ll test

ls: cannot open directory test: Permission denied

[user3@centos7 data]$ cat test/a4.sh ##a4.sh文件不能访问了

cat: test/a4.sh: Permission denied

#5)清理/data/test目录及其下所有文件的acl权限

[root@centos7 data]# setfacl -Rb test

[root@centos7 data]# getfacl test

# file: test

# owner: user1

# group: user1

# flags: --t

user::rwx

group::rwx

other::r-x

[root@centos7 data]# su user3

[user3@centos7 data]$ echo user3 >>test/a4.sh

[user3@centos7 data]$ cat test/a4.sh

magedu

user3

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。