zoukankan      html  css  js  c++  java
  • Linux学习笔记(12)用户和用户组管理

    越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在Linux中主要是通过用户配置文件来查看和修改用户信息

    1 用户信息文件

    (1)用户信息文件/etc/passwd

    vim命令显示该文件的内容:

    root:x:0:0:root:/root:/bin/bash
    
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    可以发现,该文件的每一行共有7个字段。其中:

    第1个字段是用户名称;

    第2个字段是密码标志;

    第3个字段是UID(用户标志),其中0表示超级用户(当普通用户的UID改为0时,服务器将该用户视为超级用户)。1~499为系统用户(伪用户),不能登陆,也不能删除,500~65535为普通用户,因此,新建的第一个用户的UID即为500。

    第4个字段为GID(用户初始组ID)。

    初始组是指用户一登陆就立即拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。

    附加组是指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

    第5个字段为用户说明。可以添加,也可以不添加。

    第6个字段为家目录。普通用户的家目录一般为/home/用户名/,超级用户的家目录为/root/。

    第7个字段表示登陆之后的Shell。Shell是Linux的命令解释器,除了标准的Shell是/bin/bash之外,如果暂时禁用用户时,可将其写为/sbin/nologin。

    (2)影子文件/etc/shadow

    1)/etc/shadow的内容:

    root:$6$NvfaINezKBg3Cqn7$bB5im5NRggTOa45clyXAXjud4YDhyDlTUgBfqy51UieAx1aUOreJCyPkoaG4MRUkSJGp2Xd9lnqXPIHEfM.4A0:16363:0:99999:7:::
    
    bin:*:15980:0:99999:7:::
    
    daemon:*:15980:0:99999:7:::

    可以发现,影子文件由9个字段组成。其中:

    第1个字段表示用户名。

    第2个字段表示加密密码。CentOS 6.5已经加密算法从MD5升级为SHA512散列加密方法。如果密码是"!!"或"*"代表没有密码,不能登陆,即为伪用户。

    第3个字段为密码最后一次修改日期,使用1970年1月1号作为标准时间,每过一天时间戳加1。

    第4个字段为两次密码修改设定的间隔时间(该时间基于与第3个字段)。

    第5个字段表示密码有效期(和第2字段相比)。

    第6个字段表示密码修改到期前的警告天数(和第5字段相比)。

    第7个字段表示密码过期后的宽限天数(和第5字段相比)。

    第8个字段表示账号失效时间(要用时间戳表示)。其中0表示密码过期后立即失效,-1表示密码永远不会失效。

    第9个字段保留。

    2)时间戳的换算

    把时间戳换算为日期,其命令为:

    [root@localhost ~]# date -d "1970-01-01 16461 days"
    
    Mon Jan 26 00:00:00 CST 2015

    将日期换算为时间戳,其命令为:

    [root@localhost ~]# echo $(($(date --date="2015/01/26" +%s)/86400+1))
    
    16461

    (3)组信息文件和组密码文件

    1)组信息文件/etc/group

    [root@localhost ~]# vim /etc/group
    
    root:x:0:
    
    bin:x:1:bin,daemon
    
    daemon:x:2:bin,daemon
    
    sys:x:3:bin,adm
    
    adm:x:4:adm,daemon

    从组信息文件中可以看出,共有4个字段

    第1个字段为组名;

    第2个字段为组密码标志(组密码不常用);

    第3个字段为GID(组ID);

    第4个字段为组中附加用户。

    2)组密码文件/etc/gshadow

    [root@localhost ~]# vim /etc/gshadow
    
    root:::
    
    bin:::bin,daemon
    
    daemon:::bin,daemon
    
    sys:::bin,adm
    
    adm:::adm,daemon

    组密码文件也具有4个字段

    第1个字段为组名;

    第2个字段为组密码;

    第3个字段为组管理员用户名;

    第4个字段为组中附加用户。

    2 用户管理相关文件

    1)用户的家目录

    普通用户的家目录一般为/home/用户名/,所有者和所属组均为此用户,权限为700

    超级用户的家目录为/root/,所有者和所属组都是root用户。如果将普通用户修改为超级用户时,普通用户的家目录不会改变

    2)用户的邮箱

    新建用户的邮箱的路径一般为/var/spool/mail/用户名

    3)用户模板目录

    用户的模板目录为/etc/skel每创建一个用户,用户的家目录都会从该目录下拷贝

    3 用户管理命令

    (1)useradd

    1)格式为:useradd [选项] 用户名

    其中:-u(UID)表示手工指定用户的UID号,-d(家目录)表示手工指定用户的家目录,-c(用户说明)表示手工指定用户的说明,-g(组名)表示手工指定用户的初始组,-G(组名)表示指定用户的附加组,-s(Shell)表示手工指定用户登录的shell,默认为/bin/bash

    2)添加默认用户

    例:添加默认用户ws:

    [root@localhost ~]# useradd ws

    该操作修改了用户的信息文件,可通过如下命令查看:

    [root@localhost ~]# grep ws /etc/passwd
    
    ws:x:500:500::/home/ws:/bin/bash
    
    [root@localhost ~]# grep ws /etc/shadow
    
    ws:!!:16436:0:99999:7:::
    
    [root@localhost ~]# grep ws /etc/group
    
    ws:x:500:
    
    [root@localhost ~]# grep ws /etc/gshadow
    
    ws:!::
    
    [root@localhost ~]# ll -d /home/ws/
    
    drwx------. 2 ws ws 4096 Jan  1 20:26 /home/ws/
    
    [root@localhost ~]# ll /var/spool/mail/ws
    
    -rw-rw----. 1 ws mail 0 Jan  1 20:26 /var/spool/mail/ws

    例:添加指定用户:

    [root@localhost ~]# useradd -u 550 -G root,bin -d /home/ws1 -c "test user" -s 
    
    > /bin/bash ws1

    其中""表示换行。

    3)用户默认文件

    ① /etc/default/useradd

    [root@localhost ~]# vim /etc/default/useradd
    
    # useradd defaults file
    
    GROUP=100                            #用户默认组
    
    HOME=/home                         #用户默认家目录
    
    INACTIVE=-1                            #密码过期宽限天数(shadow第7个字段)
    
    EXPIRE=                                   #密码失效时间
    
    SHELL=/bin/bash                     #默认shell  
    
    SKEL=/etc/skel                         #模板目录
    
    CREATE_MAIL_SPOOL=yes     #是否建立邮箱

    ② /etc/login.defs

    PASS_MAX_DAYS   99999            #密码有效期
    
    PASS_MIN_DAYS   0                    #密码修改间隔
    
    PASS_MIN_LEN    5                    #密码最小位数
    
    PASS_WARN_AGE   7                   #密码到期警告
    
    UID_MIN          500             #最小和最大UID范围
    
    UID_MAX          60000
    
    ENCRYPT_METHOD SHA512         #加密模式

    (2)修改用户密码

    命令格式

    passwd [选项] 用户名

    用户修改自己的密码时只需输入passwd即可。其中-S表示查询用户密码状态(仅root可用),-l表示暂时锁定用户, 实际操作是在/etc/passwd文件的密码前加上了感叹号"!!",-u表示解锁用户,--stdin表示可通过管道输出的数据作为用户的密码(shell编程常用到:echo "123" | passwd --stdin ws)。

    (3)修改用户信息usermod及修改用户密码状态chage

    1)usermod命令格式

    usermod [选项] 用户名

    其中,-u表示修改用户UID,-G表示修改用户的附加组,-c表示修改用户说明,-L表示临时锁定用户,-U表示解锁用户锁定。

    2)chage命令格式

    chage [选项] 用户名

    其中,-l选项表示列出用户的详细密码状态,-d(日期)表示修改密码最后一次更改日期(shadow第3字段),-m(天数)表示两次密码修改间隔(shadow第4字段),-M(天数)表示密码有效期(5字段),-W(天数)表示密码过期前的警告天数(6字段),-I(天数)表示密码过期后的宽限天数(7字段),-E(日期)表示账号失效时间(8字段)。

    例:

    chage -d 0 ws            #该命令其实是将密码修改日期归0,这样用户一登陆就要修改密码

    (4)删除用户userdel和用户切换命令

    1)userdel命令格式

    userdel [-r] 用户名

    其中,-r选项表示删除用户的同时删除用户家目录,也可以手工修改文件删除用户名。

    2)切换命令格式

    su [选项] 用户名

    只使用"-"选项代表连带用户的环境变量一起切换,-c表示仅执行一次命令,而不切换用户身份

    例:不切换root,但执行useradd命令添加user1用户:

    su - root -c "useradd user1"

    4 用户组管理

    1)添加用户组:groupadd [选项] 组名

    其中,-g表示指定GID。

    2)修改用户组:groupmod [选项] 组名

    其中,-g表示修改组ID,-n表示修改组名(一般不建议修改)

    例:将组名tg修改为wstest:

    [root@localhost ~]# groupadd tg
    
    [root@localhost ~]# groupmod -n wstest tg

    3)删除用户组:groupdel 组名

    注意:如果组中有初始用户,不能删除该组,如果是附加用户,则不影响组的删除。

    4)把用户添加入组或从组中删除

    gpasswd [选项] 组名

    其中,-a表示将用户加入组,-d表示将用户从组中删除。

    例:新建一个用户ws1,将其加入wstest组中,然后删除:

    [root@localhost ~]# useradd ws1
    
    [root@localhost ~]# echo "ws1" | passwd --stdin ws1
    
    Changing password for user ws1.
    
    passwd: all authentication tokens updated successfully.
    
    [root@localhost ~]# gpasswd -a ws1 wstest
    
    Adding user ws1 to group wstest
    
    [root@localhost ~]# gpasswd -d ws1 wstest
    
    Removing user ws1 from group wstest
  • 相关阅读:
    四套读写方案
    如何保证ArrayList线程安全
    异常总结<经典例题>
    java.移位运算符
    java反射机制
    面试题:return和finally执行
    Spring_通过注解配置 Bean(1)
    Spring_通过 FactoryBean 配置 Bean
    Spring_通过工厂方法配置 Bean
    Spring_管理 Bean 的生命周期
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/4249867.html
Copyright © 2011-2022 走看看