Linux 用户组和权限管理

时间:2022-11-23 21:57:52


1. Linux的安全模型

1.1 安全3A

安全3A并不是Linux特有的概念,在很多领域都有3A的概念,比如微软、思科、华为等设备都有安全的概念;大致分为以下一个概念:

  • 认证(Authentication):即验证身份,主要是验证您是谁的功能。
  • 授权(Authorization):授权一般是验证身份后,所拥有的权限
  • 审计(Accouting|Audition):审计一般是起到监督作用,反馈一些存在的问题,比如安全审计,财务审计等等

1.2 用户user

令牌:
token,identity

Linux用户:
Username/UID

管理员
root,0 (需要注意的是,并不是叫root的用户名才是管理员,而是因为它的UID为0)

普通用户:
1-60000编号是自动分配的,但是如果我们认为指定用户编号的话是可以超过默认的分配阈值(60000),Linux用户分为系统用户和登录用户。
系统用户:1-499(CentOS6.X),1-999(CentOS7.X),对守护进程获取资源进行权限分配(给运行软件使用的用户,比如:"mysql","apache","hdfs"用户等等)
登录用户:500+(CentOS6.X),1000+(CentOS7.X),交互式登录(一般用来登录操作系统,比如liuxiao)


1.3 组group

Linux组:
Groupname/GID

管理员组:
root,0

普通组:
系统组:1-499(CentOS6.X),1-999(CentOS7.X)
普通组:500+(CentOS6.X),1000+(CentOS7.X)

Linux组的类别:
用户的主要组(primary group)
用户必须属于一个且只有一个主组
默认创建一个用户后会自动加入一个组名同用户名,且仅包含一个用户,我们也称为该用户的私有组。
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组

[gestep@gapfts_check data]$ id root
uid=0(root) gid=0(root) 组=0(root)
[gestep@gapfts_check data]$


1.4 用户和组的配置文件

Linuxt用户和组的主要配置文件:
/etc/passwd:
用户及其属性信息(名称、UID、主组ID等)
/etc/groupadd:
组及其属性信息
/etc/shadow:
用户密码及其属性
/etc/gshadow:
组密码及其属性


1.4.1 passwd文件格式如下:
passwd文件格式如下:
login name:登录用户名
passwd:密码
UID:用户身份编号
GID:登录默认所在组编号
GECOS:用户全名或注释
home directory:用户主目录
shell:用户默认使用shell


1.4.2 shadow文件格式
shadow文件格式
登录用户名
用户密码:一般使用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更( 0表示随时可以被变更)
密码再过几天必须被变更( 99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效


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


1.4.4 gshadow文件格式
gshdow文件格式
群组名称:就是群的名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号分隔


1.5 用户相关操作(对应/etc/passwd)

[gestep@gapfts_check ~]$ whatis passwd
sslpasswd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
[gestep@gapfts_check ~]$ man 1 passw
[gestep@gapfts_check ~]$ sudo useradd liuxiao         
[gestep@gapfts_check ~]$ tail -1 /etc/passwd
liuxiao:x:1002:1002::/home/liuxiao:/bin/bash
[gestep@gapfts_check ~]$ sudo chfn liuxiao #修改用户全名或注释
Changing finger information for liuxiao.
名称 []: liu
办公 []: bigdata
办公电话 []: 10086
住宅电话 []: 10010

Finger information changed.

[gestep@gapfts_check ~]$ tail -1 /etc/passwd
liuxiao:x:1002:1002:liu,bigdata,10086,10010:/home/liuxiao:/bin/bash
[gestep@gapfts_check ~]$


1.6 用户密码相关操作(对应/etc/shadow)

[gestep@gapfts_check ~]$ whatis shadow
shadow (3) - 加密密码文件工具函数
shadow (5) - 影子化了的密码文件
[gestep@gapfts_check ~]$ man 5 shadow
[gestep@gapfts_check ~]$ getent  passwd liuxiao           #发现密码不在/etc/passwd文件中             
liuxiao:x:1002:1002:liu,bigdata,10086,10010:/home/liuxiao:/bin/bash

[gestep@gapfts_check ~]$ sudo getent shadow liuxiao #CentOS7.X将秘方存在在了/etc/shadow文件中
liuxiao:$6$FKJ7PVq2$krQGsqronXNhN7PtIwfKiKc9ECz.93Igx2cxCc29CvLaUl7O9IK6oIokmwGpKfFFU6WHPf3NM0jKEsnceZVDH0:19036:0:99999:7:::

[gestep@gapfts_check ~]$ sudo pwunconv #我们这里使用该命令可以将"/etc/shadow"中存放的密码放入到"/etc/passwd"文件中
[gestep@gapfts_check ~]$ sudo getent passwd liuxiao #发现密码回到了/etc/passwd中
liuxiao:$6$FKJ7PVq2$krQGsqronXNhN7PtIwfKiKc9ECz.93Igx2cxCc29CvLaUl7O9IK6oIokmwGpKfFFU6WHPf3NM0jKEsnceZVDH0:1002:1002:liu,bigdata,10086,10010:/home/liuxiao:/bin/bash

[gestep@gapfts_check ~]$ sudo getent shadow liuxiao #此时查看/etc/shadow文件中发现乜有了
[gestep@gapfts_check ~]$

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo pwconv #将密码分开存放,即默认存放位置/etc/shadow中
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao #此时查看,密码回归
liuxiao:$6$FKJ7PVq2$krQGsqronXNhN7PtIwfKiKc9ECz.93Igx2cxCc29CvLaUl7O9IK6oIokmwGpKfFFU6WHPf3NM0jKEsnceZVDH0:19036:0:99999:7:::
[gestep@gapfts_check ~]$ sudo usermod -L liuxiao        #锁定用户
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao #锁定用户后,发现密码位上出现"!",它的出现就表示用户已被锁定
liuxiao:!$6$FKJ7PVq2$krQGsqronXNhN7PtIwfKiKc9ECz.93Igx2cxCc29CvLaUl7O9IK6oIokmwGpKfFFU6WHPf3NM0jKEsnceZVDH0:19036:0:99999:7:::
[gestep@gapfts_check ~]$ sudo passwd liuxiao #我们进行修改密码
更改用户 liuxiao 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao #密码修改后,发现用户已经被解锁
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:99999:7:::

[gestep@gapfts_check ~]$ sudo usermod -L liuxiao #锁定用户
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao
liuxiao:!$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:99999:7:::
[gestep@gapfts_check ~]$ sudo usermod -U liuxiao #解锁用户
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:99999:7:::
[gestep@gapfts_check ~]$ sudo getent  shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:99999:7:::
[gestep@gapfts_check ~]$ sudo chage -M 3 liuxiao #修改用户密码过期时间为3天
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:3:7:::
[gestep@gapfts_check ~]$ sudo getent  shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:3:7:::
[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo chage -I 5 liuxiao #指定密码过期后几天用户被锁定,我这里设置的是5天,如果在指定的3天内没有修改密码在5天后用户会被锁定,锁定用户就无法登录操作系统。
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:3:7:5::
[gestep@gapfts_check ~]$ sudo chage -E 365 liuxiao        #设置用户的有效天数,这里设置的是365天,但需要注意的是,它的起始时间是从1970年开始的
[gestep@gapfts_check ~]$ sudo getent shadow liuxiao
liuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:3:7:5:365:
[gestep@gapfts_check ~]$ passwd --help
用法: passwd [选项...] <帐号名称>
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root 用户)
-u, --unlock 解锁指名账户的密码(仅限 root 用户)
-e, --expire 终止指名帐户的密码(仅限 root 用户)
-f, --force 强制执行操作
-x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作)
-n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作)
-w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
-S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)

Help options:
-?, --help Show this help message
--usage Display brief usage message
[root@gapfts_check ~]# echo liuxiao | passwd --stdin liuxiao      #此命令只有root用户才能使用
更改用户 liuxiao 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@gapfts_check ~]# echo 123.com | passwd --stdin liuxiao &> /dev/null #生产环境修改密码方式
[root@gapfts_check ~]#
[root@gapfts_check ~]# sudo getent shadow liuxiao
liuxiao:$6$RkQ6NCuW$Srz.wRoL/OXn6MCM6mBf4QJim7d4ZRbnAmpwIuIBm4xyykrIhwPSYbOuch6Ju8AJ/eSDhcUlPE5no6TnxEB3.0:19036:0:3:7:5:365:
[root@gapfts_check ~]#
[root@gapfts_check ~]# passwd -l liuxiao #将用户锁定
锁定用户 liuxiao 的密码 。
passwd: 操作成功
[root@gapfts_check ~]# getent shadow liuxiao
liuxiao:!!$6$RkQ6NCuW$Srz.wRoL/OXn6MCM6mBf4QJim7d4ZRbnAmpwIuIBm4xyykrIhwPSYbOuch6Ju8AJ/eSDhcUlPE5no6TnxEB3.0:19036:0:3:7:5:365:

[root@gapfts_check ~]# passwd -u liuxiao
解锁用户 liuxiao 的密码。
passwd: 操作成功
[root@gapfts_check ~]#

[root@gapfts_check ~]# passwd -e liuxiao #将用户密码设置为不过期,下次登录必须更改密码才可以
正在终止用户 liuxiao 的密码。
passwd: 操作成功

[root@gapfts_check ~]# getent shadow liuxiao
liuxiao:$6$RkQ6NCuW$Srz.wRoL/OXn6MCM6mBf4QJim7d4ZRbnAmpwIuIBm4xyykrIhwPSYbOuch6Ju8AJ/eSDhcUlPE5no6TnxEB3.0:0:0:3:7:5:365:


1.7 用户组相关操作(对应/etc/group)

[gestep@gapfts_check ~]$ whereis group
group: /etc/group


1.8 用户组密码相关操作(/etc/gshadow)

[gestep@gapfts_check ~]$ whereis gshadow
gshadow: /etc/gshadow /usr/share/man/man5/gshadow.5.gz
[gestep@gapfts_check ~]$ man gshadow


1.9 密码策略

密码加密
  加密机制:
    加密:明文--> 密文
    解密:密文--> 明文
  单向加密:哈希算法,原文不同,密文必不同
    相同算法定长输出,获得密文不可逆推出原始数据
    雪崩效应:初始条件的微小改变,引起结果的巨大改变
    md5: message digest, 128bits
    sha1: secure hash algorithm, 160bits
    sha224: 224bits
    sha256: 256bits
    sha384: 384bits
    sha512: 512bits
  更改加密算法:
    authconfig --passalgo=sha256 --update

密码的复杂性策略
  足够长
  使用数字、大写字母、小写字母及特殊字符中至少3种
  使用随机密码
  定期更换,不要使用最近曾经使用过的密码

密码期限示意图如下所示。

Linux 用户组和权限管理

1.10 用户(组)及密码(组)文件操作

一般情况下不推荐大家直接去修改文件,容易出现格式错误的情况。如果你非要用修改文件的格式的方法去修改用户及密码的配置文件,推荐使用以下工具,它们会带有语法检查的功能。
    vipw:
      相当于"vi /etc/passwd",只不过该命令有语法检查的功能。
      如果使用"vipw -s"相当于"vi /etc/shadow",也有语法检查功能。
  
    vigr:
      相当于"vi /etc/group",也有语法检查功能。
      如果使用"vigr -s"相当于"vi /etc/gshadow",也有语法检查功能。
  
    pwck:
      检查"/etc/passwd"配置文件,比如验证用户是否有家目录等,执行后会有相应的提示信息。

    grpck:
      使用"/etc/group"配置文件,详情请参考“grpck --help”


2. 用户和组管理命令

用户管理命令
useradd
usermod
userdel

组账号维护命令
groupadd
groupdel
groupmod


2.1 用户创建:useradd

[gestep@gapfts_check ~]$ useradd -h
用法:useradd [选项] 登录
useradd -D
useradd -D [选项]

选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
[gestep@gapfts_check ~]$ useradd -D         #显示默认设置
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ cat /etc/default/useradd #以上用户的默认设置都来自这个文件
# useradd defaults file
GROUP=100 #组编号默认为100,即为user组
HOME=/home #家目录位置
INACTIVE=-1 #密码过期策略过期后的宽限期,默认是永远宽限,即"-1"
EXPIRE= #指定用户的过期时间,即账户有限使用时间
SHELL=/bin/bash #指定默认的shell类型
SKEL=/etc/skel #指定家目录的默认数据
CREATE_MAIL_SPOOL=yes

[gestep@gapfts_check ~]$
#用户默认配置信息
[gestep@gapfts_check ~]$ cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#

# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail

# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ getent group users
users:x:100:
[gestep@gapfts_check ~]$

[gestep@gapfts_check ~]$ sudo useradd -N tom #不创建私有组作为主组,使用默认的users作为主组
[gestep@gapfts_check ~]$ id tom
uid=1002(tom) gid=100(users) 组=100(users)
[gestep@gapfts_check ~]$ ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc
[gestep@gapfts_check ~]$ sudo ls -a /home/tom/ #不难发现,创建的用户家目录存在的数据和我们在"/etc/default/useradd"配置文件中的"SKEL"属性一致。
. .. .bash_logout .bash_profile .bashrc
[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo useradd -r mysql -s /sbin/nologin       #使用-r选项不创建家目录,因为他创建的是一个系统用户。使用-s指定shell类型
[gestep@gapfts_check ~]$ id mysql
uid=998(mysql) gid=964(mysql) 组=964(mysql) #很明显,在CentOS7.X版本系统的UID是小于1000的,这个在"/etc/login.defs"文件中有相应的记录。
[gestep@gapfts_check ~]$ getent passwd mysql
mysql:x:998:964::/home/mysql:/sbin/nologin
[gestep@gapfts_check ~]$ sudo useradd -u 10086 jason        #创建jason用户并指定其UID为10086
[gestep@gapfts_check ~]$ id jason
uid=10086(jason) gid=10086(jason) 组=10086(jason)
[gestep@gapfts_check ~]$ getent passwd jason
jason:x:10086:10086::/home/jason:/bin/ba
[root@gapfts_check ~]# id liuxiao                     #默认情况下,每个用户都有唯一的一个UID,如果想要创建2个不同的用户名但UID一样的情况,并让这两个用户都拥有同一个UID的权限就得需要使用相应的useradd选项。
uid=1002(liuxiao) gid=1002(liuxiao) 组=1002(liuxiao)
[root@gapfts_check ~]# useradd -u 1002 -o jenny #使用-o选项,就可以创建2个不同的用户名,但是UID却是一样的,如果你想要两个不同的用户名使用相同的UID就可以这样做
[root@gapfts_check ~]# getent passwd jenny #由于Linux识别用户是基于UID来识别的,我们发现如果设置2个同UID的不同用户名可能会产生信息混乱的情况。因此还是谨慎使用~
jenny:x:1002:1003::/home/jenny:/bin/bash
[root@gapfts_check ~]# id jenny
uid=1002(liuxiao) gid=1002(liuxiao) 组=1002(liuxiao)
[root@gapfts_check ~]# ll /home/ #两个用户的家目录还是不一样的
总用量 2076
-rw-r--r--. 1 root root 2839 1月 28 2021 autolvm.sh
drwx------. 5 gestep gestep 196 2月 13 16:04 gestep
drwx------ 2 liuxiao jenny 62 2月 13 19:46 jenny
drwx------ 2 liuxiao liuxiao 62 2月 13 19:46 liuxiao
-r-xr-xr-x. 1 root root 2119972 1月 29 2021 NIC-X710_X722_XL710_XXV710-CentOS7.8-i40e-2.12.6-1-x86_64.rpm
[root@gapfts_check ~]# getent group liuxiao
liuxiao:x:1002:
[root@gapfts_check ~]# id liuxiao
uid=1002(liuxiao) gid=1002(liuxiao) 组=1002(liuxiao)
[root@gapfts_check ~]# useradd -g liuxiao danny #使用-g指定danny的组为liuxiao,就不会创建默认同名的组
[root@gapfts_check ~]# id danny
uid=1003(danny) gid=1002(liuxiao) 组=1002(liuxiao)
[root@gapfts_check ~]#
[root@gapfts_check data]# useradd -d /data/bigdata hdfs         #创建用户并指定其家目录为"/data/bigdata"
[root@gapfts_check data]# ll /data/
总用量 8
drwx------ 2 hdfs hdfs 62 2月 13 19:55 bigdata
drwxr-xr-x. 11 gestep gestep 168 2月 13 16:12 data
drwxr-xr-x. 12 gestep gestep 4096 2月 3 2021 rd-offline
drwxr-xr-x. 2 gestep gestep 6 2月 1 2021 tools
drwxr-xr-x. 2 gestep gestep 4096 10月 27 11:08 uploads
[root@gapfts_check data]# ll /data/bigdata/ -a #很显然,家目录的默认数据和"/etc/skel"目录是一致的
总用量 12
drwx------ 2 hdfs hdfs 62 2月 13 19:55 .
drwxrwxrwx 7 gestep gestep 103 2月 13 19:55 ..
-rw-r--r-- 1 hdfs hdfs 18 4月 1 2020 .bash_logout
-rw-r--r-- 1 hdfs hdfs 193 4月 1 2020 .bash_profile
-rw-r--r-- 1 hdfs hdfs 231 4月 1 2020 .bashrc
[root@gapfts_check data]# ll /etc/skel/ -a
总用量 24
drwxr-xr-x. 2 root root 62 1月 6 2016 .
drwxr-xr-x. 78 root root 8192 2月 13 19:55 ..
-rw-r--r--. 1 root root 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc
[root@gapfts_check ~]# useradd -r -m -d /data/apache apache         #-r选项是创建系统用户,是不会创建家目录;但是可以使用-m选项来为系统用户创建家目录
[root@gapfts_check ~]# ll /data/apache/ -a
总用量 12
drwx------ 2 apache apache 78 2月 13 19:58 .
drwxrwxrwx 7 gestep gestep 102 2月 13 19:58 ..
-rw-r--r-- 1 apache apache 18 4月 1 2020 .bash_logout
-rw-r--r-- 1 apache apache 193 4月 1 2020 .bash_profile
-rw-r--r-- 1 apache apache 231 4月 1 2020 .bashrc
[root@gapfts_check ~]# id apache
uid=997(apache) gid=963(apache) 组=963(apache)
[root@gapfts_check ~]#
[root@gapfts_check ~]# useradd -M baby            #使用-M不创建家目录
[root@gapfts_check ~]# ll /home/
总用量 2076
-rw-r--r--. 1 root root 2839 1月 28 2021 autolvm.sh
drwx------. 5 gestep gestep 196 2月 13 16:04 gestep
-r-xr-xr-x. 1 root root 2119972 1月 29 2021 NIC-X710_X722_XL710_XXV710-CentOS7.8-i40e-2.12.6-1-x86_64.rpm
[root@gapfts_check ~]# id baby
uid=1002(baby) gid=1002(baby) 组=1002(baby)
[root@gapfts_check ~]# getent passwd baby
baby:x:1002:1002::/home/baby:/bin/bash


2.2 用户属性修改:usermod

[root@gapfts_check ~]# usermod -h
用法:usermod [选项] 登录

选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
[root@gapfts_check ~]# getent passwd jenny
jenny:x:1002:1002::/home/jenny:/bin/bash
[root@gapfts_check ~]# id jenny
uid=1002(jenny) gid=1002(jenny) 组=1002(jenny)
[root@gapfts_check ~]# usermod -u 10086 jenny ##修改jenny用户的UID,注意修改用户的UID时该用户不能登录,否则可能会报错
[root@gapfts_check ~]# id jenny
uid=10086(jenny) gid=1002(jenny) 组=1002(jenny)
[root@gapfts_check ~]# getent passwd jenny
jenny:x:10086:1002::/home/jenny:/bin/bash


2.3 删除用户:userdel

[root@gapfts_check ~]# userdel -h
用法:userdel [选项] 登录

选项:
-f, --force force some actions that would fail otherwise
e.g. removal of user still logged in
or files, even if not owned by the user
-h, --help 显示此帮助信息并推出
-r, --remove 删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射
[gestep@gapfts_check ~]$ sudo userdel -r jenny        #删除jenny用户及其家目录(生产环境慎用,有可能该员工已经离职但其数据可能对其它同时有用)


2.4 查看用户相关的ID信息

[gestep@gapfts_check ~]$ id postfix         #查看"postfix"用户相关的ID信息,如果用户不存在会提示"no such user"相关错误信息。
uid=89(postfix) gid=89(postfix) 组=89(postfix),12(mail)
[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ id -u postfix #显示“postfix”用户的UID
89
[gestep@gapfts_check ~]$ id -g postfix #显示"postfix"用户的GID
89
[gestep@gapfts_check ~]$ id -G postfix #显示"postfix"用户所属的组的ID(包括附加组)
89 12
[gestep@gapfts_check ~]$ id -nG postfix #显示组的名称,"-n"参数需要和"ugG"参数配合使用
postfix mail
[gestep@gapfts_check ~]$


2.5 切换用户或以其它用户身份执行命令(su命令的前提是要知道对方的用户密码,除非你直接使用root用户)

# 不完全切换,即切换后的用户依旧保留上一个用户的环境变量和工作目录
[root@gapfts_check ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@gapfts_check ~]#
[root@gapfts_check ~]# cd /data/
[root@gapfts_check data]# pwd
/data
[root@gapfts_check data]# ls /home/
autolvm.sh gestep NIC-X710_X722_XL710_XXV710-CentOS7.8-i40e-2.12.6-1-x86_64.rpm
[root@gapfts_check data]# su gestep
[gestep@gapfts_check data]$ pwd
/data
[gestep@gapfts_check data]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[gestep@gapfts_check data]$
#完全切换,即切换到该用户的家目录且环境变量也会跟着变化,相当于使用ssh服务连接的效果
[root@gapfts_check ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@gapfts_check ~]# cd /data/
[root@gapfts_check data]# su - gestep #su - 和su -l 效果等同
上一次登录:日 2月 13 20:25:24 CST 2022pts/0 上
[gestep@gapfts_check ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gestep/.local/bin:/home/gestep/bin
[gestep@gapfts_check ~]$ pwd
/home/gestep
[gestep@gapfts_check ~]$


2.6 创建组:groupadd

[gestep@gapfts_check ~]$ groupadd -h
用法:groupadd [选项] 组

选项:
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR directory prefix

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo groupadd yarn       #创建一个yarn组
[gestep@gapfts_check ~]$ getent group yarn
yarn:x:1002:
[gestep@gapfts_check ~]$


2.7 组属性修改:groupmod

[gestep@gapfts_check ~]$ groupmod -h
用法:groupmod [选项] 组

选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files

[gestep@gapfts_check ~]$


2.8 组属性删除:groupdel

[gestep@gapfts_check ~]$ groupdel -h
用法:groupdel [选项] 组

选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-f, --force delete group even if it is the primary group of a user

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo getent group yarn
yarn:x:1002:
[gestep@gapfts_check ~]$ sudo useradd liuxiao
[gestep@gapfts_check ~]$ id liuxiao
uid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao)
[gestep@gapfts_check ~]$ sudo usermod -aG yarn liuxiao #将liuxiao用户添加一个附加组yarn
[gestep@gapfts_check ~]$ id liuxiao
uid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao),1002(yarn)
[gestep@gapfts_check ~]$ sudo groupdel yarn #删除yarn组
[gestep@gapfts_check ~]$ id liuxiao
uid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao)


2.9 更改组密码:gpasswd

[gestep@gapfts_check ~]$ gpasswd -h
用法:gpasswd [选项] 组

选项:
-a, --add USER 向组 GROUP 中添加用户 USER
-d, --delete USER 从组 GROUP 中添加或删除用户
-h, --help 显示此帮助信息并推出
-Q, --root CHROOT_DIR 要 chroot 进的目录
-r, --delete-password remove the GROUP's password
-R, --restrict 向其成员限制访问组 GROUP
-M, --members USER,... 设置组 GROUP 的成员列表
-A, --administrators ADMIN,... 设置组的管理员列表
除非使用 -A 或 -M 选项,不能结合使用这些选项。
[gestep@gapfts_check ~]$


2.10 更改和查看组成员

[gestep@gapfts_check ~]$ groupmems -h
用法:groupmems [选项] [动作]

选项:
-g, --group groupname 更改组 groupname,而不是用户的组(只 root)
-R, --root CHROOT_DIR chroot 到的目录

动作:
-a, --add username 将用户 username 添加到组成员中
-d, --delete username 从组的成员中删除用户 username
-h, --help 显示此帮助信息并推出
-p, --purge 从组中移除所有成员
-l, --list 列出组中的所有成员
[gestep@gapfts_check ~]$


3. 文件权限


3.1 文件属性

Linux 用户组和权限管理

3.2 修改文件的属主和数组

文件属性操作

  • chown:设置文件的所有者
  • chgrp:设置文件的属组信息
chown用法:
[gestep@gapfts_check ~]$ chown --help
chown [选项]... [所有者][:[组]] 文件...
chown [选项]... --reference=参考文件 文件...
选项:
-R:递归,此选项慎用,非常危险
OWENER:只修改所有者
OWNER:GROUP:同时修改所有者和属组
:GROUP:只修改属组,冒号也可用 "." 替换
[gestep@gapfts_check ~]$ chgrp --help
用法:chgrp [选项]... 用户组 文件...
 或:chgrp [选项]... --reference=参考文件 文件...
Change the group of each FILE to GROUP.
With --reference, change the group of each FILE to that of RFILE.
[gestep@gapfts_check data]$ touch file.txt
[gestep@gapfts_check data]$ ll file.txt
-rw-rw-r-- 1 gestep gestep 0 2月 14 09:49 file.txt
[gestep@gapfts_check data]$ sudo chown liuxiao file.txt #修改属主为liuxiao
[gestep@gapfts_check data]$ ll file.txt
-rw-rw-r-- 1 liuxiao gestep 0 2月 14 09:49 file.txt
[gestep@gapfts_check data]$
[gestep@gapfts_check data]$ ll file.txt 
-rw-rw-r-- 1 liuxiao gestep 0 2月 14 09:49 file.txt
[gestep@gapfts_check data]$
[gestep@gapfts_check data]$ sudo chgrp tom file.txt #修改属组为tom
[gestep@gapfts_check data]$ ll file.txt
-rw-rw-r-- 1 liuxiao tom 0 2月 14 09:49 file.txt
[gestep@gapfts_check data]$
[gestep@gapfts_check data]$ ll file.txt 
-rw-rw-r-- 1 liuxiao tom 0 2月 14 09:49 file.txt
[gestep@gapfts_check data]$ sudo chown root:liuxiao file.txt #使用chown命令也是可以修改属主属组的,使用":"来分割
[gestep@gapfts_check data]$ ll file.txt
-rw-rw-r-- 1 root liuxiao 0 2月 14 09:49 file.txt


3.3 文件权限操作:chmod

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

  • owner 属主,u
  • group 属组,g
  • other 其它,o

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

  • r Readable
  • w Writeable
  • x eXcutable

文件:

  • r 可使用文件查看类工具获取其内容
  • w 可修改其内容
  • x 可以把此文件提请内核启动为一个进程

目录:

  • r 可以使用ls查看此目录中文件列表
  • w 可在此目录中创建文件,也可删除此目录中的文件
  • x 可以啥用ls -l 查看此目录中文件元数据(必须配合r),可以cd进入此目录
  • X 只给目录x权限,不给文件x权限

Linux 用户组和权限管理

[gestep@gapfts_check data]$ chmod --help
用法:chmod [选项]... 模式[,模式]... 文件...
 或:chmod [选项]... 八进制模式 文件...
 或:chmod [选项]... --reference=参考文件 文件...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.

-c, --changes like verbose but report only when a change is made
-f, --silent, --quiet suppress most error messages
-v, --verbose output a diagnostic for every file processed
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive change files and directories recursively
--help 显示此帮助信息并退出
--version 显示版本信息并退出
[gestep@gapfts_check data]$ sudo cp -a /etc/shadow ./
[gestep@gapfts_check data]$ ll shadow
-r-------- 1 root root 865 2月 14 09:51 shadow
[gestep@gapfts_check data]$ sudo chmod u+rw,g+r shadow #给属主增加rw权限,给属组加r权限
[gestep@gapfts_check data]$ ll shadow
-rw-r----- 1 root root 865 2月 14 09:51 shadow

[gestep@gapfts_check data]$ sudo chmod o=w shadow #给其它增加w权限
[gestep@gapfts_check data]$ ll shadow
-rw-r---w- 1 root root 865 2月 14 09:51 shadow
[gestep@gapfts_check data]$ ll /bin/ls
-rwxr-xr-x. 1 root root 117608 8月 20 2019 /bin/ls
[gestep@gapfts_check data]$ sudo chmod a-x /bin/ls #取消ls命令的执行权限
[gestep@gapfts_check data]$ ll /bin/ls #发现ls命令无法使用
-bash: /usr/bin/ls: 权限不够
[gestep@gapfts_check data]$ sudo chmod a+x /bin/ls
[gestep@gapfts_check data]$ ll /bin/ls
-rwxr-xr-x. 1 root root 117608 8月 20 2019 /bin/ls


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

[gestep@gapfts_check data]$ help umask
umask: umask [-p] [-S] [模式]
显示或设定文件模式掩码。

设定用户文件创建掩码为 MODE 模式。如果省略了 MODE,则
打印当前掩码的值。

如果MODE 模式以数字开头,则被当作八进制数解析;否则是一个
chmod(1) 可接收的符号模式串。

选项:
-p 如果省略 MDOE 模式,以可重用为输入的格式输入
-S 以符号形式输出,否则以八进制数格式输出

[gestep@gapfts_check data]$ who
gestep pts/0 2022-02-14 09:14 (192.168.2.254)
[gestep@gapfts_check data]$ umask #普通用户的umask默认值为0002
0002
[root@gapfts_check ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@gapfts_check ~]# umask #root用户的umask默认值为0022
0022
[gestep@gapfts_check data]$ umask
0002
[gestep@gapfts_check data]$ umask -S #以符号形式输出
u=rwx,g=rwx,o=rx
[gestep@gapfts_check data]$

[gestep@gapfts_check data]$ umask -p #输出可被调用
umask 0002
[gestep@gapfts_check data]$ umask
0002
[gestep@gapfts_check data]$ umask 754 #命令行中修改umask,只会临时生效,永久生效需要将修改指令写入"~/.bashrc"文件
[gestep@gapfts_check data]$ umask
0754
[gestep@gapfts_check data]$
umask值可以用来保留在创建文件权限。
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建目录的默认权限: 777-umask

非特权用户umask是002 ,root的umask 是022


举个例子:
  比如 umask的值是754,我们通过上面的公式得出
    新建的文件默认权限 : 666 - 754 => -112(得出的结果有奇数,需要进行加1操作) =>022
    新建的目录默认权限 : 777 - 754 => 023
  
  计算机是如何使用umask值的呢?
    666转换二进制为:"110 110 110"
    754转换二进制为:"111 101 100"(对应的位置为1则表示遮掩,需要和666二进制所对应位进行运算,若位1则取反,若为0则不变)
              000 010 010(使用八进制表示即022,和上面计算结果一直)
    
    777转换二进制为:"111 111 111"
    754转换二进制为:"111 101 100"(对应的位置为1则表示遮掩,需要和666二进制所对应位进行运算,若位1则取反,若为0则不变)
             000 010 011(使用八进制表示即023,和上面计算结果一直)


4. Linux系统上的特殊权限


4.1 SUID权限(让有权限运行该程序文件的用户临时拥有该程序属主的权限,系统默认的"passwd"就有suid权限,默认数字权限为4)

[gestep@gapfts_check data]$ cat /etc/shadow | tail -3                 #普通用户是无法查看"/etc/shadow"文件内容
cat: /etc/shadow: 权限不够
[gestep@gapfts_check data]$ sudo ls -l /usr/bin/cat #查看cat命令,属主root用户,而且cat命令的属主是由x权限的
-rwxr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
[gestep@gapfts_check data]$ sudo chmod u+s /usr/bin/cat #给cat命令添加s权限
[gestep@gapfts_check data]$ ls /usr/bin/cat
/usr/bin/cat
[gestep@gapfts_check data]$ sudo ls -l /usr/bin/cat #发现属主的x权限被s权限覆盖了
-rwsr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
[gestep@gapfts_check data]$ cat /etc/shadow | tail -2 #再次查看发现,可以访问/etc/shadow文件了
liuxiao:!!:19036:0:99999:7:::
tom:!!:19037:0:99999:7:::
[gestep@gapfts_check data]$
[gestep@gapfts_check data]$ ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
[gestep@gapfts_check data]$ sudo chmod u-s /usr/bin/cat #生产环境不要随意给命令加suid权限,这里仅为实验操作!如果对vim填了suid权限,那么Linux所有的普通用户都可以修改Linux中任意文件,谨慎使用!
[gestep@gapfts_check data]$ ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
[gestep@gapfts_check data]$


4.2 SGID权限(同理,让有权限运行该程序文件的用户临时拥有该程序属组的权限,默认数字权限为2)

[root@gapfts_check data]# groupadd devops                 #这里创建了一个devops的用户组
[root@gapfts_check data]# useradd -g devops jason #将jason用户加入devops组
[root@gapfts_check data]# id jason #查看jason组
uid=1004(jason) gid=1005(devops) 组=1005(devops)
[root@gapfts_check data]# mkdir ops
[root@gapfts_check data]# chgrp devops ops
[root@gapfts_check data]# ll -d ops/ #注意查看这里的ops目录的权限
drwxr-xr-x 2 root devops 6 2月 14 11:07 ops/
[root@gapfts_check data]#
[gestep@gapfts_check data]$ sudo chmod 3770 ops/ #给ops目录添加suid权限和sticky权限,注意查看文件的权限变化
[gestep@gapfts_check data]$ ll -d ops/
drwxrws--T 2 root devops 6 2月 14 11:07 ops/
[root@gapfts_check data]# touch ops/root.txt #这里使用root用户创建一个文件
[root@gapfts_check data]# su - jason
上一次登录:一 2月 14 11:15:53 CST 2022pts/0 上
[jason@gapfts_check ~]$ touch /data/ops/jason.txt #使用再devops组的jason用户创建一个文件

[root@gapfts_check data]# su - liuxiao #我们切换到liuxiao用户
[liuxiao@gapfts_check ~]$ id liuxiao
uid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao)
[liuxiao@gapfts_check ~]$ touch /data/ops/liuxiao.txt #这里是无法创建文件的,因为该用户不是devops组的普通用户,即other组用户无w权限,操作被拒绝
touch: 无法创建"/data/ops/liuxiao.txt": 权限不够
[liuxiao@gapfts_check ~]$
[liuxiao@gapfts_check ~]$ exit
登出
[root@gapfts_check data]# ll ops/ #不难发现,不管是root用户还是jason用户创建的文件都归devops组所有,这就是SGID的魅力所在。
总用量 0
-rw-r--r-- 1 jason devops 0 2月 14 11:20 jason.txt
-rw-r--r-- 1 root devops 0 2月 14 11:19 root.txt
[root@gapfts_check data]#


4.3 Sticky

[root@gapfts_check data]# mkdir  soft
[root@gapfts_check data]# touch soft/{1..10}.txt
[root@gapfts_check data]# ls soft/
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
[root@gapfts_check data]# chmod 757 soft/ #我们给other角色有w权限,这意味着other组的成员都可以对该目录的文件进行删除操作,尽管它不能访问该目录下的内容
[root@gapfts_check data]# ll -d soft/
drwxr-xrwx 2 root root 137 2月 14 11:28 soft/
[root@gapfts_check data]# ll soft/ #发现该目录下都是root用户的文件,其他用户仅有读取权限
总用量 0
-rw-r--r-- 1 root root 0 2月 14 11:28 10.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 1.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 2.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 3.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 4.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 5.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 6.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 7.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 8.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 9.txt
[root@gapfts_check data]# su - liuxiao
上一次登录:一 2月 14 11:21:20 CST 2022pts/0 上
[liuxiao@gapfts_check soft]$ rm -f /data/soft/1.txt #切换为普通用户,可以随意删除root用户创建的文件
[liuxiao@gapfts_check soft]$ rm -f /data/soft/2.txt
[root@gapfts_check data]# ll soft/
总用量 0
-rw-r--r-- 1 root root 0 2月 14 11:28 10.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 3.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 4.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 5.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 6.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 7.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 8.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 9.txt
[root@gapfts_check data]# ll -d soft/
drwxr-xrwx 2 root root 111 2月 14 11:33 soft/
[root@gapfts_check data]# chmod o+t soft/ #等于与chmod 1757 soft
[root@gapfts_check data]# ll -d soft/
drwxr-xrwt 2 root root 111 2月 14 11:33 soft/
[root@gapfts_check data]#
[root@gapfts_check data]# su - liuxiao
上一次登录:一 2月 14 11:32:53 CST 2022pts/0 上
[liuxiao@gapfts_check ~]$ rm -f /data/soft/4.txt #我们发现普通用户尽管对soft目录有w权限,但依旧无法删除不属于它管理的文件
rm: 无法删除"/data/soft/4.txt": 不允许的操作
[liuxiao@gapfts_check ~]$ touch /data/soft/liuxiao.txt #手动创建一个文件
[liuxiao@gapfts_check ~]$ ll /data/soft/
总用量 0
-rw-r--r-- 1 root root 0 2月 14 11:28 10.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 3.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 4.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 5.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 6.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 7.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 8.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 9.txt
-rw-rw-r-- 1 liuxiao liuxiao 0 2月 14 11:38 liuxiao.txt
[liuxiao@gapfts_check ~]$ rm -f /data/soft/liuxiao.txt #发现删自己的文件还是可以的~
[liuxiao@gapfts_check ~]$ ll /data/soft/
总用量 0
-rw-r--r-- 1 root root 0 2月 14 11:28 10.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 3.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 4.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 5.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 6.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 7.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 8.txt
-rw-r--r-- 1 root root 0 2月 14 11:28 9.txt


4.4 总结

SUID:
作用于二进制可执行程序,当用户执行此程序时,将会临时继承此程序所有者的权限
SGID:
作用于二进制可执行程序,当用户执行此程序时,将会继承此程序所属组的权限
作用于目录,当用户再此目录下创建文件时,文件的所属组会自动继承此目录的所属组
STICKY:
作用于目录,用户只能删除自己的文件。(当然root用户除外,我们探讨权限一般情况都会自动忽略root用户,因为root用户是管理员用户)


4.5 设置文件特定属性

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