Linux用户&组

基础知识

  • Linux用户
    • 管理员: root 0 (UID)
    • 普通用户:1-65535
      • 系统用户:1-499/1-999
      • 登录用户: 500+ / 1000+
  • Linux组
    • 管理员组: root 0
    • 普通组:1-65535
      • 系统组:1-499/1-999
      • 登录用户组:500+ / 1000+
    • 组类型:
      • 基本组–主组: 组名会和用户名相同,且仅包含一个用户的组–私有组
      • 附加组–额外组:一个用户可以属于多个附加组

Linux安全上下文

  • 运行中的程序: 进程
  • 进程能够访问的所有资源的权限在于进程发起者的用户身份

用户和组相关的配置文件

  • /etc/passwd : 用户及其属性信息(用户名称,用户ID,基本组ID等等)

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

  • /etc/shadow: 用户密码及其属性信息

  • /etc/gshadow: 组密码及其属性信息

  • 配置文件/etc/passwd:
    root:x:0:0:root:/root:/bin/bash
    username:password:UID:GID:GECOS(用户注释信息):home directory:shell

  • 配置文件/etc/group
    root:x:0:gname:password:GID:user_list

  • 配置文件/etc/shadow
    root:xxxx::0:99999:7:::

    登录名:加密密码:最近一次更改密码的日期:密码的最小使用期限:密码的最大使用期限:密码的警告时间段:密码的禁用日期:账户过期日期:保留字段

用户管理命令

  • useradd命令:创建用户
    [root@test ~]# useradd --help
    Usage: useradd [options] LOGIN

    常用选项:

    • -u: 指定uid

    • -g:指定gid

    • -c:指定用户注释信息

    • -d:指定家目录

    • -s:指定shell类型(默认是/bin/bash)

    • -G:指定附加组

    • -r:指定为系统用户

    • -M:不创建家目录

    默认设置:

    1
    2
    [root@test ~]# useradd zhangsan
    zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

    创建用户的默认配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@test ~]# cat /etc/default/useradd 
    useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    1
    2
    [root@test ~]# useradd -u 2000  -c "this is lisi" -d /home/ll lisi
    lisi:x:2000:2000:this is lisi:/home/ll:/bin/bash
  • userdel命令:删除用户
    常用选项:

    • -r:remove home directory and mail spool 删除用户家目录和邮件信息
  • usermod命令:编辑用户信息,
    常用选项:

    • -G:将用户添加到附加组中
    • -dm:移动用户新登录目录(默认情况会登录到自己的家目录下)
    • -L: 锁定用户
    • -U: 解锁用户
    • 其他选项与useradd基本类似
  • passwd命令:编辑用户密码
    常用选项:

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

    • -x maxdays:指定最大使用期限

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

    • -i Inactivedays: 非活动期限

    • –stdin: 从标准输入接收用户密码

      1
      2
      3
      [root@test ~]# echo "111111" | passwd --stdin zhangsan
      Changing password for user zhangsan.
      passwd: all authentication tokens updated successfully.

      案例1:创建用户gentoo、附加组为distro和linux,默认shell为/bin/csh,注释信息为“Gentoo Distribution”
      [root@test ~]# useradd -G linux,distro -c "Gentoo Distribution" -s /bin/csh gentoo

组管理命令:

  • groupadd命令:创建组
    常用选项:

    • -g: 指定gid
    • -r: 指定为系统组
    • -p, –password PASSWORD use this encrypted password for the new group

    [root@test ~]# groupadd -g 2000 -r linux

  • groupdel命令:删除组
    常用选项:

    • -r, –remove remove home directory and mail spool
    • -f, –force force some actions that would fail otherwise
  • groupmod命令:编辑组信息
    常用选项:

    • -g, –gid GID change the group ID to GID 指定GID
    • -n, –new-name NEW_GROUP change the name to NEW_GROUP 修改组名称
    • -p, –password PASSWORD change the password to this (encrypted) 修改组密码
  • gpasswd命令:编辑组密码
    常用选项:

    • -a, –add USER add USER to GROUP 添加用户到某个组中
    • -d, –delete USER remove USER from GROUP 移除用户从某个组
    • -r, –delete-password remove the GROUP’s password 删除组密码
    • -M, –members USER,… set the list of members of GROUP 设置组列表
    • -A, –administrators ADMIN,… set the list of administrators for GROUP设置组中管理员

用户/组相关命令

  • id命令:
    [root@test ~]# id --help
    Usage: id [OPTION]… [USER]

    常用选项:

    • -Z, –context print only the security context of the current user 只输出当前用户的安全上下文

    • -g, –group print only the effective group ID 只输出主组ID

    • -G, –groups print all group IDs 输出所有组ID

    • -n, –name print a name instead of a number, for -ugG 输出是名字代替ID号

    • -r, –real print the real ID instead of the effective ID, with -ugG 输出真实ID号

    • -u, –user print only the effective user ID

    1
    2
    [root@test ~]# id zhangsan
    uid=1000(zhangsan) gid=1000(zhangsan) groups=1000(zhangsan),0(root)
  • su命令:切换用户或提权
    常用的切换方式:

    • su username : 切换用户,不读取用户配置信息

    • su - username: 切换用户,读取用户配置信息(完全切换)

    • su [-] username -c "Command": 切换用户执行命令

      [zhangsan@test ~]$ su root -c "cat /etc/shadow

login.defs

useradd参照文件
创建用户时对用户的一些限制,对root用户无效

1
2
3
4
5
6
7
8
9
10
[root@test ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
CREATE_HOME yes
ENCRYPT_METHOD SHA512
[root@test ~]# vim /etc/default/useradd
SHELL=/bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
[root@test ~]# chage -h
用法:chage [选项] 登录
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
1
2
3
4
5
[root@test ~]# useradd user01
[root@test ~]# echo 123456 |passwd --stdin user01
更改用户 user01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@test ~]# chage -d 0 user01 # 强制用户在下次登录的时候换密码

新建用户home 目录下的bash 开头的文件是从/etc/skel/ 中复制过去的

Linux权限管理

-rw-r--r--. 1 root root 128 Feb 6 06:39 1.txt

  • -: 文件类型;普通文件
  • rw-: 属主拥有的权限 – 读写权限
  • r–: 属组拥有的权限 – 只读权限
  • r–: other 拥有的权限 – 只读权限
  • 1: 链接引用数
  • root: 文件属主
  • root: 文件属组
  • 128: 文件大小

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

  • owner : 属主 u
  • group : 属组 g
  • other :其他 o

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

  • r: readable 可读
  • w:writeable 可写
  • x:eXcutable 可执行

文件的权限建立在r权限之上,目录的权限建立在x权限之上

  • 文件
    • r:可以使用文件查看类工具获取其内容(4)
    • w:可以修改其内容(2)
    • x:可以把此文件提交给内核启动为一个进程(1)
  • 目录:
    • r: 可以使用ls查看目录中的文件列表
    • w: 可以在此目录创建或删除文件
    • x: 可以cd到此目录中

12Lh28.jpg

权限相关命令

  • chmod命令: 设置文件权限
    [root@test ~]# chmod --help
    Usage: chmod [OPTION]… MODE[,MODE]… FILE…

    常用选项:

    • -R: 递归修改

    • MODE

      • u=[rwx] : 设置属主权限
      • g=[rwx] : 设置属组权限
      • o=[rwx] : 设置其他权限
    • a=[rwx] : 设置所有人的权限

  • 方式1:

    1
    2
    3
    [root@test ~]# chmod u=rwx,g=rw,o=rx hello 
    [root@test ~]# ll hello
    -rwxrw-r-x. 1 root root 1 Feb 6 02:50 hello
  • 方式2:

    chmod [1-7][1-7][1-7] filename
    r:4 w:2 x:1

    1
    2
    [root@test ~]# chmod 644 hello
    -rw-r--r--. 1 root root 1 Feb 6 02:50 hello
  • chown命令:改变文件属主和属组

    [root@test ~]# chown --help
    Usage: chown [OPTION]… [OWNER][:[GROUP]] FILE…

    常用选项:

    • -R: 递归修改
    • [OWNER] 指定属主
    • [GROUP] 指定属组
    1
    2
    3
    [root@test ~]# chown wangwu:wangwu hello 	
    [root@test ~]# ll hello
    -rw-r--r--. 1 wangwu wangwu 1 Feb 6 02:50 hello
  • chgrp命令:修改属组

    [root@test ~]# chgrp --help
    Usage: chgrp [OPTION]… GROUP FILE…
    常用参数:

    • -R:递归处理
    • GROUP 指定的是属组
    • –reference=RFILE :以参考文件的属主数组来设定
  • umask:文件或者目录的遮掩码: 当用户创建文件或者目录的时候的默认权限

    1
    2
    [root@test ~]# umask 
    0022

    [root@test ~]# umask 0042 设定umask值

    FILE: 666-umask值(通常来说文件预设没有x权限)
    DIR: 777 - umask值

    查看umask: umask

  • chattr

    • +i 不得任意改动文件或目录

    • [root@test  ~]# lsattr file2
      ---------------- file2
      [root@test  ~]# chattr +a file2
      [root@test  ~]# lsattr file2
      -----a---------- file2
      [root@test  ~]# man chattr
      ----------
      ATTRIBUTES(属性)
      当修改设置了'A'属性的文件时,它的atime记录不会改变.
      这可以在笔记本电脑系统中避免某些磁盘I/O处理.
      设置了`a'属性的文件只能在添加模式下打开用于写入. 只有超级用户可以设置或清除该属性.
      设置了`c'属性的文件在磁盘上由内核自动进行压缩处理.
      从该文件读取时返回的是未压缩的数据.
      对该文件的一次写入会在保存它们到磁盘之前进行数据压缩.
      设置了`d'属性的文件不能对其运行 dump(8) 程序进行备份.
      设置了`i'属性的文件不能进行修改:你既不能删除它,也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据.只有超级用户可以设置或清除该属性.
      当删除设置了`s'属性的文件时,将对其数据块清零 并写回到磁盘上.
      当修改设置了`S'属性的文件时, 修改会同步写入到磁盘上;这与
      应用
      到文件子系统上的`sync'挂载选项有相同的效果.
      当删除设置了`u'属性的文件时, 将会保存其内容. 这使得用户可以请求恢复被删除的文件.
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12

      # Linux特殊权限

      文件的特殊权限:SUID SGID SBIT

      ## SUID

      借出程序所有者的权限(4)

      ```sh
      [root@test ~]# ll /usr/bin/passwd
      -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
      s:程序所有者有x权限

S:程序所有者没有x权限

案例:

passwd命令:修改用户密码 ,需要修改/etc/shadow文件

1
2
3
4
5
[root@test ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1037 Feb 7 07:56 /etc/passwd

[root@test ~]# ll /etc/shadow
----------. 1 root root 797 Feb 7 07:56 /etc/shadow

根据权限可以得知同一用户或其他人都可以调用该命令

问题:

  1. /etc/passwd文件仅仅root用户拥有w权限,其他用户没有
  2. 其他用户虽然可以调用passwd命令,但是无法写入到/etc/passwd文件

SUID权限作用: 其他用户没有权限修改/etc/passwd文件,但是root用户可以将
w权限赋予给其他用户去修改/etc/passwd命令

注意

  1. SUID权限仅仅对二进制程序有效
  2. 执行者必须有用x权限
  3. 仅在本程序中拥有修改权限
  4. 属主拥有s权限,即可将自己的权限暂时借由他人使用,前提是要拥有x权限

SGID

借出用户组的权限 (2)

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# ll /home/
total 0
drwx------. 2 lisi lisi 62 Aug 5 09:51 lisi
drwx------. 2 zhangsan zhangsan 62 Aug 5 09:51 zhangsan
[root@localhost ~]# chmod 2770 /home/zhangsan
[root@localhost ~]# ll -d /home/zhangsan
drwxrws---. 2 zhangsan zhangsan 62 Aug 5 09:51 /home/zhangsan
[root@localhost ~]# usermod -aG zhangsan lisi
[root@localhost ~]# su lisi
[lisi@localhost root]$ cd /home/lisi/
[lisi@localhost ~]$ touch 1.txt
[lisi@localhost ~]$ ll
total 0
-rw-rw-r--. 1 lisi lisi 0 Aug 5 09:56 1.txt
[lisi@localhost ~]$ cd /home/zhangsan
[lisi@localhost zhangsan]$ touch 1.txt
[lisi@localhost zhangsan]$ ll
total 0
-rw-rw-r--. 1 lisi zhangsan 0 Aug 5 09:57 1.txt

lisi用户在SGID目录创建文件的属主为zhangsan(该目录的所属组)

1
2
3
4
5
都是test2做的事情
[root@test ~]# ll /home/test1/1.txt
-rw-rw-r--. 1 test2 test1 0 Feb 8 02:00 /home/test1/1.txt
[root@test ~]# ll /home/test2/1.txt
-rw-rw-r--. 1 test2 test2 0 Feb 8 01:59 /home/test2/1.txt

这种权限特性可以在同一个用户组的多个用户拥有共同的目录,在创建文件时该用户组的所有用户具有相同的权限操作,同一个属组中的用户在拥有SGID权限的目录下创建文件,属组都是该目录的所属组

注意:

  • SGID对目录

    • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
    • 使用者在此目录下的群组将会变成该目录的群组
    • 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
  • SGID对文件

    • SGID 对二进制可执行文件有效
    • 程式执行者对于该文件来说,需具备 x 的权限
    • 执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)

Sticky

对目录有效 (1)

1
2
[root@test ~]# ll -d /tmp/
drwxrwxrwt. 8 root root 172 Feb 8 01:16 /tmp/

注意:

  1. 当用户对此目录具有w|x权限时,及拥有写入权限
  2. 用户在此目录创建文件,只有自己和root用户有权限删除
  3. 用户不允许对其他用户进行任何操作

设置特殊权限

1
2
3
4
5
6
7
chmod u+s file
chmod g+s dir
chmod o+t dir
chmod 4777 file
chmod 7777 file
chmod 2770 dir
chmod 3770 dir

Linux ACL权限

ACL 访问控制列表; 主要目的是在提供的传统的owner group w x r 权限之外的细部权限设定

ACL 可以针对某一个使用者,某一个文件或者目录来设定rwx权限,对于需要特殊权限的使用状态非常有帮助

setfacl 命令

设定权限

1
2
3
[root@test tmp]# setfacl --help 
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

常用选项:

  • -m : 更改acl设定参数
  • -x :删除acl设定参数
  • -b :移除所有的acl设定参数
  • -R :递归添加acl设定参数
  • -d : 添加默认acl设定参数

1WBNyF.png

删除用户权限: setfacl -x u:username file
删除组权限: setfacl -x g:groupname file
删除整个acl权限: setfacl -b file

实例1 针对用户的设定方式:
设定规范:u:username:power
1.设定user对testfile有rwx权限
setfacl -m u:user:rwx testfile
2.设定user对testdirectory目录下所有文件有rwx权限
setfacl -R -m u:user:rwx testdirectory
3.去掉user对testdirectory的x权限
setfacl -m u:user:rw- testdirectory
4.去掉所有acl权限
setfacl -b
5.为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
setfacl -d -m u:user:rwx testdirectory

实例2: 针对用户组的设定方式

设定规范:g:groupname:power

给acl_test1文件添加mygropu1组rx权限设定

1
2
3
4
5
6
7
8
9
10
11
[root@study ~]# setfacl -m g:mygroup1:rx acl_test1 
[root@study ~]# getfacl acl_test1
file: acl_test1
owner: root
group: root
user::rwx
user:vbird1:rx
group::r--
group:mygroup1:rx # 组权限设定
mask::rx
other::r--

getfacl命令

查看acl权限设定

1
2
3
4
5
6
7
8
9
10
[root@test tmp]# getfacl testfile 
# file: testfile
# owner: root
# group: root
user::rw-
user:user:rwx # 针对user用户具有rwx权限
group::r--
group:group1:rw- # 针对group1组具有rw权限
mask::rwx
other::r-- # 如果没有其他设定 默认属于other

mask

用于临时降低用户或组(除属主和其他人)的权限
mask决定了他们的最高权限
建议:为了方便管理文件权限,其他人的权限置为空

1
2
3
4
5
6
7
8
9
10
[root@test ~]# setfacl -m o::- file1
[root@test ~]# setfacl -m m::--- file1
[root@test ~]# getfacl file1
# file: file1
# owner: centos
# group: it
user::rwgroup::
r-- #effective:---
mask::---
other::---

default

一般用于目录中,默认权限独立于该目录本身的权限,规定了在该目录中创建的文件的默认ACL权限。
要求:希望centos能够对/home 以及以后在/home 下新建的文件有读、写、执行权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@test ~]# setfacl -m u:centos:rwx /home
[root@test ~]# setfacl -m d:u:centos:rwx /home
[root@test ~]# getfacl /home
getfacl: Removing leading '/' from absolute path names
# file: home
# owner: root
# group: root
user::rwx
user:centos:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:centos:rwx
default:group::r-x
default:mask::rwx
default:other::r-x