linux中用户与用户组命令的使用方法

linux的用户和用户组

用户是必须的吗?

创新互联服务项目包括浠水网站建设、浠水网站制作、浠水网页制作以及浠水网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,浠水网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到浠水省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

用户:标识计算机上的资源的归属
密码:对用户的身份做验证

登录的时候计算机如何做身份验证?

在计算机内部预先有一个数据库,在数据库中保存用户名和对应的密码,用户登录时候通过比对数据库来检查用户和密码是否正确

什么是数据库?
用来保存数据的文件,数据库管理软件(oracle MySQL sqlserver db2)

保存账号和密码的数据库文件

/etc/passwd   <<<< 保存系统中的全部的用户名
/etc/shadow   <<<< 保存各个用户的密码
/etc/group    <<<< 保存系统中的全部用户组名
/etc/gpasswd  <<<< 保存各个用户组的密码

windows下新建用户

计算机-管理-本地用户和组-用户-新建 (用户名 密码)
计算机-管理-本地用户和组-组-新建(用户组)添加用户
windows下有用户和组,linux中同样有用户和,linux中一个用户也可以同属多个组,100个用户授权的话需要授权100次,直接把用户加到组中,直接授权组

用户和用户组

用户:登录系统的用户名
用户组:多个用户的合集

用户组的作用

方便为多个用户批量授权

用户身份标识

计算机为每一个用户设置一个唯一的数字,当计算机识别用户的时候,通过
该数字来识别的,数字就是UID(User IDentifier)

用户组身份标识

GID

注意:为用户赋权的时候,其实是针对uid赋权的
例子:zs--uid=601
赋权:zs可以访问文件a.txt
本质:让uid为601的用户可以访问a.txt

/etc/passwd文件详解

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

文件的作用
这个文件中保存了系统中的全部用户,每行是一个用户
每个用户的信息包括7部分,如下
第一段:用户名
第二段:用户密码占位符,为了安全将密码放在另外一个文件中
(/etc/shadow)
第三段:用户的UID
第四段: 用户所在组的GID(该组是用户的基本组)
第五段:用户的描述信息(可以随便写)
第六段:用户的家目录
第七段:用户的shell类型
    常见的shell类型
     1:/bin/bash <<<< 默认是该shell的时候,可以登录系统
     2:/sbin/nologin  <<<该shell的用户是无法登录系统的
例子:统计有多少用户
    [root@localhost ~]# cat /etc/passwd | wc -l
例子:统计当前系统中有多少用户可以登录系统
    [root@localhost ~]# grep "/bin/bash$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    zhangsan:x:500:500::/home/zhangsan:/bin/bash
    lisi:x:502:502::/home/lisi:/bin/bash
    zs:x:503:503::/home/zs:/bin/bash
    [root@localhost ~]# grep "/bin/bash$" /etc/passwd |wc -l
    4

用户的分类

管理员
    UID 0 
    特点:默认只有一个,就是root root不受任何权限的约束
系统用户
    UID 1-499
    特点:在安装完成linux之后或者安装了某个程序执行自动生成
    的用户,这类用户是默认情况不能登录系统的,这类用户存在的
    目的是为了运行特定的服务(程序、进程)
    默认系统用户也没有家目录
普通用户
    UID 500+
    特点:需要运行命令 useradd来创建
    普通用户的权限非常小,通常仅仅能在自己的家目录下进行操作
    该类用户的家目录/home下和用户同名的目录

用户组的分类

用户的基本组(用户的主组)
    在/etc/passwd中第四个字段(GID)所指向的组就是用户的基本组
用户的附件组
注意:一个用户可以属于多个组。同一时间,只能有一个是主组,其他的就是附加组,除了主组之外的其他组就是该用户的附加组

补充:在用useradd创建普通用户的时候,默认情况下,会创建一个组,组名和用户名
相同,该组默认就是该用户的基本组(主组)    
useradd bajie
tail /etc/passwd
cat /etc/group

补充:linux的文件属性
属主:文件的属主(谁创建的文件,文件的属主就是谁)
属组:设置文件对于一个特定用户组所具有的权限,这个组就是该文件的属组
注意:属组、属主默认都只有一个
如果一个用户既不是属主,也不是属组的组内用户,那么该用户就是"其他用户"

三类用户

属主
属组的组内用户
其他用户

创建用户

useradd命令
    作用:新建用户
    格式:useradd [options]用户名
    选项:
        -c "string" 设置新用户的描述信息
        -d "/path/to/dir" 设置用户的家目录
        -e 月月/日日/年年:指定账号的过期日期
        -g GID:指定用户的主组ID号或名称
        -G GID,GID,GID:指定用户的附加组的ID号或名称
        -m 在创建用户的时候,如果用户家目录不存在,则自动创建(该选项
        自动使用)
        -M 不自动创建用户家目录
        -r 创建系统用户
            用此选项创建的用户有以下特点
                1、默认用户无家目录
                2、默认用户uid<500
                3、默认用户的shell是bash
                4、用户可以登录系统
        -s shType:指定用户的shell类型
            常用的shell
                /bin/bash
                /sbin/nologin
        -u UID 指定用户的uid
        -u UID -o 指定让新用户使用一个现有的ID
    [root@localhost ~]# useradd -c "i am tom" tom
    [root@localhost ~]# tail /etc/passwd
    tom:x:505:505:i am tom:/home/tom:/bin/bash

    useradd zhangsan   创建用户zhangsan
    tail /etc/passwd   查看用户是否存在
    id 用户名          可以查看用户是否存在

例子:新建用户jerry,要求主组为gp01,附加组为gp02 和gp03
    [root@localhost ~]# useradd -g gp01 -G gp02,gp03 jerry
    [root@localhost ~]# tail /etc/passwd
    [root@localhost ~]# tail /etc/group

例子:创建一个用户kity,要求将其创建为系统用户(无家目录,uid<500,不能登录系统)
     useradd -r -s /sbin/nologin kity

例子:新建用户2222并指定UID为600
    useradd -u 600 2222
    tail /etc/passwd
    lll:x:507:509::/home/lll:/bin/bash
    2222:x:600:600::/home/2222:/bin/bash

例子:新建用户dog,要求其uid为660,主组为gp02,附加组为gp01,gp03,家目录在/tmp/dog,指定shell类型为bin/bash
    useradd -u 660 -g gp02 -G gp01,gp03 -d /tmp/dog -s /bin/bash dog

groupadd命令
    作用:新建用户组
    格式:groupadd [选项]组名
    选项:-g:指定用户组的组id
    [root@localhost ~]# groupadd gp01 
    [root@localhost ~]# groupadd gp02
    [root@localhost ~]# groupadd gp03
    [root@localhost ~]# tail /etc/group
    gp01:x:506:
    gp02:x:507:
    gp03:x:508:

id命令

作用:显示指定用户的id信息
格式:id[选项]用户名
选项:
     -u:显示用户的UID
     -g:显示用户的主组的ID
     -G:显示用户的全部租的ID列表

     id -g hhhhh 
     useradd 
    [root@localhost ~]# useradd -u 670 -g gp01 -Ggp02,gp03 hhhhh
    [root@localhost ~]# id hhhhh
    uid=670(hhhhh) gid=506(gp01) groups=506(gp01),507(gp02),508(gp03)
    [root@localhost ~]# id -G hhhhh
    506 507 508
    [root@localhost ~]# id -g hhhhh
    506
    [root@localhost ~]# id -u hhhhh
    670

passwd命令

作用:修改用户的密码(给用户设置密码)
格式:passwd[选项]用户名
注意:
    1:passwd 用户 修改指定用户的密码
    2:passwd 修改当前用户的密码
    3:默认情况只有root用户,才能修改其他用户的密码,普通用户只能修改自己的密码
    选项:
    -l:锁定用户(只有root才能进行锁定操作)
    -u:解锁用户
    --stdin:从表示输出来读取内容,为用户设置密码(shell脚本中使用)

影子文件 /etc/shadow

作用:保存密码
root:$6$HhL6V5BM$f29xu.FUgGnQqNtmqLGAyOy/fLMlF/JepDTfgoaqvC4.b7wiVmMc7i3HRDMVNdYQACOK9d3.wsgbZi1hPAEoj/:17997:0:99999:7:::
第一个字段:login name :系统中存在的用户名
第二个字段:encrypted password :这里存放的是加密后的密码(单向加密)
        1:如果密码段中出现!或*,那么就不能用此密码登录系统
        2:如果密码段为空,则表示空密码,但是系统往往禁止使用空密码登录
        3:如果密码开头是*,表示密码被锁定了

第三个字段:date of last password change:密码上次修改的日期,这里所写的是举例
        1970-1-1所经过的天数。
        (1)如果该字段为0,会要求用户在下次登录的时候修改密码
        (2)该文件不能为空
第四个字段:minimum password  age ,两次修改密码的最短时间
        1、为空或者为0,表示没有最短时间限制

第五个字段:maximum password age:密码的最长有效期
        1、如果字段为空或者99999,表示不限制最长有效期
        2、如果最长时间小于最短时间,则禁止该用户修改密码
第六个字段:password warning period
        指定在密码到期前N天发送报警信息
        1、如果为0,表示不会自动发送报警信息
        2、在此期间内,用户可以正常登陆系统
第七个字段:password inactivity period:密码的非活动时间
        1、在此期间登陆系统的时候,必须先修改密码才能登陆系统。
        2、如果在此阶段仍然没有修改密码,那么就真的登陆不上了(找管理员处理)
第八个字段:account expiration date:用户的过期日期
        1、表示方式也是用距离1970.1.1所经过的天数
        2、该字段为空,表示该字段永不过期
        3、0表示用户被禁用

第九个字段:reserved field :尚未使用

注意:
密码过期:修改密码可以继续使用
账户过期:账户再也不能登录系统

/etc/passwd <<<用户基本信息 ,useradd新建用户,用户的信息保存在这里
/etc/group  <<<用户组信息,groupadd新建用户组,用户组的信息保存在这里。
/etc/shadow <<<用户的密码文件,passwd的时候,其实就是修改这个文件中的内容

userdel命令

作用:删除用户
    格式: userdel [options] 用户名
    选项:
    -r :在删除用户的同时,删除用户的家目录

chsh命令

作用:修改用户的shell类型
格式:chsh[-s type]username
(本质上就是修改/etc/passwd中的内容)

chfn命令

作用:修改用户的注释信息

usermod命令

作用:修改用户的基本信息(/etc/passwd)
格式:usermod [options]username
选项:
    -g GID:修改基本组
    -G GID: 修改附加组
    -u UID:修改uid值
    -C string:修改用户的描述
    -d /path/dir:修改用户的家目录
    -s SHELL:修改用户的shell类型
    -l newName:修改用户的名称
    -L 锁定用户
    -U 解锁用户

su命令

作用:切换用户
格式:[options]用户
选项
    -[l]:切换用户,并且继承用户的环境变量
    -c 命令:在不切换用户情况下,以指定用户的身份来执行命令

注意:

su切换用户后返回,需要执行命令exit

例子:以root身份执行mkdir命令

$ su - -c "mkdir /abc1" root

生产环境的注意事项:

在生产环境中,如果员工离职,通常是禁用用户,在短时间内是不会删除用户的,更不会删除用户的家目录以及家目录中的文件。

禁用用户

修改shell类型/sbin/nologin
在密码前加上!
设置账户的过期时间为0(密码文件的第八段)

权限

r:读  可以执行cat、head、more、less等命令读取文件中的内容,也可以用vi打开并读取文件中的内容
w:写  可以用vi或者重定向等操作文件中写入内容或者修改其中的内容
x:执行 可以执行文件(把程序转换成进程)

目录的权限

r:可以执行ls命令来查看目录下的文件有哪些
w:可以在目录下执行文件的创建和删除等操作
x:可以执行cd命令

用户的角色有三类

属主用户(u)user
属组用户(g)group
其他用户(o)other
全部用户(a)all

文件的权限位一共有10位
第一位:表示文件的类型

-:一般文件
d:目录
l:链接文件
s:套接字文件
第二到第四位:表示文件的属主所具有的权限
第五到第七位:表示文件的属组的组内用户所具有的权限
第八到第十位,表示系统中的其他用户所具有的权限
注意:
1、每一类用户的权限的顺序都是:读权限、写权限、执行权限
2、如果用户有对应的权限,就出现字符,如果没有对应的权限就用-表示。

例子:[root@localhost tmp]# ls -l 1.txt 
       -rw-r--r-- 1 root bin 149 Apr 16 18:22 1.txt
文件的属主权限:可读可写
文件的属组用户权限:只读权限
其他用户的权限:只读权限

chown命令

作用:修改文件的属主
格式:chown userName [-R]fileNAme
选项: -R 在修改目录的时候,将目录和目录中的文件都一并修改
例子:将文件a.txt的属主改为zhangsan
chown zhangsan a.txt

例子:将目录yunwei和yunwei中的文件的属主都修改为zhangsan
chown -R zhangsan yunwei

chgrp命令

作用:修改文件的属组
例子:将文件a.txt的属组改为tom
chgrp tom a.txt
例子:将文件a.txt的属主改为zhangsan ,属组改为tom
chown zhangsan.tom a.txt 
或者
chown zhangsan:tom a.txt
注意:
修改属主或者属组的时候,那个用户名和组名是存在的,否则报错。

chmod命令

作用:修改文件的权限
格式:chmod 权限  -R fileName
选项:-R 
方式:
    +:增价某项权限
    -:去除权限
    =:将权限修改为指定的类型(和原来的权限无关)

例子:修改文件a.txt的权限
去除属主的写权限
将属组的权限设置为读和写
给其他用户添加写权限
chmod u-w,g=rw,0+w a.txt

例子:给全部用户都添加上执行权限
chmod ugo+x a.txt
或者
chmod a+x a.txt
或者
chmod +x a.txt

例子:去除其他用户的全部权限
chmod o=  a.txt
chmod o-rwx a.txt

基于数字表示文件的权限

r:4
w:2
x:1
---   000   0
--x   001   1
-w-   010   2
-rx   011   3 
r--   100   4
r-w   101   5
rw-   110   6
rwx   111   7

例子:将文件a.txt的属主改为可读可写,属组改为可读,其他用户没有任何权限

#chmod 640 a.txt

创建用户的原理

和用户相关的文件
1、/etc/passwd
2、/etc/shadow
3、/etc/group
4、/etc/skel                      <<<<用户家目录的模版
5、/etc/login.defs                <<<<控制新建用户的默认属性
6、/etc/defaults/useradd          <<<<控制新建用户的默认属性
7、/var/spool/mail/用户名

新用户的家目录如果生成

1、将/etc/skel目录复制home下,改名为和用户名相同
2、将该目录的属主和属组改为用户名
3、将该目录的权限设改为700
假设新建一个用户laosun
#cp r /etc/skel /home/laosun
#chown -R laosun.laosun /home/laosun
#chmod -R 700 /home/laosun

MAIL_DIR    /var/spool/mail 指定新建用户的邮件文件的默认位置
(默认邮件文件的名称和用户名相同)
PASS_MAX_DAYS   99999
新用户的密码最长有效期

PASS_MIN_DAYS   0
修改密码最短间隔时间

PASS_MIN_LEN    5
普通用户密码的最短长度

PASS_WARN_AGE   7
密码到期前警告时间

UID_MIN           500
新建普通用户的默认UID最小值

UID_MAX         60000
新建普通用户的默认UID最大值

GID_MIN           500
新建普通用户的默认GID最小值

GID_MAX         60000
新建普通用户的默认GID最大值

CREATE_HOME yes
是否默认创建用户家目录

UMASK           077
反向掩码值(用来控制新建文件和目录的默认权限值)

USERGROUPS_ENAB yes
当用户组中没有用户了,是否删除用户组

ENCRYPT_METHOD SHA512
指定加密算法
SHA512
MD5

加密后的密码由三部分构成

$6$qSBbNTqA$ESH1UDekytAKPw4olQNulWQv/uZxOJETUQOcB
$加密算法$随机字符串$加密后的数据
说明:
加密算法:
 1、表示MD5加密
 6、SHA512加密

vim /etc/default/useradd 

# useradd defaults file
GROUP=100                
HOME=/home               <<<<<默认普通用户的家目录的位置
INACTIVE=-1              <<<<<设置新用户账号是否过期。-1表示不启用
EXPIRE=                  <<<<<设置新建账户的过期日期,空白表示不启用
SHELL=/bin/bash          <<<<<设置新建用户的默认shell类型
SKEL=/etc/skel           <<<<<指定新建用户的家目录模版目录
CREATE_MAIL_SPOOL=yes    <<<<<设置是否给新建的用户创建用户邮件

新建用户

useradd
passwd

完成的操作

1、/etc/passwd 添加一行
2、/etc/shadow 添加一行
3、/etc/group  添加一行
4、创建用户家目录
5、创建用户邮件文件

例子:创建用户timi,要求uid 777,主组hadoop (800)

附加组 python (850) hbase(860) 家目录 /home/timi
描述 i am timi
密码设置为123 最少使用3天才能修改,最长使用30天,到期
前5天发送报警,非活动时间2天。

实现步骤:

1、创建用户基本信息(/etc/passwd)
vim /etc/passwd
timi:x:777:800:i am timi:/home/timi:/bin/bash

2、检查用户
id timi
3、使用openssl来生成密码
格式:openssl -1 --salt "string" 
说明:
    -1 表示md5加密算法
    --salt表示在加密的时候掺入杂志(提升安全性)
[root@localhost ~]# openssl passwd -1 -salt "abc123"
Password: 
$1$abc123$uE7.dLhrmG/qKHqAIlwPi.

4、修改密码文件

timi:$1$abc123$uE7.dLhrmG/qKHqAIlwPi.:18005:3:30:5:2::

5、创建用户组
    vim /etc/group

    hadoop:x:800:
    python:x:850:timi
    habse:x:860:timi

6、创建用户家目录
# cp -r /etc/skel /home/timi
# cd /home/
# chown -R timi.hadoop /home/timi/
# chmod -R --reference=*** timi   ***已经存在于/home中
    (把timi的权限参照改为***的权限)
7、创建用户邮件
cd /var/spool/mail/
ls
touch timi
chmod 660 timi
chown timi.mail timi
8、测试用户是否可以正常使用

补充: 
#useradd guizi
useradd 警告:此主目录已经存在。
不从sekl目录里向其中复制任何文件。   <<<<<1
正在创建信箱文件,文件已存在         <<<<<2
新建用户出现这个错误信息,就表示
1、表示用户的家目录已经存在
2、表示用户的邮件文件已经存在

当前题目:linux中用户与用户组命令的使用方法
转载来于:http://pwwzsj.com/article/iehigp.html