用户组和权限管理

jpeg

用户和组

用户相关内容介绍

  • 资源分派:
    ♦ Authentication:认证
    ♦ Authorization:授权
    ♦ Accouting|Audition:审计

  • 用户user
    ♦ 令牌token,identity
    ♦ Linux用户:Username/UID
    ♦ 管理员:root, 0
    ♦ 用户类型
     ➢ 系统用户:1-499, 1-999 (CentOS7)
        ● 对守护进程获取资源进行权限分配
     ➢ 登录用户:500+, 1000+(CentOS7)
        ● 交互式登录

  • 组group
    ♦ Linux组:Groupname/GID
    ♦ 管理员组:root, 0
    ♦ 组分类:
     ➢ 系统组:1-499, 1-999(CENTOS7)
     ➢ 普通组:500+, 1000+(CENTOS7)

  • Linux组的类别
    ♦ 用户的主要组(primary group)
     ➢ 用户必须属于一个且只有一个主组
     ➢ 组名同用户名,且仅包含一个用户,私有组
    ♦ 用户的附加组(supplementary group)
     ➢ 一个用户可以属于零个或多个辅助组

用户相关配置文件

/etc/passwd

  • 用户及其属性信息(名称、UID、主组ID等)
    ♦ whatis passwd
    ♦ man
    getent passwd fang
    getent shadow wang
    ♦ pwck 检测/etc/passwd 文件格式
    ♦ 示例

    cat /etc/passwd | head -1
    root:x:0:0:root:/root:/bin/bash
  • login name:登录用名(root)

  • passwd:密码 (x)

  • UID:用户身份编号 (0)
    ♦ root不一定为管理员,但UID为0的一定是管理员

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

  • GECOS:用户全名或注释

  • chfn
    ♦ chfn fang 创建
    ♦ finger fang 查看

  • home directory:用户主目录 (/root)

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

/etc/shadow

  • 用户密码及其相关属性

  • 默认配置文件
    ♦ 示例

    cat /etc/shadow | head -n1
    root:$6$gyjqlS03YxzP24zx$SxxpFy5f1hveOnmOexnNUjo8x5UTQa4LedfsmLNGjoIhqaaxfBLKAHsWKC64IbtzpXRLZA5gpy8kq4hVHAo7G.:17730:0:99999:7:::

    ♦ 详解
       ➢ 登录用名
       ➢ 用户密码:一般用sha512加密
       ➢ 从1970年1月1日起到密码最近一次被更改的时间
       ➢ 密码再过几天可以被变更(0表示随时可被变更)
       ➢ 密码最大的有效期
       ➢ 密码过期前几天系统提醒用户(默认为一周)
       ➢ 密码过期后宽限期
       ➢ 从1970年1月1日算起,多少天后帐号失效,账号有效期
       ➢ 保留
       ➢ chage fang 修改密码时长
    ♦ 示图
    jpeg
    /etc/default/useradd 增加用户、默认设置
    /etc/login.defs 可以修改密码有效期等时长

组相关配置文件

/etc/group

  • 组及其属性信息
    ♦ 示例

    cat /etc/group
    root:x:0:

    ♦ 群组名称:就是群组名称
    ♦ 群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
    ♦ GID:就是群组的 ID
    ♦ 以当前组为附加组的用户列表(分隔符为逗号)
    ♦ grpck 检测 /etc/group 文件格式

/etc/gshadow

  • 组密码及其相关属性
    ♦ 示例

    cat /etc/gshadow
    root:组密码:组管理员:附加组成员

    ♦ 群组名称:就是群组名称
    ♦ 群组密码:
    ♦ 组管理员列表:组管理员的列表,更改组密码和成员
    ♦ 以当前组为附加组的用户列表:(分隔符为逗号)

加密介绍

  • 加密:明文--> 密文
  • 解密:密文--> 明文
哈希算法
  • 原文不同,密文必不同
  • 相同算法定长输出,获得密文不可逆推出原始数据
  • 雪崩效应:初始条件的微小改变,引起结果的巨大改变
  • 加密算法
    ♦ md5: message digest, 128bits
    ♦ sha1: secure hash algorithm, 160bits
    ♦ sha224: 224bits
    ♦ sha256: 256bits
    ♦ sha384: 384bits
    ♦ sha512: 512bits
  • 更改加密算法:
    ♦ authconfig --passalgo=sha256 --update
  • 密码设置
    ♦ 密码的复杂性策略
    ♦ 使用数字、大写字母、小写字母及特殊字符中至少3种
    ♦ 足够长
    ♦ 使用随机密码
    ♦ 定期更换,不要使用最近曾经使用过的密码

用户管理命令

useradd

  • 用户创建: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 不创建家目录,用于非系统用户
  • 默认值设定:/etc/default/useradd文件中
  • 显示或更改默认设置
    ♦ useradd -D
    ♦ useradd –D -s SHELL
    ♦ useradd –D –b BASE_DIR
    ♦ useradd –D –g GROUP
  • 删除用户家目录并恢复
    ♦ rm -rf /home/fang
    ♦ mkdir -pv /home/fang
    ♦ 复制/etc/skel/下的文件到家目录
     ➢ 方法一 cp -r /etc/skel/. /home/fang 复制整个目录下的所有文件
     ➢ 方法二 cp -r /etc/skel/.[^.]* /home/fang 只复制目录下的隐藏文件
    ♦ chown -R fang.fang /home/fang ; chmod 700 /home/fang

id

  • 查看用户相关信息:id
  • id [OPTION]… [USER]
    ♦ -u: 显示UID
    ♦ -g: 显示GID
    ♦ -G: 显示用户所属的组的ID
    ♦ -n: 显示名称,需配合ugG使用

passwd

  • 设置密码:passwd
  • 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 2018-09-10 tom

usermod

  • 属性修改: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: 设定非活动期限
  • 示例
    usermod -G test fang 把用户增加到组

su

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

userdel

  • 用户删除:userdel
  • userdel [OPTION]… login
    ♦ -r: 删除用户家目录

组管理命令

groupadd

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

gpasswd

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

groupmod

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

groupdel

  • 组删除:groupdel
    ♦ groupdel GROUP

groupmems

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

练习

  1. 创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为
    “Gentoo Distribution”

    useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
  2. 创建下面的用户、组和组成员关系
    ♦ 名字为webs 的组
    ♦ 用户nginx 使用webs 作为附属组
    ♦ 用户varnish,也使用webs 作为附属组
    ♦ 用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,
    mysql密码都是fang

    groupadd webs
    useradd -G webs nginx
    useradd -G webs varnish
    useradd -r mysql
    echo fang | passwd --stdin nginx
    echo fang | passwd --stdin varnish
    echo fang | passwd --stdin mysql

文件权限

文件属性及普通权限

  • 文件属性
    jpeg

  • chown 设置文件的所有者
    ♦ chown [OPTION]… [OWNER][:[GROUP]] FILE…
    ♦ 用法
     ➢ OWNER
     ➢ OWNER:GROUP
     ➢ :GROUP
     ➢ 命令中的冒号可用.替换
     ➢ -R: 递归

  • chgrp 设置文件的属组信息
    ♦ chgrp [OPTION]… GROUP FILE…
    ♦ chgrp [OPTION]… --reference=RFILE FILE…
    ♦ -R 递归

  • 文件权限对象
    ♦ 匹配用户直接生效

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

  • 文件的权限主要针对三类对象进行定义
    ♦ owner: 属主, u
    ♦ group: 属组, g
    ♦ other: 其他, o

  • 每个文件针对每类访问者都定义了三种权限
    ♦ r: Readable
     ➢ 文件:可使用文件查看类工具获取其内容
     ➢ 目录: 可以使用ls查看此目录中文件列表
    ♦ w: Writable
     ➢ 文件:可修改其内容
     ➢ 目录:可在此目录中创建文件,也可删除此目录中的文件
    ♦ x: eXcutable
     ➢ 文件:可以把此文件提请内核启动为一个进程
     ➢ 目录:x: 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
     ➢ X:只给目录x权限,不给文件x权限

  • 文件权限操作

  • chmod 文件权限操作命令
    jpeg

  • chmod [OPTION]… OCTAL-MODE FILE…
    ♦ -R: 递归修改权限

  • chmod [OPTION]… MODE[,MODE]… FILE…
    ♦ 修改一类用户的所有权限:
     ➢ u= g= o= ug= a= u=,g=
    ♦ 修改一类用户某位或某些位权限
     ➢ u+ u- g+ g- o+ o- a+ a- + -

  • 示例

    chgrp sales testfile
    chown root:admins testfile
    chmod u+wx,g-r,o=rx
    chmod -R g+rwX /testdir
    chmod 600 file
    chown fang testfile
  • 文件默认权限

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

  • 新建FILE权限: 666-umask
    ♦ 如果所得结果某位存在执行(奇数)权限,则将其权限+1

  • 新建DIR权限: 777-umask

  • 非特权用户umask是 002

  • root的umask 是 022

  • umask: 查看

  • umask #: 设定
    ♦ umask 002

  • umask –S 模式方式显示

  • umask –p 输出可被调用

  • 全局设置: /etc/bashrc 用户设置:~ /.bashrc
    ♦ umask -p >> ~ /.bashrc

  • 文件权限总结
    对目录只有执行权限,可以进入到该目录,但不能看到文件名,如事先知道该目录下已存在的文件(有读权限)或者目录(有执行权限)可以进行复制操作
    对目录只有读权限,可以访问该目录下的文件名,但不能访问文件的原数据
    普通用户对文件有读权限,则可以复制该文件
    普通用户对目录有读、执行权限,则可以复制目录下可读的文件

练习

  1. 当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?

    答:能查看目录的元数据信息,不能进入目录,用ls命令能看到目录下的文件面,但不能查看文件的元数据信息。
  2. 当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?

    答:能查看目录的元数据信息,能进入目录,但查看不了目录里面的内容
  3. 当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

    答:可以查看file1的内容,不能修改和删除。
  4. 当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1
    是否可修改和删除?

    答:可以修改和删除file1文件,因没有读权限,所以没法用ls命令查看、也没法补全路径
  5. 复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所
    属组为apps组有读写权限,其他人无权限

    cp /etc/fstab /var/tmp/ ; chown tomcat:apps /var/tmp/fstab ; chmod 660 /var/tmp/fstab
  6. 误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性

    cp -r /etc/skel/ /home/git ; chmod 700 /home/git ; chown -R git:git /home/git

文件特殊权限

SUID

  • 作用对像:文件 SUID设置在目录上无意义
  • 启动为进程之后,其进程的属主为原程序文件的属主
  • SUID只对二进制可执行程序有效
  • 权限设定:
    ♦ chmod u+s FILE…
    ♦ chmod u-s FILE…

SGID

  • 作用对像:文件
    ♦ 启动为进程之后,其进程的属组为原程序文件的属组
    ♦ 权限设定:
     ➢ chmod g+s FILE…
     ➢ chmod g-s FILE…
  • 作用对像:目录
    ♦ 默认情况下,用户创建文件时,其属组为此用户所属的主组
    ♦ 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件
    所属的组为此目录的属组
    ♦ 通常用于创建一个协作目录
    ♦ 权限设定:
     ➢ chmod g+s DIR…
     ➢ chmod g-s DIR…

Sticky

  • 作用对像:目录
    ♦ 作用文件,没有意义
  • 具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限
    或拥有权
  • 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
  • 权限设定:
    ♦ chmod o+t DIR…
    ♦ chmod o-t DIR…

总结

  • suid:4
    ♦ 作用于二进制程序,功能:当用户执行此程序时,将继承此文件所有者的权限
  • sgid: 2
    ♦ 作用于二进制程序,功能:当用户执行此程序时,将继承此文件所有组的权限
    ♦ 作用于目录上,功能:当用户在目录建新文件时,新文件的所属组自动继承此目录的所属组
  • sticky:1
    ♦ 作用于目录上,功能:此目录中的文件,只能被所有者自已删除

chattr

  • chattr +i 不能删除,改名,更改
    ♦ chattr -i 取消特殊权限
  • chattr +a 只能追加内容
    ♦ 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生效顺序:所有者,自定义用户,自定义组,其他人
  • ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权
    限),而非传统的组权限

ACL使用

  • ACL:设置
    ♦ setfacl -m u:fang:rwx -R file|directory
    ♦ setfacl -m d:u:fang:rwx -R file|directory
  • ACL:查看
    ♦ getfacl file |directory
  • ACL:删除
    ♦ setfacl -k dir 删除默认ACL权限
    ♦ setfacl –b file1清除所有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

练习

  1. 在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:
    tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文
    件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹

    mkdir /testdir/dir -pv ; chown -R root:webs /testdir/dir; chmod 2750 -R /testdir/dir
    setfacl -m g:apps:rwx -R /testdir/dir
    setfacl -m g:dbs:rx -R /testdir/dir
  2. 备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除
    /testdir/dir中所有ACL权限,最后还原ACL权限

    #备份
    cd /testdir/ ; getfacl -R dir/ > /root/acl.txt
    #清除
    setfacl -b dir/
    #恢复
    setfacl -R --set-file=/opt/acl.txt dir/