用户和组管理

20 篇文章 0 订阅

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中
第三字段UIDGID用户标识号
第四字段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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值