Day 04 用户组管理,文件权限

Day 04 用户组管理,文件权限

一、Linux用户介绍

1.什么是用户

用户对硬件资源的操作都需要通过操作系统,比如用户要读取硬盘中的一份关键数据 出于安全考虑,操作系统的开发者们都专门开发了安全机制,要使用操作系统必须事先输入正确的用户名与密 码 这便是用户的由来

2.为何要有用户?或者为什么

# 主要就是权限问题

1、系统上的每一个进程,都需要一个特定的用户运行,一个用户拥有特定的权限,该用户运行的进程与用户 权限一致

2、通常在公司是使用普通用户管理服务器,因为root权限过大,容易出问题

3.查看用户信息

3.1 查看当前用户(id)

id  # 查看当前用户
--------------------------------------------
uid=0(root) gid=0(root) groups=0(root)

3.2 查看当前用户是谁(whoami)

whoami  # 查看当前用户是谁
--------------------------------------------
root

3.3 查看指定用户(id 用户名)

id user01  # 查看user01用户
--------------------------------------------
uid=1006(user01) gid=1007(user01) groups=1007(user01)

id root
--------------------------------------------
uid=0(root) gid=0(root) groups=0(root)

3.4 查看当前登录用户是谁(who)

who  # 查看当前登录用户是谁
--------------------------------------------
root     pts/0        2020-11-24 14:26 (139.226.12.198)

3.5 查看每个进程中的用户

# (ps)process status
ps aux |grep [s]sh  # 显示所有(axu)进程(ps)中过滤出(grep)通过ssh链接客户端的进程
--------------------------------------------
root      1737  0.0  0.2 112920  4348 ?        Ss   Nov18   0:00 /usr/sbin/sshd -D
root      3166  0.0  0.3 157316  5940 ?        Ss   14:26   0:00 sshd: root@pts/0

4.linux系统中用户角色的划分

在linux系统中的用户分为管理员用户与其他用户 管理员用户拥有最高权限 其他用户根据管理员的分配拥有不同的权限

需要强调的是

对于linux系统来说,用户的角色是通过UID和GID识别的;用户系统帐号的名称(如user01)其实给人(管理 员)看的,linux系统能够识别的仅仅是UID和GID这样的数字。

UID(user indentify)用户ID

唯一标识一个系统用户的账号,uid在系统中是唯一的,uid相当于一个人的身份证,用户名就相当于这个人的名字

GID(group indentify)组ID

如果把一个操作系统当成一家公司,uid相当于这个人的员工号, gid相当于他的部门编号。

关于UID之间的约定(now)

  • 0 超级管理员一般是(root),最高权限rm -rf/-*
  • 1-1000 一般是系统用户,用来运行安装的程序,所以此类无需登录验证
  • 1000+ 普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限

5.用户和组之间的关系

一对一(一个用户对应一个组)

多对一 (多个用户属于一个组)

一对多(一个用户属于多个组)

多对多(多个用户多个组)

6.超级用户

默认是root用户,其UID和GID均为0。root用户在每台unix/linux操作系统中都是唯一且真实存在的,通 过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。

二、用户和组文件

和用户、组相关的文件

  • etc/passwd 存放于密码相关的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nw23Fl94-1606263953716)(https://i.loli.net/2020/11/24/gUNL5QGSy39C1ZE.png)]

  • etc/shadow shadow影藏的信息

    user01:!!:18590:0:99999:7:::以’:'为分隔符,分成九列

列名 作用
user01 用户名称
!! 密码是一个长字符串 !!代表没有密码
18590 最近一次变更密码,距离1970到现在过了多少天,一般用作判断修改密码时间,root100天换一次
0 密码最少使用天数 0表示无限制
99999 密码最长使用天数 99999代表无限制
7 密码过期预警天数
:x1:x2:x3—x1 在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就 是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
:x1:x2:x3—x2 用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的 值为空,帐号永久可用;
:x1:x2:x3—x3 保留字段,目前为空,以备将来Linux发展之用;
  • etc/group组文件

user01:x:1007:

列数 含义
第一列 user01 二户组名称
第二列x 用户组密码占位符
第一列 1007 用户组id/gid
第一列 显示该用户的组作为哪个用户的附加组,多个用逗号分隔 一对多
  • etc/gshadow 组密码文件

user01:!::

列数 含义
第一列 user01 用户组名称
第二列 ! 用户组密码,这个段可以是空或!,如果是空的或者有!,表示没有面;
第三列 用户组管理者,这个字段也可以为空,如果有多个用户组管理者,用 , 分隔
第四列 显示该用户的组作为哪个用户的附加组,多个用逗号分隔 一对多
  • etc/skel/用户老家的模板
  • /home/xxx用户家目录
  • /var/spool/mail/xxx用户邮箱文件

三、用户管理命令

1.用户管理命令汇总

  • useradd 添加用户

    • useradd user99
      cat /etc/passwd
      -------------------------------------
      ....
      user05:x:1004:1004::/home/user05:/bin/bash
      user06:x:1005:1005::/home/user06:/bin/bash
      user01:x:1006:1007::/home/user01:/bin/bash
      user99:x:1007:1008::/home/user99:/bin/bash
      

      注意:当创建一个用户时,如果没有指定用户的主组,将会创建一个同名的组作为用户的主组。 练习:查看所有与用户相关的文件及目录

  • userdel 删除用户

    • userdel user01  # 删除用户user1,但不删除用户家目录和mail 如果要完整删除需要加 -r
      userdel -user06 -r
      -------------------------------------
      userdel: invalid option -- 'u'
      Usage: userdel [options] LOGIN
      
      Options:
        -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                    display this help message and exit
        -r, --remove                  remove home directory and mail spool
        -R, --root CHROOT_DIR         directory to chroot into
        -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
        -Z, --selinux-user            remove any SELinux user mapping for the user
      
      
  • usermod 修改用户信息

2.useradd命令详解:创建用户的同时指定选项

  • –u:指定用户的UID
  • –g:指定用户所属的主群
    • –G:指定用户所属的附加群
  • –d:指定用户的家目录
  • –c:指定用户的备注信息
  • –s:指定用户所用的shell
  • -e:修改过期时间
  • -M: 不创建家目录
  • -r: 创建系统账户,uid处于系统用户范围内,默认就没有家目录

灵活应用useradd命令的举例:

  • 在系统中新增一个fox(狐狸)用户的命令:useradd fox 实质就是添加普通用户
  • 在系统中新增一个用户user01,属组为police以及uid为600的命令: useradd –u 600 –g police user01

其他练习

useradd fox -u 503 # 创建用户fox 指定uid

useradd user08 -d /user08-home  # 创建用户user08 指定家目录  创建好的家目录 直接 cd /名字就可以进入

useradd user09 -M # 创建用户user04,不创建家目录

useradd user05 -s /sbin/nologin # 创建用户并指定shell

useradd user06 -g hr # 创建用户,指定主组

useradd user07 -G sale # 创建用户,指定附加组

useradd user08 -e 2014-04-01 # 指定过期时间

useradd user10 -u 4000 -s /sbin/nologin

useradd xxx -M -s /sbin/nologin # 创建普通用户,但是没有家目录,不能登录系统

useradd -r yyy -s /sbin/nologin # yyy属于系统用户,uid处于系统用户uid范围内

3.usermod命令

同useradd参数基一致,只不过useradd是添加,usermod是修改

  • -u #指定要修改用户的UID
  • -g #指定要修改用户基本组
  • -a #将用户添加到补充组。仅与-G选项一起使用
  • -G #指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
  • -d #指定要修改用户家目录
  • -c #指定要修改用户注释信息
  • -s #指定要修改用户的bash shell
  • usermod -e 2013-02-11 user1000 # 修改过期时间
  • usermod -g group1 jj # 修改主组
  • usermod -a -G group2 jj # 修改附加组,-a添加,不加-a代表覆盖

其它选项

  • -m #将用户主目录的内容移动到新位置。如果当前主目录不存在,则不会创建新的主目录

    • 
      
  • -l #指定要修改用户的登陆名

    • usermod -l new fox  #修改fox用户名为new
      
  • -L #指定要锁定的用户 lock

    • usermod -L new   # 锁定 new用户
      
      
  • -U #指定要解锁的用户 unlock

    • usermod -U new  # 解除锁定
      

4.设定和修改密码

4.1 passwd

passwd  # 默认给当前用户设定密码

passwd 
---------------------------------------
Changing password for user root.
New password: 

4.2 passwd 用户名

# root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码

passwd new
--------------------------------------------
Changing password for user new.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

4.3 echo '密码' | passwd --stdin 用户名 非交互式

echo '123456'|passwd --stdin new
--------------------------------------------
Changing password for user new.
passwd: all authentication tokens updated successfully.

4.4 查看修改

grep 'new' /etc/shadow
--------------------------------------------
new:$6$SmiynmEk$WlumJWUytUoRzviaCDUO.WNma0BtbrleyTrmhWz.CLPsafdgLBBJ59Yr4sQ1XYZ5vy5CHd0IfhvLs8ZPxY9BD0:18590:0:99999:7:::

扩展阅读

useradd创建用户时,对于未指定的选项(-u、-g等等),会以/etc/login.defs、/etc/default/useradd两个配置文件中的配置作为参照物

#配置文件/etc/login.defs详解
[root@egon ~]# grep -Ev "^#|^$"
/etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999 #密码最大有效期
PASS_MIN_DAYS 0 #两次修改密码的最小间隔时间
PASS_MIN_LEN 5 #密码最小长度,对于root无效
PASS_WARN_AGE 7 #密码过期前多少天开始提示
UID_MIN 1000 #用户ID的最小值
UID_MAX 60000 #用户ID的最大值
SYS_UID_MIN 201 #系统用户ID的最小值
SYS_UID_MAX 999 #系统用户ID的最大值
GID_MIN 1000 #组ID的最小值
GID_MAX 60000 #组ID的最大值
SYS_GID_MIN 201 #系统用户组ID的最小值
SYS_GID_MAX 999 #系统用户组ID的最大值
CREATE_HOME yes #使用useradd的时候是可以创建用户家目录
UMASK 077 #创建家目录时umask的默认控制权限
USERGROUPS_ENAB yes #删除用户的时候是否同时删除用户组
ENCRYPT_METHOD SHA512 #密码加密规则

#配置文件/etc/default/useradd详解
[root@egon ~]# cat /etc/default/useradd
GROUP=100 #依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制

HOME=/home #把用户的家目录建在/home中。
INACTIVE=-1 #是否启用账号过期停权,-1表示不启用。
EXPIRE= #账号终止日期,不设置表示不启用。
SHELL=/bin/bash #新用户默认所有的shell类型。
SKEL=/etc/skel #配置新用户家目录的默认文件存放路径。
CREATE_MAIL_SPOOL=yes #创建mail文件。
当使用useradd创建用户时,创建的用户家目录下会存在.bash_* 环境变量相关的文件,这些环境变量文件默认从/etc/skel目录中拷贝。这个默认拷贝环境变量位置是由/etc/default/useradd配置文件中定义的。

#故障案例,在当前用户家目录下执行了rm -rf .*命令,下次登录系统时出现-bash-4.1$,如何解决!
-bash-4.1$ cp -a /etc/skel/.bash* ./
-bash-4.1$ exit
[root@egon ~]# #重新连接即可恢复

12345678910111213141516171819202122232425262728293031323334353637383940

四.组管理

组管理命令汇总

groupadd
groupmod
groupdel
gpasswd # 设置组密码
newgrp #切换主组

123456

创建组

参数说明:
-g:指定新建工作组的 id-r:创建系统工作组,系统工作组的组ID小于500-K:覆盖配置文件 "/ect/login.defs"-o:允许添加组 ID 号不唯一的工作组。
-f,--force: 如果指定的组已经存在,此选项将示明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。
[root@aliyum ~]# groupadd gg1 #创建基本组,不指定gid
[root@aliyum ~]# tail -1 /etc/group
gg1:x:2005:
[root@aliyum ~]# groupadd -g 5555 gg2 #创建基本组, 指定gid为5555
[root@aliyum ~]# tail -1 /etc/group
gg2:x:5555:
[root@aliyum ~]# groupadd -r gg3 # 创建系统组,gid从201-999
[root@aliyum ~]# tail -1 /etc/group
gg3:x:991:

12345678910111213141516

修改组

参数:
-g <群组识别码> 设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n <新群组名称> 设置欲使用的群组名称。
[root@aliyum ~]# groupmod -g 1111 gg3
[root@aliyum ~]# tail -1 /etc/group
gg3:x:1111:

[root@aliyum ~]# groupmod -n new_gg3 gg3 # -n 修改组名称
[root@aliyum ~]# tail -1 /etc/group
new_gg3:x:1111:

123456789101112
12345678910111213

删除组

如果一个组是一个用户的主组,那么该组不能被删除,删掉用户会默认一起删掉他的主组

[root@aliyum ~]# useradd cm
[root@aliyum ~]# groupadd devops
[root@aliyum ~]# usermod -G devops cm
[root@aliyum ~]# id cm
uid=1004(cm) gid=1004(cm)
groups=1004(cm),1005(devops)

[root@aliyum ~]# groupdel devops # 附加组可以删除
[root@aliyum ~]# id cm # 查看用户,发现他的附加组没有了
uid=1004(cm) gid=1004(cm) groups=1004(cm)
[root@aliyum ~]# groupdel cm # 无法删除组cm,因为组cm属于cm用户的主组
groupdel: cannot remove the primary group
of user 'egon1'
123456789101112131415

组成员管理

对于用户来说,组是分类的
1、一类是基本组或称主组,用户只能有一个基本组,创建时可通过-g指定,如未指定则创建一个默认的组(与用户同名)

2、附加组,基本组不能满足授权要求,创建附加组,将用户加入该组,用户可以属于多个附加组,加入一个组后就拥有了该组的权限

可选项参数:
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
注意:gpasswd将用户添加到组或从组中删除,只针对已存在的用户
[root@root ~]# groupadd it
[root@root ~]# gpasswd -a user07 it
# 将某个用户加入到某个组
[root@root ~]# gpasswd -M user02,user03,user04 it # 将多个用户加入到it组
[root@root ~]# gpasswd -A cm it # 指定cm为组it的组长,除了root用户外cm用户也可以采用第一条命令往it组里添加成员
[root@root ~]# grep 'it' /etc/group
# 查看it组中的成员
it:x:505:user02,user03,user04
[root@root ~]# gpasswd -d user07 it
# 删除用户usr07从it组
123456789101112131415161718

我们可以为组设置密码,然后让一些非组成员的用户通过命令”newgrp 组”临时切换到组内并输入密码的方式获取用户组的权限和特性,如下

[root@localhost ~]# groupadd group1
[root@localhost ~]# gpasswd group1
正在修改 group1 组的密码
新密码:
请重新输入新密码:
[root@localhost ~]# touch /tmp/a.txt
[root@localhost ~]# ll /tmp/a.txt
-rw-r--r-- 1 root root 0 810 21:01
/tmp/a.txt
[root@localhost ~]# chown .group1 /tmp/a.txt  //将a.txt添加到组group1中
[root@localhost ~]# !ll
ll /tmp/a.txt
-rw-r--r-- 1 root group1 0 810 21:01
/tmp/a.txt
[root@localhost ~]# chmod g+w /tmp/a.txt  //为文件所在的组设置写权限
[root@localhost ~]# gpasswd group1
[root@localhost ~]# su - cm
上一次登录:一 810 21:01:46 CST 2020pts/0[cm@localhost ~]$ echo "123" >> /tmp/a.txt # 此时没有权限
-bash: /tmp/a.txt: 权限不够
[cm@localhost ~]$ newgrp group1 # 临时切换到组group1下,拥有其权限
密码:
[cm@localhost ~]$ echo "123" >> /tmp/a.txt
[cm@localhost ~]$ cat /tmp/a.txt
123
1234567891011121314151617181920212223242526

五 手动创建用户

1. /etc/passwd

[root@localhost ~]# vim /etc/passwd  # 新加一行
[root@localhost ~]# tail -1 /etc/passwd
cm2:x:1123:1123::/home/cm2:/bin/bash
123

2. /etc/shadow

[root@localhost ~]# openssl passwd -1 -salt 'i have a dream'
Password: 
$1$i have a$UEsc7yzrB5DWmTvxRpTsp.

[root@localhost ~]# vim /etc/shadow
[root@localhost ~]# tail -1 /etc/shadow
cm2:$1$i have a$UEsc7yzrB5DWmTvxRpTsp.:18588:0:99999:7:::
1234567

制作密码

   openssl passwd 手动生成密码
   引言:在Linux系统中我们要向手动生成一个密码可以采用 opensll passwd来生成一个密码作为用户账号的密码。
	Linux系统中的密码存放在/etc/shadow文件中,并且是 以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。
    
    openssl passwd的作用是用来计算密码hash的,目的是 为了防止密码以明文的形式出现。
    
    语法格式: openssl passwd [option] passwd
    
    openssl passwd常用的选项如下:
    -1:表示采用的是MD5加密算法。
    -salt:指定salt值,不使用随机产生的salt。在使用加 密算法进行加密时,即使密码一样,salt不一样,所计算 出来的hash值也不一样,除非密码一样,salt值也一样, 计算出来的hash值才一样。salt为8字节的字符串。 
    示例: [tom@localhost ~]$ openssl passwd -1 -salt 'i have a dream' 
    ##注意'i have a dream' 不 是密码而是密码的盐,注意密码的盐里不要有中文 Password: ##这里输入的是密码 $1$12345678$1qWiC4czIc07B4J8bPjfC0 ##这是 生成的密文密码 $1$i have a$UEsc7yzrB5DWmTvxRpTsp.
##将生成的密码串,手动添加到/etc/shadow中就可用作用户的登陆密码了。
1234567891011121314

3. /etc/group

[root@localhost ~]# vim /etc/group
[root@localhost ~]# tail -1 /etc/group
cm2:x:1123:
123

4. /etc/gshadow

[root@localhost ~]# vim /etc/gshadow
[root@localhost ~]# tail -1 /etc/gshadow
cm2:!::
123

5. 创建用户家目录,并用用户老家的模板/etc/skel/ 装 修一下,注意权限

[root@localhost ~]# mkdir /home/cm2
[root@localhost ~]# ll /home/cm2
total 0
[root@localhost ~]# ll /home/
total 0
drwxr-xr-x. 2 root   root    6 Nov 25 04:18 cm2
drwx------. 2 user6  hr     59 Nov 24 23:36 ll
drwx------. 2 lm     lm     79 Nov 25 03:00 lm
drwx------. 2 root   user03 59 Nov 24 23:21 user03
drwx------. 2 user05 user05 59 Nov 24 23:51 user05
drwx------. 2 user06 user06 59 Nov 24 23:26 user06
drwx------. 2 user6  hr     79 Nov 25 00:25 user6
drwx------. 2 y      y      79 Nov 25 00:49 y
[root@localhost ~]# chown -R cm2:cm2 /home/cm2
[root@localhost ~]# cp -a /etc/skel/.bash* /home/cm2

12345678910111213141516

6. /var/spool/mail/xxx 用户邮箱文件

[root@localhost ~]# touch /var/spool/mail/cm2
[root@localhost ~]# chmod 660 /var/spool/mail/cm2
[root@localhost ~]# ll /var/spool/mail/
total 4
-rw-rw----. 1 root   root    0 Nov 25 04:21 cm2
-rw-rw----. 1 gy     mail    0 Nov 20 17:23 gy
-rw-rw----. 1 user6  mail    0 Nov 24 23:36 ll
-rw-rw----. 1 lm     mail    0 Nov 25 02:39 lm
-rw-------. 1 root   mail 1344 Nov 24 19:18 root
-rw-rw----. 1 root   mail    0 Nov 24 23:21 user03
-rw-rw----. 1 user04 mail    0 Nov 24 23:22 user04
-rw-rw----. 1 user05 mail    0 Nov 24 23:51 user05
-rw-rw----. 1 user06 mail    0 Nov 24 23:26 user06
-rw-rw----. 1 user1  mail    0 Nov 24 17:29 user1
-rw-rw----. 1 user2  mail    0 Nov 24 18:08 user2
-rw-rw----. 1 user5  mail    0 Nov 24 23:16 user5
-rw-rw----. 1 user6  mail    0 Nov 24 23:44 user6
-rw-rw----. 1 y      mail    0 Nov 25 00:47 y
[root@localhost ~]# chown -R cm2:cm2 /var/spool/mail/cm2
12345678910111213141516171819

猜你喜欢

转载自blog.csdn.net/A1L__/article/details/110108979