Linux中的文件访问控制

在Unix系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用【SUID,SGID,SBIT】,再搭配拥有者与所属群组管理权限范围。

 SUID:

  1、只对二进制可执行程序有效,不能为普通文件;

  2、对程序文件必须拥有执行权限;

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

  4、SUID设置在目录上无意义

权限设定:chmodu +s FILE... chmodu -s FILE...

 SGID:

  可以应用在二进制文件和作用在文件夹下,当作用在二进制文件下时,作用和SUID相似,只不过SUID是把发起者临时变为文件的所有者,

  而SGID是把进程的发起者变成源程序文件的属组

  默认情况下,用户创建文件时,其属组为此用户所属的主组,当SGID作用在目录下时,则对此目录有写权限的用户在此目录中创建的文件所属的组

  为此目录的属组,通常用于创建一个协作目录。

权限设定:chmodg +s FILE... chmodg -s FILE...

 Sticky【SBIT】:

  默认情况下用户可以删除具有写权限的目录中的任何文件,无论该文件的权限或拥有权,如果在目录设置Sticky位,只有文件的所有者或root可以删除该文件,Sticky位是作用在文件夹的,设置在文件上毫无意义。

权限设定:chmodo +t DIR...chmodo -t  DIR...

可以使用chmod命令、setfacl命令变更文件或目录的权限,设置时采用文字或数字代号皆可。

可以使用chown命令变更文件或目录的拥有者及所属群组。

注意:符号链接的权限无法变更,如果对符号链接修改权限,其改变会作用在被链接的原始文件

权限位映射 SUID: user,占据属主的执行权限位

  s:属主拥有x权限

  S:属主没有x权限

SGID: group,占据属组的执行权限位

  s: group拥有x权限

  S:group没有x权限

Sticky: other,占据other的执行权限位

  t:other拥有x权限

  T:other没有x权限

用户user

令牌token,identity
Linux用户Username/UID
管理员root / 0
普通用户1-60000 自动分配
系统用户1-499, 1-999 (CentOS7)
对守护进程获取资源进行权限分配
登录用户500+, 1000+(CentOS7)

组group

Linux组:Groupname/GID

管理员组:root, 0

普通组:

系统组:1-499, 1-999(CENTOS7)

普通组:500+, 1000+(CENTOS7)

Linux安全上下文

  运行中的程序:进程 (process)

  以进程发起者的身份运行:

  root: /bin/cat

  mage: /bin/cat

进程所能够访问资源的权限取决于进程的运行者的身份

用户和组的配置文件

  Linux用户和组的主要配置文件:

    /etc/passwd:用户及其属性信息(名称、UID、主组ID等)

    /etc/group:组及其属性信息

    /etc/shadow:用户密码及其相关属性

    /etc/gshadow:组密码及其相关属性

passwd文件格式

login name:登录用名(wang)

passwd:密码 (x)

UID:用户身份编号 (1000)

GID:登录默认所在组编号 (1000)

GECOS:用户全名或注释

home directory:用户主目录 (/home/wang)

shell:用户默认使用shell (/bin/bash)

shadow文件格式

  登录用名

  用户密码:一般用sha512加密

  从1970年1月1日起到密码最近一次被更改的时间

  密码再过几天可以被变更(0表示随时可被变更)

  密码再过几天必须被变更(99999表示永不过期)

  密码过期前几天系统提醒用户(默认为一周)

  密码过期几天后帐号会被锁定

  从1970年1月1日算起,多少天后帐号失效

【更改加密算法: authconfig –passalgo=sha256 –update】

group文件格式

  群组名称:就是群组名称

  群组密码:通常不需要设定,密码是被记录在 /etc/gshadow

  GID:就是群组的 ID

  以当前组为附加组的用户列表(分隔符为逗号)

gshadow文件格式

  群组名称:就是群组名称

  群组密码:xxxxx

  组管理员列表:组管理员的列表,更改组密码和成员

  以当前组为附加组的用户列表:(分隔符为逗号)

用户和组管理命令用户管理命令useradd

useradd [options] LOGIN-u UID-o 配合-u 选项,不检查UID的唯一性-g GID:指明用户所属基本组,可为组名,也可以GID-c "COMMENT":用户的注释信息-d HOME_DIR: 以指定的路径(不存在)为家目录-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在-N 不创建私用组做主组,使用users组做主组-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000-m 创建家目录,用于系统用户-M 不创建家目录,用于非系统用户

usermod

usermod [OPTION] login-u UID: 新UID-g GID: 新主组-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项-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: 设定非活动期限

userdel

userdel [OPTION]... login-r: 删除用户家目录-f:强制删除用户

组帐号维护命令groupadd

groupadd [OPTION]... group_name-g GID: 指明GID号;[GID_MIN, GID_MAX]-r: 创建系统组CentOS 6: ID<500CentOS 7: ID<1000

groupmod

组属性修改:groupmodgroupmod [OPTION]... group-n group_name: 新名字-g GID: 新的GID

groupdel

组删除:groupdelgroupdel GROUP

查看用户相关的ID信息

id [OPTION]... [USER]-u: 显示UID-g: 显示GID-G: 显示用户所属的组的ID-n: 显示名称,需配合ugG使用

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

su [options...] [-] [user [args...]]切换用户的方式:su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换root su至其他用户无须密码;非root用户切换时需要密码换个身份执行命令:su [-] UserName -c 'COMMAND'选项:-l --loginsu -l UserName 相当于 su - UserName

设置密码

passwd [OPTIONS] UserName: 修改指定用户的密码常用选项:-d:删除指定用户密码-l:锁定指定用户-u:解锁指定用户-e:强制用户下次登录修改密码-f:强制操作-n mindays:指定最短使用期限-x maxdays:最大使用期限-w warndays:提前多少天开始警告-i inactivedays:非活动期限--stdin:从标准输入接收用户密码echo "PASSWORD" | passwd --stdin USERNAME

修改用户密码策略

chage [OPTION]... LOGIN-d LAST_DAY 上一次更改的日期-E --expiredate EXPIRE_DATE  账号到期的日期-I --inactive INACTIVE  停滞时期-m --mindays MIN_DAYS   密码可更改的最小天数-M --maxdays MAX_DAYS  密码保持有效期的最大天数-W --warndays WARN_DAYS  –l 显示密码策略##示例:chage -d 0 tom  # 下一次登录强制重设密码chage -m 0 –M 42 –W 14 –I 7 tomchage -E 2016-09-10 tom

更改组密码

组密码:gpasswdgpasswd [OPTION] GROUP -a user 将user添加至指定组中 -d user 从指定组中移除用户user -A user1,user2,... 设置有管理权限的用户列表newgrp命令:临时切换主组 如果用户本不属于此组,则需要组密码

更改和查看组成员

groupmems [options] [action]options: -g, --group groupname 更改为指定组 (只有root)Actions: -a, --add username 指定用户加入组 -d, --delete username 从组中删除用户 -p, --purge 从组中清除所有成员 -l, --list 显示组成员列表groups [OPTION].[USERNAME]... 查看用户所属组列表

文件权限

文件属性操作

chown 设置文件的所有者

chgrp 设置文件的属组信息

修改文件的属主和属组

修改文件的属主【所属用户】:chown chown [OPTION]... [OWNER][:[GROUP]] FILE...  用法:   OWNER   OWNER:GROUP   :GROUP命令中的冒号可用.替换·-R: 递归·chown [OPTION]... --reference=RFILE FILE...修改文件的属组:chgrp·chgrp [OPTION]... GROUP FILE...·chgrp [OPTION]... --reference=RFILE FILE...-R 递归

文件权限

文件的权限主要针对三类对象进行定义·owner: 属主, u·group: 属组, g·other: 其他, o每个文件针对每类访问者都定义了三种权限r:-->Readablew:--> Writablex: -->eXcutable

文件:

r: 可使用文件查看类工具获取其内容

w: 可修改其内容

x: 可以把此文件提请内核启动为一个进程

目录:

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

w: 可在此目录中创建文件,也可删除此目录中的文件

x: 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录

X:只给目录x权限,不给文件x权限

文件权限操作

八进制数字

000 ===0

–x 001 ===1

-w- 010 ===2

-wx 011 ===3

r– 100 ===4

r-x 101 ===5

rw- 110 ===6

rwx 111 === 7
例如:

640: rw-r—–

755: rwxr-xr-x

修改文件权限

`chmod` [OPTION]... OCTAL-MODE FILE...-R: 递归修改权限chmod [OPTION]... MODE[,MODE]... FILE...MODE:修改一类用户的所有权限:u= g= o= ug= a= u=,g=修改一类用户某位或某些位权限u+ u- g+ g- o+ o- a+ a- + -chmod [OPTION]... --reference=RFILE FILE...参考RFILE文件的权限,将FILE的修改为同RFILE

权限设置示例

chgrp sales testfile # chgrp:变更用户或目录的所属组群 这里是将testfile目录的属主改为sales

chown root:admins testfile # chown:修改文件权限 这里是将testfile文件属主改为root 组改为 admin

chmod u+wx,g-r,o=rx file # chmod 该权限,这里将属主【+wx】权限,组【-r】权限,其他【rx】权限

chmod -R g+rwX /testdir

chmod 600 file

chown mage testfile

权限位映射

SUID: user,占据属主的执行权限位

  • s:属主拥有x权限
  • S:属主没有x权限

SGID: group,占据属组的执行权限位

  • s: group拥有x权限
  • S:group没有x权限

Sticky: other,占据other的执行权限位

  • t:other拥有x权限
  • T:other没有x权限

设定文件特定属性

 chattr +i # 不能删除,改名,更改 chattr +a # 只能追加内容 lsattr    # 显示特定属性

访问控制列表ACL

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

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

  CentOS7 默认创建的xfs和ext4文件系统具有ACL功能

  CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

  tune2fs –o acl /dev/sdb1

  mount –o acl /dev/sdb1 /mnt/test

ACL生效顺序:所有者,自定义用户,自定义组,其他人

为多用户或者组的文件和目录赋予访问权限rwx

mount -o acl /directorygetfacl file |directorysetfacl -m u:wang:rwx file|directorysetfacl -Rm g:sales:rwX directorysetfacl -M file.acl file|directorysetfacl -m g:salesgroup:rw file| directorysetfacl -m d:u:wang:rx directorysetfacl -x u:wang file |directorysetfacl -X file.acl directory 

mount:挂载Linux系统之外的文件

  -v:显示版本

getfacl:查看文件的访问控制列表

  1. setfacl:设置文件的访问控制列表
  2. etfacl u:用户名:权限 指定目录或文件

取消制定用户的acl权限

  1. setfacl -x u:用户名 制定目录或文件

移除指定目录全部的acl权限

  1. setfacl -b test/

ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限

getfacl 可看到特殊权限:flags

通过ACL赋予目录默认x权限,目录内文件也不会继承x权限

base ACL 不能删除

setfacl -k dir 删除默认ACL权限

setfacl –b file1清除所有ACL权限

getfacl file1 | setfacl –set-file=- file2 复制file1的acl权限给file2

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

Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file

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

备份和恢复ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

getfacl -R /tmp/dir1 > acl.txt

setfacl -R -b /tmp/dir1

setfacl -R –set-file=acl.txt /tmp/dir1

setfacl –restore acl.txt

getfacl -R /tmp/dir1

本文来自博客园,作者:link-零,转载请注明原文链接:https://www.cnblogs.com/e-link/p/16803241.html❤❤❤