zoukankan      html  css  js  c++  java
  • 《鸟哥的Linux私房菜》学习笔记(4)——用户和组

    一、用户和组的基本概念                                             

    1、用户  

      用户:用于获取计算机资源或服务的标识符,比如用户名。计算机处理的是UID,用户名和UID的关系存储在/etc/passwd文件中,每个用户都有权限访问这个文件。

      影子口令:用户的密码存储在/etc/shadow中

      用户类别:

    • 管理员。管理员的UID为0
    • 普通用户(系统用户和一般用户)。通用户的UID 1-65535,一般用户500-60000。
    • 系统用户。系统用户1-499 。一登陆就运行的后台进程(服务)以普通用户的身份来运行,叫做系统用户。系统用户只是为了运行某一类进程,这类用户不需要登陆系统。

     2、组

      容器(用户组): 也是一个标识符,用于关联权限,方便地指派权限,每一个组都有一个GID。

      影子口令:组密码存储在/etc/gshadow

      组类别:

    • 普通组(系统组和一般组)
    • 管理员组。

    或者可以分为:

    • 私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组 ,该组即为私有组。
    • 基本组:用户的默认组  
    • 附加组,额外组:默认组以外的其它组

     二、/etc/passwd                                                

    man 5 passwd 可以查看该文件详细格式

    [root@hao ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ...
    hao:x:500:500:haohao:/home/hao:/bin/bash

    字段解析:

      1、account: 登录名

      2、password:密码。 如果是x则表示是密码占位符,真正的密码在/etc/shadow中

      3、UID

      4、GID:基本组ID

      5、GECOS:用户注释信息

      6、directory:家目录

      7、shell:用户默认shell。当前系统上所有的合法shell存在/etc/shells。

    [root@hao ~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    /bin/dash
    /bin/tcsh
    /bin/csh

     三、/etc/shadow                                                    

    [root@hao ~]# cat /etc/shadow
    root:$6$OPY00iMwaBSqsynd$uLgMkMKWSzVor5giiOkjk9tnN0pzIMEgqqudfTwnGu.9.Oxrw5DcXwffI7cVyw9nUquLGNa4VTTyl0To6gRWi.:16277:0:99999:7:::
    bin:*:15980:0:99999:7:::
    ...
    hao:$6$Ogbf1lEV5ro4510u$82.pHdwem8YndttOjmImB/MxK/2/cLZ.8He0wF5pz/AS9m4R2S2pTCG.vnHqOPs9oCL1LA2E5oR9uhLRQnUih/:16277:0:99999:7:::

    man 5 shadow可以查看文件详细格式

    字段解析:

      1、login name 登录名

      2、encrypted password:加密后的密码,如下面。如果为*或!!,则代表该用户是锁定的,也就是不允许登陆的。

    $6$OPY00iMwaBSqsynd$uLgMkMKWSzVor5giiOkjk9tnN0pzIMEgqqudfTwnGu.9.Oxrw5DcXwffI7cVyw9nUquLGNa4VTTyl0To6gRWi.:16277:0:99999:7:::

      密码的格式为$<ID>$<SALT>$<PWD>。其中ID代表所使用的加密方法,具体如下

       ID       |    Method
      -------------------------------
         1        |  MD5 (Linux, BSD)
         2a       |  Blowfish (OpenBSD)
         md5      |  Sun MD5
    
    
    For the new SHA-256 and SHA-512 methods the following values are
    selected:
    
    
         ID       |    Method
      -------------------------------
         5        |  SHA-256
         6        |  SHA-512

      SALT为加入的杂质,随机生成的,因此密码相同,杂质也不一定相同。

      3、date of last password change。上次密码更改时间(从1970年1月1号开始算起经过的天数)。

      4、 minimum password age。密码最短使用期限

      5、maximum password age 密码最长使用期限。

      6、password warning period:密码警告期限

      7、password inactivity period:密码宽限期

      8、account expiration date:密码有效期

      9、reserved field:保留字段

    常用的加密方法:

      对称加密:加密和解密使用同一个密码。

      公钥加密:每个密码成对出现,一个为私钥(secret key),一个公钥(public key)即公钥加密,私钥解密或私钥加密,公钥解密,即公钥加密只能使用与之对应的私钥机密,反之亦然。公钥加密的秘钥长度比对称加密要长的多,安全性也要比对称加密安全,但是速度要慢,一般慢三个数量级,因此公钥加密很少拿来加密数据,用于做秘钥交换。

      单向加密:或称为散列加密。不能由密文取得明文。用于实现提取数据特征码,每个数据的特征码唯一,如指纹加密。单向加密可以用来做数据完整性校验。其特性包括:

      1、不可逆。也就是只能有明文获得密文,不能由密文获取明文

      2、雪崩效应。初始条件的微小改变可能引起结果的巨大改变,防暴力破解。对inittab文件进行稍微可变,可以看出其特征码改变很大

    [root@hao ~]# cp /etc/inittab  ./
    [root@hao ~]# ls
    anaconda-ks.cfg  install.log         ??????     ??????  ??????  ??????
    inittab          install.log.syslog  ?????????  ??????  ??????  ??????
    [root@hao ~]# md5sum inittab
    3f206e10339f61eaf8d378bf504db462  inittab
    [root@hao ~]# nano inittab
    [root@hao ~]# md5sum inittab
    11bec7e54fd168e19ca5d8cff1b5dd1c  inittab

      3、定长输出 MD5:128位  SHA1:(Secure Hash Algorithm)安全的哈希算法 160位定长输出

    三、/etc/group                                                      

     第一个字段组名 第二个字段密码占位符 第三个字段GID 第四个字段以这个组为附加组的用户列表,多个用户用逗号隔开

    [root@hao ~]# cat /etc/group
    root:x:0:
    bin:x:1:bin,daemon
    ...
    hao:x:500:
    guang:x:501:

    四、用户管理                                                            

    1、useradd(adduser)添加用户

    [root@hao ~]# which useradd
    /usr/sbin/useradd
    [root@hao ~]# ls -l $(which useradd)
    -rwxr-x---. 1 root root 103096 Dec  8  2011 /usr/sbin/useradd
    [root@hao ~]# which adduser
    /usr/sbin/adduser
    [root@hao ~]# ls -l $(which adduser)
    lrwxrwxrwx. 1 root root 7 Jul 26 20:14 /usr/sbin/adduser -> useradd

    命令格式:useradd [options] username

    [root@hao ~]# useradd guang
    [root@hao ~]# tail -1 /etc/passwd
    guang:x:501:501::/home/guang:/bin/bash
    [root@hao ~]# tail -1 /etc/group
    guang:x:501:
    [root@hao ~]# tail -1 /etc/shadow
    guang:!!:16377:0:99999:7:::
    [root@hao ~]# passwd guang
    Changing password for user guang.
    New password: 
    BAD PASSWORD: it does not contain enough DIFFERENT characters
    BAD PASSWORD: is a palindrome
    Retype new password: passwd: all authentication tokens updated successfully.
    [root@hao ~]# tail -1 /etc/shadow
    guang:$6$0ndd3rOB$OP74KA4BocxxtU87tDCUE/JGHlZbygHML9KnabirIXLJ8yQJAGdP7setenuZP1fVcOK2ZhhK05aUWYqdDBcjG/:16377:0:99999:7:::

    命令选项:

      -u:指定UID,须保证该UID未使用。如果未使用该选项,用户UID默认为/etc/passwd下的最大用户UID的下一个

    [root@hao ~]# useradd -u 1000 testuser
    [root@hao ~]# tail -1 /etc/passwd
    testuser:x:1000:1000::/home/testuser:/bin/bash

      -g:指定基本组,如果不使用该选项则默认添加一个和用户同名的基本组,如果使用该选项则一定保证该组名存在。

    [root@hao ~]# useradd -g mygroup testusergroup
    [root@hao ~]# tail -1 /etc/passwd
    testusergroup:x:1001:502::/home/testusergroup:/bin/bash

      -G:指定额外组(附加组),可以有多个。

    [root@hao ~]# useradd -G mygroup testuser1
    [root@hao ~]# tail -1 /etc/passwd
    testuser1:x:1002:1002::/home/testuser1:/bin/bash
    [root@hao ~]# tail /etc/group
    webalizer:x:67:
    tomcat:x:91:
    sshd:x:74:
    tcpdump:x:72:
    slocate:x:21:
    hao:x:500:
    guang:x:501:
    mygroup:x:502:testuser1
    testuser:x:1000:
    testuser1:x:1002:

      -c:指定注释信息

      -d:指定家目录 默认为在/home/下创建一个跟用户同名的目录为家目录。

    [root@hao ~]# useradd -c "haohao" -d /home/haohao testuser2
    [root@hao ~]# tail -1 /etc/passwd
    testuser2:x:1003:1003:haohao:/home/haohao:/bin/bash

      -s:指定shell路径。该路径需要出现在/etc/shells。默认为/bin/bash

      -r:添加系统用户。即UID在1-500之间,而且系统用户不允许登陆系统,且不存在家目录,即使路径存在。该选项通常单独使用。

    [root@hao ~]# useradd -r testr
    [root@hao ~]# tail -1 /etc/passwd
    testr:x:496:493::/home/testr:/bin/bash
    [root@hao ~]# ls /home
    guang  hao  haohao  testuser  testuser1 

      添加用户的默认信息保存在/etc/default/useradd

    [root@hao ~]# file /etc/default/useradd
    /etc/default/useradd: ASCII text
    [root@hao ~]# cat /etc/default/useradd
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

    2、userdel删除用户

    命令格式:userdel  [option] username 删除用户时,若未指定选项,其家目录不会被删除

    命令选项:

      -r:删除用户同时删除用户的家目录

    [root@hao ~]# ls /home
    guang  hao  haohao  testuser  testuser1  testusergroup
    [root@hao ~]# userdel testuser
    [root@hao ~]# ls /home
    guang  hao  haohao  testuser  testuser1  testusergroup
    [root@hao ~]# userdel -r testusergroup
    [root@hao ~]# ls /home
    guang  hao  haohao  testuser  testuser1

    3、id 查看用户的UID等相关信息

    命令格式:id [option] [username]

    命令选项:

      -u:查看UID

    [root@hao ~]# id -u testuser1
    1002

      -g:查看基本组

    [root@hao ~]# id -g testuser1
    1002

      -G:查看其附加组和基本组

    [root@hao ~]# id -G testuser1
    1002 502

      -n:显示名字而不是ID

    [root@hao ~]# id -u -n testuser1
    testuser1
    [root@hao ~]# id -g -n testuser1
    testuser1
    [root@hao ~]# id -G -n testuser1
    testuser1 mygroup

     4、finger查看用户账号信息

    命令格式: finger username

    5、usermod修改用户账号属性

    命令格式:usermod [option] username。用法同useradd,

    命令选项:

      -u:更改用户uid

      -g:更改用户GID

      -G:更改用户附加组,即覆盖原有的附加组。一般同-a选项一同使用,即添加用户到新的附加组,原来的附加组不被覆盖。

      -c:更改注释信息

      -d:更改家目录。如果原来家目录下已有该用户的文件夹,原家目录下的文件夹不会被迁移到新的家目录下。一般和-m选项一同使用,则可以使其原家目录下文件  迁移到新的家目录下。

      -s:更改shell。

      -l:更改用户名

      -L:锁定账号

      -U:解锁用户

    6、chsh(change shell)修改用户shell

    root@hao ~]# finger testuser1
    Login: testuser1                  Name: 
    Directory: /home/testuser1              Shell: /bin/bash
    Never logged in.
    No mail.
    No Plan.
    [root@hao ~]# chsh testuser1
    Changing shell for testuser1.
    New shell [/bin/bash]: /bin/tcsh                    
    Shell changed.
    [root@hao ~]# finger testuser1
    Login: testuser1                  Name: 
    Directory: /home/testuser1              Shell: /bin/tcsh
    Never logged in.
    No mail.
    No Plan.

    7、chfn(change finger)修改注释信息

    [root@hao ~]# chfn testuser1
    Changing finger information for testuser1.
    Name []: test
    Office []: test
    Office Phone []: 110
    Home Phone []: 110
    
    Finger information changed.
    [root@hao ~]# tail -2 /etc/passwd
    testuser1:x:1002:1002:test,test,110,110:/home/testuser1:/bin/tcsh
    testuser2:x:1003:1003:haohao:/home/haohao:/bin/bash 

    8、 passwd 修改用户密码

    普通用户只能使用不带参数的该命令更改自己的密码,管理员可以使用该命令更改其他用户的密码

    命令格式:passwd [option][username]

    root@hao:~# passwd user1
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully

    命令选项:

      --stdin(standard in ):从标准输入读取密码。经测试Ubuntu没有该参数,可以使用chpasswd命令替换,chpasswd username password,均可以用echo输出指  定的信息,然后管道给这两个命令处理,如:

    root@hao:~# echo "newpassword"|passwd user1 --stdin 
    root@hao:~# ehco "newpassword" |chpasswd user1

      -l:锁定用户账号

      -u:解锁用户

      -d:删除密码

    root@hao:~# tail -1 /etc/shadow
    user1:$6$eKF3mI4G$O3pzjIQiRodxGRw9c4SVUAQ34oi8vOMcguGW4/7LBTYK2ADppH/sPVtqsjKP9ajZamXU8SmZgtm/uWKTtaxam/:16362:0:99999:7:::
    root@hao:~# passwd -d user1
    passwd: password expiry information changed.
    root@hao:~# tail -1 /etc/shadow
    user1::16362:0:99999:7:::

    9、pwck(password check)检查用户完整性

    [root@hao ~]# pwck
    user 'adm': directory '/var/adm' does not exist
    user 'uucp': directory '/var/spool/uucp' does not exist
    user 'gopher': directory '/var/gopher' does not exist
    user 'ftp': directory '/var/ftp' does not exist
    user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
    user 'saslauth': directory '/var/empty/saslauth' does not exist
    user 'pulse': directory '/var/run/pulse' does not exist
    pwck: no changes

    五、组管理                                                                 

    1、groupadd创建组

    命令格式:groupadd [options] groupname

    命令选项:

      -g:指定GID

      -r:添加系统组

    [root@hao ~]# groupadd  -r nginx
    [root@hao ~]# tail -1 /etc/group
    nginx:x:492:

    2、groupmod修改组属性

    命令格式:groupmod [options] groupname

    命令选项:

      -g:修改GID

      -n:修改groupname

    3、groupdel删除一个组

    4、gpasswd给组加密码

    命令格式:gpasswd groupname 

    用户创建一个文件,该文件的属主为该文件,属组为该用户所在的基本组

    [root@hao ~]# useradd hadoop
    [root@hao ~]# su - hadoop
    [hadoop@hao ~]$ cd /tmp
    [hadoop@hao tmp]$ touch a.hadoop
    [hadoop@hao tmp]$ ll
    total 40
    -rw-rw-r--. 1 hadoop hadoop    0 Nov  4 12:09 a.hadoop
    drwx------. 2 hao    hao    4096 Aug  6 15:58 keyring-4BcUXT
    drwx------. 2 hao    hao    4096 Jul 27 12:49 keyring-DTEmAL
    drwx------. 2 hao    hao    4096 Jul 27 13:01 keyring-FD7mUX
    drwx------. 2 hao    hao    4096 Aug  4 16:58 keyring-YtvBn9
    drwx------. 2 hao    hao    4096 Jul 26 13:05 keyring-ZCIk4h
    drwx------. 2 root   root   4096 Jul 26 12:48 keyring-l3Td4R
    drwx------. 2 gdm    gdm    4096 Nov  4 10:00 orbit-gdm
    drwx------. 2 gdm    gdm    4096 Nov  4 09:59 pulse-0dTthpTUZIEl
    drwx------. 2 hao    hao    4096 Aug  6 15:58 pulse-1lfMnULTO8sm
    drwx------. 2 root   root   4096 Jul 26 12:48 pulse-u8BNu0nCsMTX
    [hadoop@hao tmp]$ id
    uid=1004(hadoop) gid=1004(hadoop) groups=1004(hadoop) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    5、newgrp:将用户的基本组临时切换到其他组(登陆到其他组)

    只有当用户跟所切换到的组没有任何关系时(即要切换到的组也不是该用户的附加组时),需要输入密码。可以用exit退出

    [root@hao ~]# gpasswd mygroup
    Changing the password for group mygroup
    New Password: 
    Re-enter new password: 
    [root@hao ~]# su - hadoop
    [hadoop@hao ~]$ cd /tmp
    [hadoop@hao tmp]$ newgrp mygroup
    Password: 
    [hadoop@hao tmp]$ id
    uid=1004(hadoop) gid=502(mygroup) groups=1004(hadoop),502(mygroup) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [hadoop@hao tmp]$ touch b.hadoop [hadoop@hao tmp]$ ll total 40 -rw-rw-r--. 1 hadoop hadoop 0 Nov 4 12:09 a.hadoop -rw-r--r--. 1 hadoop mygroup 0 Nov 4 12:21 b.hadoop drwx------. 2 hao hao 4096 Aug 6 15:58 keyring-4BcUXT drwx------. 2 hao hao 4096 Jul 27 12:49 keyring-DTEmAL drwx------. 2 hao hao 4096 Jul 27 13:01 keyring-FD7mUX drwx------. 2 hao hao 4096 Aug 4 16:58 keyring-YtvBn9 drwx------. 2 hao hao 4096 Jul 26 13:05 keyring-ZCIk4h drwx------. 2 root root 4096 Jul 26 12:48 keyring-l3Td4R drwx------. 2 gdm gdm 4096 Nov 4 10:00 orbit-gdm drwx------. 2 gdm gdm 4096 Nov 4 09:59 pulse-0dTthpTUZIEl drwx------. 2 hao hao 4096 Aug 6 15:58 pulse-1lfMnULTO8sm drwx------. 2 root root 4096 Jul 26 12:48 pulse-u8BNu0nCsMTX
  • 相关阅读:
    docker安装RabbitMQ
    通过Docker安装配置Mysql主从节点
    Docker基本使用命令
    flask接收post提交的json数据并保存至数据库
    前端面经
    js 仿朋友圈的时间显示 刚刚 几天前
    外部div宽度不是100%时,css设置图片宽高相等
    Vue项目图片剪切上传——vue-cropper的使用(二)
    Vue项目图片剪切上传——vue-cropper的使用
    vuex
  • 原文地址:https://www.cnblogs.com/mingcaoyouxin/p/4029849.html
Copyright © 2011-2022 走看看