3.4下午作业:用户和组管理

版权声明:20180913@wx:wenhs5479 https://blog.csdn.net/wenhs5479/article/details/88175786

1.用户和组管理


先把实验环境centos7.5主机名改好:

[root@localhost ~]# hostname wenhs5479
[root@localhost ~]# bash
[root@wenhs5479 ~]# 

1.1 用户和组的概念

a.系统上的每个进程(运行的程序)都要做为特定用户运行。
b.每个文件是由一个特定的用户拥有。
c.访问文件和目录是受到用户限制的。
d.进程能够以何种方式访问文件和目录,是由与进程相关联的用户决定的。组:更加方便、有效的对文件赋权的一种方式 。

Authentication:认证

Authorization:授权

Accouting:审计

1.2 用户分类

a. UID范围是0-65535及2的16次方
b.超级管理员的UID是0
c. 1-200是系统用户,有系统分配给进程使用
d.201-999是系统用户,用来运行服务账户,不需要登录系统(动态分配)
e.1000-65535是普通用户
f.注意:在Linux7之前的惯例是UID1-499是系统用户(为守护类进程获取系统资源而完成权限指派的用户),UID500-60000是普通用户(为了完成交互式登录使用的用户)

1.3 Linux安全上下文

运行中的程序:进程(process)
  • 以进程发起者的身份运行
  • root:vim
[root@wenhs5479 ~]# ps -ef |grep vim
root      86222  83478  0 09:53 pts/2    00:00:00 vim aaa
root      86244  86089  0 09:53 pts/3    00:00:00 grep --color=auto vim
[root@wenhs5479 ~]# 
  • test:vim
[root@wenhs5479 ~]# ps -ef |grep vim
test      86407  86345  0 09:55 pts/2    00:00:00 vim aaa
root      86413  86089  0 09:55 pts/3    00:00:00 grep --color=auto vim
[root@wenhs5479 ~]# 
  • 进程所能够访问的所有资源的权限取决于进程的发起者的身份
Linux通过安全上下文的概念完成用户权限的指派。
  • 先判断用户是否是某文件的属主
  • 再判断用户是否属于某个组
  • 最后定其为其他用户

1.4 Linux用户组类别

  • 私有组:创建用户时,如果没有为其指定所属的组,

系统会自动为其创建一个与用户名相同的组

  • 基本组:优先使用基本组,由系统分配给系统进程使用,用户的默认组
  • 附加组(额外组):默认组以外的其它组, 基本组不能满足授权要求,创建附加组,用户可以属于多个附加组

2. Linux用户和组相关的配置文件


配置文件 作用
/etc/passwd 用户及其属性信息(名称、uid、基本组id等等)
/etc/group 组及其属性信息
/etc/shadow 用户密码及其相关属性
/etc/gshadow 组密码及其相关属性。在用户执行基本组切换时使用
配置文件 /etc/passwd /etc/group 注释说明(用户)
第一字段 用户名 组名 用户的账户名称
第二字段 密码占位符 组密码 存放账户的口令,暂时是x表示,密码保存在/etc/shadow中
第三字段 UID GID 用户标识号
第四字段 GID 以当前组为附加组的用户列表(分隔符为逗号) 组标识号
第五字段 用户的描述信息 用户的详细信息
第六字段 用户家目录 用户家目录,root家目录是/root普通用户的家目录在/home/username,可自定义
第七字段 用户的登录shell 用户登陆的linux使用的shell cat/etc/shells
配置文件 /etc/shadow 注释说明
第一字段 登录名 用户的账户名称
第二字段 加密后的密码 用户密码,这是加密过的口令(未设置密码为!!)
第三字段 最近一次更改密码的日期 从1970年到最近一次更改密码时间之间过了多少天
第四字段 密码的最小使用期限 密码最少使用几天才可以更改密码(0表示无限制)
第五字段 密码的最大使用期限 密码使用多少天需要修改密码(默认99999永不过期)
第六字段 密码警告时间段 密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
第七字段 密码禁用期 在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
第八字段 帐号的过期日期 从1970年起,账户在这个日期前可使用,到期后失效
第九字段 保留字段 保留

2.2 加密方法

对称加密:加密和解密使用同一个密钥
公钥加密:每个密码都成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密:也叫散列加密,提取数据特征码,能加密不能解密,常用于做数据完整性校验

单向加密特点:

  • 雪崩效应(初始条件的微小改变,将会引起结果的巨大改变)
  • 定长输出
  • MD5:Message Digest,128位定长输出
  • SHA1:Secure Hash Algorithm,160位定长输出
  • SHA224:224位定长输出
  • SHA256:256位定长输出
  • SHA384:384位定长输出
  • SHA512:512位定长输出

2.3 Linux用户密码加密方式

Linux密码是使用的单向加密方式进行加密。

想一个问题,如果两个同事使用的是同样的密码,那么在配置文件中是不是就显示密码一样呢?如果一样是不是就不安全了呢?那么又如何解决此问题呢?

答案是在加密前给用户设置的密码加上一点杂质,再对这个杂质+用户密码一起使用单向加密。由于单向加密的雪崩效应,就算两人设置的密码是一样的,但因为杂质的不同,最终的结果也会截然不同。

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

3. 用户和组相关的管理命令

3.1.1 用户创建命令useradd

用法:useradd [选项] 登录
      useradd -D
      useradd -D [选项]

选项:
  -b, --base-dir BASE_DIR					新账户的主目录的基目录
  -c, --comment COMMENT        		 新账户的 GECOS 字段,注释信息
  -d, --home-dir HOME_DIR      			 新账户的主目录,指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件
  -D, --defaults										显示或更改默认的 useradd 配置,直接打印/etc/default/useradd文件的内容或配合其它选项(例如-s SHELL)直接修改/etc/default/useradd文件中的默认值
  -e, --expiredate EXPIRE_DATE  		新账户的过期日期
  -f, --inactive INACTIVE      				 新账户的密码不活动期
  -g, --gid GROUP								新账户主组的名称或 ID,指定用户所属基本组,可为组名或GID
  -G, --groups GROUPS						新账户的附加组列表,附加组,可以有多个,用逗号隔开。组groupname必须事先存在
  -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 到的目录
  -s, --shell SHELL								新账户的登录 shell,这里的shell最好使用/etc/shells里面有的shell, /etc/shells指定了当前系统可用的安全shell
  -u, --uid UID										新账户的用户 ID,[UID_MIN,UID_MAX]定义在/etc/login.defs文件中
  -U, --user-group								创建与用户同名的组
  -Z, --selinux-user SEUSER				为 SELinux 用户映射使用指定 SEUSER

例子:

[root@wenhs5479 ~]# groupadd -g 1234 wenhs-test
[root@wenhs5479 ~]# useradd -u 5479 -g 1234 -G root -c wenhs-test -d /home/wenhs-test -s /bin/bash wenhs 
[root@wenhs5479 ~]# id wenhs
uid=5479(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root)
[root@wenhs5479 ~]# su wenhs -c id
uid=5479(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@wenhs5479 ~]# su - wenhs
上一次登录:二 3月  5 10:46:31 CST 2019pts/2 上
[wenhs@wenhs5479 ~]$ pwd
/home/wenhs-test
[wenhs@wenhs5479 ~]$ 

3.1.2 用户删除命令userdel

用法: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                  删除主目录和邮件池,删除用户的同时删除其家目录(userdel默认不会删除其家目录)
  -R, --root CHROOT_DIR         chroot 到的目录
  -Z, --selinux-user            为用户删除所有的 SELinux 用户映射

例子:

[root@wenhs5479 ~]# ls /home/
test  wenhs-test
[root@wenhs5479 ~]# userdel wenhs 
[root@wenhs5479 ~]# ls /home/
test  wenhs-test
[root@wenhs5479 ~]# 
[root@wenhs5479 ~]# rm -rf /home/wenhs-test
[root@wenhs5479 ~]# ls /home/
test
[root@wenhs5479 ~]# useradd -u 5479 -g 1234 -G root -c wenhs-test -d /home/wenhs-test -s /bin/bash wenhs 
正在创建信箱文件: 文件已存在
[root@wenhs5479 ~]# ls /home/
test  wenhs-test
[root@wenhs5479 ~]# userdel -r wenhs 
[root@wenhs5479 ~]# ls /home/
test
[root@wenhs5479 ~]#

3.1.3 查看用户帐号的信息命令id

用法:id [OPTION] ... [USER]
打印指定USER的用户和组信息,
当前用户或(当省略USER时)。

   -a				 ignore,与其他版本兼容
   -Z, --context	仅打印当前用户的安全上下文
   -g, --group	仅打印有效的组ID
   -G, --groupss	打印所有组ID
   -n, --name	为-ugG打印名称而不是数字
   -r, --real	使用-ugG打印真实ID而不是有效ID
   -u, --user	仅打印有效的用户ID
   -z, --zero	分隔带有NUL字符的条目,而不是空格;
                    	不允许使用默认格式
      --help	显示此帮助信息并退出
      --version	显示版本信息并退出

如果不附带任何选项,程序会显示一些可供识别用户身份的有用信息。

例子

查看当前登录的用户的信息:

[root@wenhs5479 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[root@wenhs5479 ~]# id root
uid=0(root) gid=0(root) 组=0(root)

3.1.4 修改用户帐号属性的命令

usermod   修改用户属性
用法: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选项,会覆盖此前的附加组
  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                并不从其它组中删除此用户
  -h, --help                    显示此帮助信息并推出
  -l, --login LOGIN             新的登录名称
  -L, --lock                    锁定用户帐号,被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
  -m, --move-home              (仅于 -d 一起使用),改变用户家目录的同时把原来家目录的文件移动到新的家目录中
  -o, --non-unique              允许使用重复的(非唯一的) UID
  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             该用户帐号的新登录 shell
  -u, --uid UID                 用户帐号的新 UID
  -U, --unlock                  解锁用户帐号
  -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射

//chsh  修改用户的默认shell
//语法:chsh [options] [username]
    -s SHELL

例子:

[root@wenhs5479 ~]# usermod -u 1111 -a -G test -e 2019-3-12 wenhs
[root@wenhs5479 ~]# id wenhs
uid=1111(wenhs) gid=1234(wenhs-test) 组=1234(wenhs-test),0(root),1000(test)
[root@wenhs5479 ~]# usermod -d /opt/wenhs -m wenhs
[root@wenhs5479 ~]# su - wenhs
[wenhs@wenhs5479 ~]$ pwd
/opt/wenhs
[wenhs@wenhs5479 ~]$ 
[root@wenhs5479 ~]# tail -2 /etc/passwd
test:x:1000:1000:test:/home/test:/bin/bash
wenhs:x:1111:1234:wenhs-test:/opt/wenhs:/bin/bash
[root@wenhs5479 ~]# usermod -L wenhs
[root@wenhs5479 ~]# tail -1 /etc/shadow
wenhs:!$6$4lQmyzDt$3l.uEIwhu6kb5Df.6knVKxYHneVkTkovZL0PtNmjQU7LyOB9mTayyS3Vdba/sznEQl40AdLN9P3ZwNOsL6DEb/:17960:0:99999:7::17967:
[root@wenhs5479 ~]# usermod -U wenhs
[root@wenhs5479 ~]# tail -1 /etc/shadow
wenhs:$6$4lQmyzDt$3l.uEIwhu6kb5Df.6knVKxYHneVkTkovZL0PtNmjQU7LyOB9mTayyS3Vdba/sznEQl40AdLN9P3ZwNOsL6DEb/:17960:0:99999:7::17967:
[root@wenhs5479 ~]# chsh -s /bin/sh wenhs
Changing shell for wenhs.
Shell changed.
[root@wenhs5479 ~]# tail -1 /etc/passwd
wenhs:x:1111:1234:wenhs-test:/opt/wenhs:/bin/sh

3.1.5 切换用户命令su

切换用户的方式 特点
su USERNAME 非登录式切换,即不会读取目标用户的配置文件
su - USERNAME 登录式切换,即会读取目标用户的配置文件。完全切换
su - 不指定用户时默认切换至root用户

root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码

用法:
 su [选项] [-] [USER [参数]...]

将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。

选项:
 -m, -p, --preserve-environment  不重置环境变量
 -g, --group <组>             指定主组
 -G, --supp-group <组>        指定一个辅助组

 -, -l, --login                  使 shell 成为登录 shell
 -c, --command <命令>            使用 -c 向 shell 传递一条命令
 --session-command <命令>        使用 -c 向 shell 传递一条命令
                                 而不创建新会话
 -f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)
 -s, --shell <shell>             若 /etc/shells 允许,则运行 shell

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出

例子:

[root@wenhs5479 ~]# su wenhs -c pwd
/root
[root@wenhs5479 ~]# su - wenhs
上一次登录:二 3月  5 11:39:52 CST 2019pts/2 上
-sh-4.2$ su -
密码:
上一次登录:二 3月  5 09:51:32 CST 2019从 192.168.131.100pts/3 上
[root@wenhs5479 ~]# 

bash的配置文件:

配置文件类型 配置文件路径
全局配置 /etc/profile
全局配置 /etc/profile.d/*.sh
全局配置 /etc/bashrc
个人配置 ~/.bash_profile
个人配置 ~/.bashrc
配置文件类型 功能
profile类 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
bashrc类 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名

登录式shell如何读取配置文件?

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

3.2 密码管理

3.2.1 密码管理命令passwd

用法: 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                 从标准输入读取令牌(只有根用户才能进行此操作),例:echo "redhat"|passwd --stdin user1

Help options:
  -?, --help              显示此帮助消息
  --usage                 显示简要用法信息

3.2.2 改变用户密码过期信息命令chage

用法:chage [选项] 登录

选项:
  -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”
  -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”
  -h, --help                    显示此帮助信息并推出
  -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态
  -l, --list                    显示帐户年龄信息
  -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”
  -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”
  -R, --root CHROOT_DIR         chroot 到的目录
  -W, --warndays 警告天数       将过期警告天数设为“警告天数”

3.2.3 密码生成工具openssl

//语法:openssl command [ command_opts ] [ command_args ]
    command     //包含标准命令、消息摘要命令、加密命令
        version     //查看程序版本号
        dgst        //提取特征码
        passwd      //生成密码
        rand        //生成伪随机数
//提取特征码
[root@wenhs5479 ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= 01453950193b2f75895174159b092db1
//生成密码 openssl passwd -1 -salt string        //string一般为8位
[root@wenhs5479 ~]# openssl passwd -1 -salt wenhs123
Password: 
$1$wenhs123$hHZLFuQVNhKMU4bROKERX0

//生成随机数 openssl rand -base64 NUM
//NUM表示随机数的长度
[root@wenhs5479 ~]# openssl rand -base64 20
A2H5Ny5/QrcfkYAcfM13beTMq7Q=

3.3 组管理

3.3.1 创建组命令groupadd

用法: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 到的目录

3.3.2 修改组信息命令groupmod

用法: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 到的目录

3.3.3 删除组命令groupdel

用法:groupdel [选项] 组
删除组时只需要指定组名即可
选项:
  -h, --help                    显示此帮助信息并推出
  -R, --root CHROOT_DIR         chroot 到的目录

3.3.4 给组设定密码命令gpasswd

用法: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 选项,不能结合使用这些选项。

3.3.5 切换组命令newgrp

将当前用户临时切换至新的基本组,这里需要用到gpasswd设置的组密码,使用newgrp登录至新的基本组后可以使用exit退出,退出后其原基本组不变

例子:

[root@wenhs5479 ~]# groupadd www
[root@wenhs5479 ~]# gpasswd www
正在修改 www 组的密码
新密码:
请重新输入新密码:
[root@wenhs5479 ~]# su - test
上一次登录:二 3月  5 09:55:17 CST 2019pts/2 上
[test@wenhs5479 ~]$ id
uid=1000(test) gid=1000(test) 组=1000(test),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[test@wenhs5479 ~]$ newgrp www
密码:
[test@wenhs5479 ~]$ id
uid=1000(test) gid=1235(www) 组=1235(www),10(wheel),1000(test) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[test@wenhs5479 ~]$ exit
exit
[test@wenhs5479 ~]$ id
uid=1000(test) gid=1000(test) 组=1000(test),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

猜你喜欢

转载自blog.csdn.net/wenhs5479/article/details/88175786