1. Linux的安全模型 1.1 安全3A 安全3A并不是Linux特有的概念,在很多领域都有3A的概念,比如微软、思科、华为等设备都有安全的概念;大致分为以下一个概念: 认证(Authentication):即验
1. Linux的安全模型
1.1 安全3A
安全3A并不是Linux特有的概念,在很多领域都有3A的概念,比如微软、思科、华为等设备都有安全的概念;大致分为以下一个概念:
- 认证(Authentication):即验证身份,主要是验证您是谁的功能。
- 授权(Authorization):授权一般是验证身份后,所拥有的权限
- 审计(Accouting|Audition):审计一般是起到监督作用,反馈一些存在的问题,比如安全审计,财务审计等等
1.2 用户user
令牌: token,identityLinux用户: 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 rootuid=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:用户默认使用shell1.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 passwdsslpasswd (1ssl) - compute password hashespasswd (1) - update user's authentication tokens[gestep@gapfts_check ~]$ man 1 passw[gestep@gapfts_check ~]$ sudo useradd liuxiao [gestep@gapfts_check ~]$ tail -1 /etc/passwdliuxiao:x:1002:1002::/home/liuxiao:/bin/bash[gestep@gapfts_check ~]$ sudo chfn liuxiao #修改用户全名或注释Changing finger information for liuxiao.名称 []: liu办公 []: bigdata办公电话 []: 10086住宅电话 []: 10010Finger information changed.[gestep@gapfts_check ~]$ tail -1 /etc/passwdliuxiao:x:1002:1002:liu,bigdata,10086,10010:/home/liuxiao:/bin/bash[gestep@gapfts_check ~]$1.6 用户密码相关操作(对应/etc/shadow)
[gestep@gapfts_check ~]$ whatis shadowshadow (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 liuxiaoliuxiao:!$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 liuxiaoliuxiao:$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 liuxiaoliuxiao:$6$t25G2/QU$vWqw4X88y7T/zMzvBHPYBQsXTD04BxKv7bOqq9UL2oTT.iMlXGjsy/v983HOO1L9jQHijnmo4i/0GmEMPmxZS/:19036:0:3:7:::[gestep@gapfts_check ~]$ sudo getent shadow liuxiaoliuxiao:$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 liuxiaoliuxiao:$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 liuxiaoliuxiao:$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 liuxiaoliuxiao:$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 liuxiaoliuxiao:!!$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 liuxiaoliuxiao:$6$RkQ6NCuW$Srz.wRoL/OXn6MCM6mBf4QJim7d4ZRbnAmpwIuIBm4xyykrIhwPSYbOuch6Ju8AJ/eSDhcUlPE5no6TnxEB3.0:0:0:3:7:5:365:1.7 用户组相关操作(对应/etc/group)
[gestep@gapfts_check ~]$ whereis groupgroup: /etc/group1.8 用户组密码相关操作(/etc/gshadow)
[gestep@gapfts_check ~]$ whereis gshadowgshadow: /etc/gshadow /usr/share/man/man5/gshadow.5.gz[gestep@gapfts_check ~]$ man gshadow1.9 密码策略
密码加密 加密机制: 加密:明文--> 密文 解密:密文--> 明文 单向加密:哈希算法,原文不同,密文必不同 相同算法定长输出,获得密文不可逆推出原始数据 雪崩效应:初始条件的微小改变,引起结果的巨大改变 md5: message digest, 128bits sha1: secure hash algorithm, 160bits sha224: 224bits sha256: 256bits sha384: 384bits sha512: 512bits 更改加密算法: authconfig --passalgo=sha256 --update密码的复杂性策略 足够长 使用数字、大写字母、小写字母及特殊字符中至少3种 使用随机密码 定期更换,不要使用最近曾经使用过的密码密码期限示意图如下所示。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 groupmod2.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=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelCREATE_MAIL_SPOOL=yes[gestep@gapfts_check ~]$[gestep@gapfts_check ~]$ cat /etc/default/useradd #以上用户的默认设置都来自这个文件# useradd defaults fileGROUP=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 MaildirMAIL_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 99999PASS_MIN_DAYS 0PASS_MIN_LEN 5PASS_WARN_AGE 7## Min/max values for automatic uid selection in useradd#UID_MIN 1000UID_MAX 60000# System accountsSYS_UID_MIN 201SYS_UID_MAX 999## Min/max values for automatic gid selection in groupadd#GID_MIN 1000GID_MAX 60000# System accountsSYS_GID_MIN 201SYS_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 usersusers:x:100:[gestep@gapfts_check ~]$[gestep@gapfts_check ~]$ sudo useradd -N tom #不创建私有组作为主组,使用默认的users作为主组[gestep@gapfts_check ~]$ id tomuid=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 mysqluid=998(mysql) gid=964(mysql) 组=964(mysql) #很明显,在CentOS7.X版本系统的UID是小于1000的,这个在"/etc/login.defs"文件中有相应的记录。[gestep@gapfts_check ~]$ getent passwd mysqlmysql:x:998:964::/home/mysql:/sbin/nologin[gestep@gapfts_check ~]$ sudo useradd -u 10086 jason #创建jason用户并指定其UID为10086[gestep@gapfts_check ~]$ id jasonuid=10086(jason) gid=10086(jason) 组=10086(jason)[gestep@gapfts_check ~]$ getent passwd jasonjason: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 jennyuid=1002(liuxiao) gid=1002(liuxiao) 组=1002(liuxiao)[root@gapfts_check ~]# ll /home/ #两个用户的家目录还是不一样的总用量 2076-rw-r--r--. 1 root root 2839 1月 28 2021 autolvm.shdrwx------. 5 gestep gestep 196 2月 13 16:04 gestepdrwx------ 2 liuxiao jenny 62 2月 13 19:46 jennydrwx------ 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 liuxiaoliuxiao:x:1002:[root@gapfts_check ~]# id liuxiaouid=1002(liuxiao) gid=1002(liuxiao) 组=1002(liuxiao)[root@gapfts_check ~]# useradd -g liuxiao danny #使用-g指定danny的组为liuxiao,就不会创建默认同名的组[root@gapfts_check ~]# id dannyuid=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/总用量 8drwx------ 2 hdfs hdfs 62 2月 13 19:55 bigdatadrwxr-xr-x. 11 gestep gestep 168 2月 13 16:12 datadrwxr-xr-x. 12 gestep gestep 4096 2月 3 2021 rd-offlinedrwxr-xr-x. 2 gestep gestep 6 2月 1 2021 toolsdrwxr-xr-x. 2 gestep gestep 4096 10月 27 11:08 uploads[root@gapfts_check data]# ll /data/bigdata/ -a #很显然,家目录的默认数据和"/etc/skel"目录是一致的总用量 12drwx------ 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总用量 24drwxr-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总用量 12drwx------ 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 apacheuid=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.shdrwx------. 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 babyuid=1002(baby) gid=1002(baby) 组=1002(baby)[root@gapfts_check ~]# getent passwd babybaby:x:1002:1002::/home/baby:/bin/bash2.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 jennyjenny:x:1002:1002::/home/jenny:/bin/bash[root@gapfts_check ~]# id jennyuid=1002(jenny) gid=1002(jenny) 组=1002(jenny)[root@gapfts_check ~]# usermod -u 10086 jenny ##修改jenny用户的UID,注意修改用户的UID时该用户不能登录,否则可能会报错[root@gapfts_check ~]# id jennyuid=10086(jenny) gid=1002(jenny) 组=1002(jenny)[root@gapfts_check ~]# getent passwd jennyjenny:x:10086:1002::/home/jenny:/bin/bash2.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”用户的UID89[gestep@gapfts_check ~]$ id -g postfix #显示"postfix"用户的GID89[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 yarnyarn: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 yarnyarn:x:1002:[gestep@gapfts_check ~]$ sudo useradd liuxiao[gestep@gapfts_check ~]$ id liuxiaouid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao)[gestep@gapfts_check ~]$ sudo usermod -aG yarn liuxiao #将liuxiao用户添加一个附加组yarn[gestep@gapfts_check ~]$ id liuxiaouid=1002(liuxiao) gid=1003(liuxiao) 组=1003(liuxiao),1002(yarn)[gestep@gapfts_check ~]$ sudo groupdel yarn #删除yarn组[gestep@gapfts_check ~]$ id liuxiaouid=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 文件属性
3.2 修改文件的属主和数组
文件属性操作
- chown:设置文件的所有者
- chgrp:设置文件的属组信息
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权限