linux中的用户、组和权限和ACL

  • linux中的用户、组和权限和ACL已关闭评论
  • 103 次浏览
  • A+
所属分类:linux技术
摘要

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


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文件格式

linux中的用户、组和权限和ACL

login name:登录用名(wang)

passwd:密码 (x)

UID:用户身份编号 (1000)

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

GECOS:用户全名或注释

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

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

shadow文件格式

linux中的用户、组和权限和ACL

  登录用名

  用户密码:一般用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<500 CentOS 7: ID<1000

groupmod

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

groupdel

组删除:groupdel groupdel 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 --login  su -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 tom chage -E 2016-09-10 tom

 更改组密码

组密码:gpasswd gpasswd [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]... 查看用户所属组列表

文件权限

linux中的用户、组和权限和ACL

文件属性操作

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:-->Readable w:--> Writable x: -->eXcutable

文件:

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

w: 可修改其内容

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

目录:

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

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

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

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

文件权限操作

linux中的用户、组和权限和ACL

八进制数字

--- 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 /directory getfacl file |directory setfacl -m u:wang:rwx file|directory setfacl -Rm g:sales:rwX directory  setfacl -M file.acl file|directory setfacl -m g:salesgroup:rw file| directory setfacl -m d:u:wang:rx directory  setfacl -x u:wang file |directory setfacl -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