zoukankan      html  css  js  c++  java
  • Linux 用户管理

    Ø  简介

    本文主要介绍 Linux 的用户管理,包括如下内容:

    1.   用户配置文件

    2.   用户管理命令

    3.   用户组管理命令

    4.   批量添加用户

    5.   用户授权

    6.   检测密码强度

     

    n  注意事项

    1)   root 是超自然用户,也是超级管理员,任何文件或命令即便没有权限,同样也可以操作(读、写、执行);

    2)   root 的用户 ID 0

     

    1.   用户配置文件

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

    /etc/passwd 保存了系统中每一个用户的信息。

    # cat /etc/passwd      #/etc/passwd 文件格式

    root:x:0:0:root:/root:/bin/bash

    abeam:x:1000:1000:Jingle abeam:/home/abeam:/bin/bash

    下面以 root 用户举例说明(包含7部分信息):

    名称

    含义

    备注

    root

    用户名

    用户登录系统的用户名

    建议不要超过8位,不要使用特殊符号或数字

    x

    密码

    密码位(并没有真实的存放密码,因为密码存放在该文件中并不安全)

    建议8位以上,大小字母+数字的组合

    0

    UID

    用户标识号

    参考用户类型

    0

    GID

    用户缺省组标识号

    参考用户组

    root

    描述信息

    例如存放用户全称等信息

    建议添加用户描述

    /root

    宿主目录

    用户登录系统后的缺省目录

    每个用户必须有个宿主目录,创建完用户后系统会在 /home/ 目录下创建一个与用户名相同的目录,用户登录系统后缺省的就是该目录。

    /bin/bash

    命令解释器

    用户使用的 Shell,默认为 bash

    bash 用的较多

    wc -l /etc/passwd      #统计有多少个用户

    45 /etc/passwd

     

    1)   用户类型(分为三类)

    n  超级用户

    系统的超级用户为 root(UID=0)用户,具有操作系统的所有权限。如果将任意一个用户的 UID 改为0,那么他也将成为超级用户。

    n  伪用户

    是为了方便管理系统,满足相应的系统进程文件属主的要求,不能登录系统。UID 1-999

    n  普通用户

    对操作系统的是有限的。UID 1000-6000

     

    2)   伪用户

    Linux 系统安装完成后,就会自动创建这些伪用户(或特殊用户)。因为在 Linux 中任何一个操作都需要由一个用户来完成,在执行一些特殊操作时就会调用伪用户来执行,起到安全的作用。

    1.   伪用户与系统和程序服务相关

    n  bindaemonshutdownhalt 等,任何 Linux 系统默认都有这些伪用户。操作系统在进行一些操作(如:关机、重启等),就会调用这些伪用户来完成;

    n  mailnewsgamesapacheftpmysql sshd 等,与 Linux 系统的进程相关。比如启动了 apache 进程,它也要对一个用户(伪用户)身份。

    2.   伪用户通常不需要或无法登陆系统

    3.   可以没有宿主目录

     

    3)   用户组

    n  每个用户都至少属于一个用户组,也可以属于多个用户组;

    n  每个用户组可以包含多个用户;

    n  同一用户组的用户享有该组共有的权限。

     

    2)   密码文件:/etc/shadow

    # cat /etc/shadow

    root:$6$qHdvLD8rTbvRb5AB$qvhMzK7WaZbav64BlRw3wM7GX7umOuswLATWB4BMUMOtCiPYwnEiIUEmcsli8q4ob3A7CujzxQ7j9eJ6JDHvc.::0:99999:7:::

    abeam:$6$vlGBridFq362UuwH$lLK4gqBU68WkenXW7YUdX07miU/KQcz0HhtdDqsK10GYok0.CFUbyZcOWagQGkb91JPpV0LcOYctd1cLEsYQm/::0:99999:7:::

    下面以 root 用户举例说明(包含9部分信息):

    名称

    含义

    备注

    root

    用户名

    用户登录系统的用户名

     

    $6$qHd…

    密码

    加密的密码

    用户的真实密码,如果将该信息为空,表示用户登录时可以不需要输入密码;如果!!,表示禁止登录(或未设置密码)。

    最后修改时间

    用户最后一次修改密码的天数

    man 5 shadow

    0

    最小时间间隔

    两次修改密码之间的最小天数

    man 5 shadow

    99999

    最大时间间隔

    密码保持有效的最多天数

    多少天后强制用于修改密码

    7

    警告时间

    从系统刚开始警告到密码失效的天数

    用户密码到期前多少天提示用户

    账号闲置时间

    账号闲置时间

    用户多久没有登录了,空表是没有闲置

    失效时间

    密码失效的绝对天数

    密码失效多长时间了

    标志

    一般不使用(保留字段)

     

     

    问题:Linux 中为什么密码需要存在另一个文件(/etc/shadow)中?其实是为了安全考虑,以下是两个文件的权限:

    # ls -l /etc/passwd

    -rw-r--r--. 1 root root 2355 1  12 18:38 /etc/passwd

    # ls -l /etc/shadow

    ----------. 1 root root 1385 3  22 13:30 /etc/shadow

    可以看到 passwd 文件每个用户都有读权限,而 shadow 只有 root 才有读和写权限,这样就保证了密码文件的安全性。

    当创建用户或修改密码时,首先依然是将密码写入 passwd 文件中,然后再将密码转换到 shadow 文件中,最后将 passwd 中的密码采用 x 密码位替换掉。而这个步骤都是有系统去完成的,对用户是不可见的。

    Linux 中有两个命令,有两个命令(pwunconvpwconv)完成密码的转换,例如:

    pwunconv 将密码转到 passwd 文件中,并将 shadow 文件删除;

    pwdconv 将密码转到 shadow 文件中,并将 passwd 密码改为密码位(x)

     

    n  手动创建新用户

    掌握了 passwdshadow 文件后,其实我们可以手动编辑这两个文件,完成用户的创建,例如(创建一个 user2 用户):

    1.   编辑 /etc/passwd 文件,添加一个用户:

    # vi /etc/passwd

    2.   创建宿主目录

    # mkdir /home/user2

    3.   更改所有者

    因为是 root 用户创建的,要所有者改为 user2,所属组就先不改了。

    # chown user2 /home/user2

    4.   编辑 /etc/shadow 文件,添加用户的密码:

    # vi /etc/shadow

    5.   尝试登陆 user2 用户

    6.   解决登陆后提示符的问题

    其实当添加新用户后,还需要添加环境变量和一些配置文件,也就是 /etc/skel 中的文件,这些文件是隐藏文件,我们只需要将这些文件拷贝到新用户的宿主目录下即可。

    [root@localhost skel]# cp -rf . /home/user2

    7.   再次登录系统

    说明:因为组 ID 不存在而导致。

     

    3)   用户组文件:/etc/group

    cat /etc/group

    root:x:0:

    下面以 root 用户举例说明(包含4部分信息):

    名称

    含义

    备注

    root

    组名

    用户登录时所在的组

    建议不要超过8位,有意义的组名称

    x

    组密码

    组密码位

    一般不使用。用于不是组中的成员时,如果知道组密码的情况下,可以登录改组享有该组的权限。

    0

    GID

    组标识号

     

    组内用户列表

    所属组该组的所有用户列表(不包含缺省组为该组的用户)

    用户之间以(,)逗号分隔

     

    4)   用户组密码文件:/etc/gshadow

    # cat /etc/gshadow

    root:::

    mygroup5:$6$nhMqq/yV2OVjCk3t$3hRvAdlz7qb/Wq2eFM8EkhU4BWNXjPeopcxd26/OO6W5jueOHc5H0e4gi/7kV6LmadGaq0tfK6KWRlFcvSIs20:myuser4:myuser4

    下面以 mygroup5 用户举例说明(包含4部分信息):

    名称

    含义

    备注

    mygroup5

    组名

    必须是系统中已经存在的有效组

     

    $6$nhM…

    组密码

    加密了的密码

     

    myuser4

    管理员

    管理员可以更改组密码和成员

     

    myuser4

    组内用户列表

    属于该组的所有用户列表

    用户之间以(,)逗号分隔

     

    5)   用户配置文件:

    1.   /etc/login.defs

    MAIL_DIR        /var/spool/mail     #邮件存放的位置

    PASS_MAX_DAYS   99999              #shadow 中最大时间间隔的默认值

    PASS_MIN_DAYS   0                  #shadow 中最小时间间隔的默认值

    PASS_MIN_LEN    5                  #密码的最小长度

    PASS_WARN_AGE   7                  #shadow 中警告时间的默认值

    UID_MIN         1000               #普通用户最小UID

    UID_MAX         60000              #普通用户最大UID

    GID_MIN         1000               #用户组最小GID

    GID_MAX         60000              #用户组最大GID

    CREATE_HOME     yes                #添加用户后是否自动创建宿主目录

    UMASK           077                #创建用户和文件的缺省权限

    ENCRYPT_METHOD SHA512              #密码的加密方式

     

    2.   /etc/default/useradd

    GROUP=100                  #添加用户未指定组时的缺省组

    HOME=/home                 #指定默认的宿主目录

    INACTIVE=-1                #用户是否被禁用,-1未禁用,其他为禁用

    EXPIRE=                    #账号的失效时间

    SHELL=/bin/bash            #缺省的 Shell/etc/shells 可以查看系统中的所有 Shell

    SKEL=/etc/skel             #新添加用户的配置文件目录

    CREATE_MAIL_SPOOL=yes      #创用户后是否创建于用户同名的,用于保存邮件的目录(也就是在 /etc/login.defs 中的 MAIL_DIR 指定的目录下创建)

     

    6)   新用户信息文件:/etc/skel

    保存了创建新用户后需要拷贝到 /home 目录下所需的环境变量和配置文件。

    提示:因为每当创建用户后,都会拷贝该目录中的文件到用户宿主目录中,所以可将一些通用或说明性的文件放在该目录下。

     

    7)   登录信息:/etc/motd

    用于设置用户登录系统后显示给用户的提示信息,该文件默认为空。可以编辑该文件:

    # vi /etc/motd

    very good! 欢迎帅哥李登录,可以在/etc/motd中编辑我噢~~

     

    8)   禁止用户登录:/etc/nologin

    该文件默认不存在,如果在 etc 目录下创建该文件(不需要任何内容),则可以禁止除了 root 以外的其他用户登录系统。

     

    2.   用户管理命令

    1)   useradd / adduser

    功能描述

    添加用户

    语法

    useradd [选项] [用户名] -D 查看缺省参数

        -u UID

        -g 缺省所属用户组GID

        -G 指定用户所属多个组

        -d 宿主目录

        -s 命令解释器Shell

        -c 描述信息

        -e 指定用户失效时间

    示例:

    # useradd user3     #使用缺省参数

    说明:未指定组名时,将创新一个与用户名同名的组

    # useradd -u 888 -g mygroup2 -G mygroup1,sys -d /backup -s /bin/bash -c "添加用户(显示指定参数)" -e 2020-04-01 user4     #显示指定参数

    # grep user /etc/passwd

    # grep mygroup /etc/group

    drwx------.   3 user4 mygroup2   78 3  22 21:11 backup   #宿主目录

     

    2)   usermod

    功能描述

    修改用户信息

    语法

    usermod [选项] [用户名] -D 查看选项

        -l 修改用户名

        -L(lock) 锁定用户(密码前加了一个!

        -U(unlock) 解锁用户(删除密码前的!

        其他选项与 useradd 类似

    示例1:修改用户名、宿主目录、缺省组

    # grep user3 /etc/passwd

    user3:x:1003:1003::/home/user3:/bin/bash

    # usermod -l myuser3 -d /home/myuser3 -g mygroup4 user3

    # grep user3 /etc/passwd

    myuser3:x:1003:1004::/home/myuser3:/bin/bash

     

    示例2:将用户添加到指定的组

    # usermod -G mygroup1,mygroup2 myuser3

    # grep group /etc/group

    mygroup1:x:1002:user4,myuser3

    mygroup2:x:123:myuser3

    mygroup4:x:1004:       #注意:用户的缺省组为改组的用户不会显示在里面

     

    3)   userdel

    功能描述

    删除用户和相关文件

    语法

    userdel [选项] [用户名]

        -r 同时删除宿主目录、邮箱、组信息等,其他文件必须手动搜索删除。

    示例:

    # userdel user5         #只会删除 /etc/passwd/etc/shadow 中的内容

    # userdel -r myuserr4   #同时删除宿主目录和邮件

    注意:但不会删除所有者为该用户的文件,用户删除后这些文件的所有者将变为该用户的 UID,例如:

     

    手工删除:

    1.   删除前注意备份用户相关目录,以及确认用户宿主目录;

    2.   删除宿主目录;

    3.   删除用户相关目录(使用 find 命令查找属于某个用户或用户组的文件,find 选项 -user-uid-group-gid),例如:

    # find /home -user myuser3      #查找所有者为该用户的文件和目录

    # find /home -uid 1003 -ok rm {} ;     #根据 UID 查找,并删除确认

    4.   修改 /etc/passwd/etc/shadow/etd/group/etc/gshadow 文件(删除用户数据);

     

    4)   passwd

    功能描述

    设置或修改用户密码

    语法

    passwd [选项] [用户名]

        -d 删除密码

        -l(lock) 锁定用户(密码前加了两个!!

        -u(unlock) 解锁用户(删除密码前的!!

        -S 显示密码相关信息(最后登录时间、状态)

        -x 设置密码的有效期

        --stdin 指示密码可以从管道中获取。

    示例:

    # passwd user3          #设置或修改用户密码

    # passwd -d user3       #其实就是删除了 /etc/shadow 中的密码内容

    # passwd -l user3       #其实就是更改了 /etc/shadow 中的内容

    更改后的内容(密码前加了两个!!

    # passwd -u user3       #解锁用户密码

    # passwd -S user1       #查看用户密码状态(实际就是提取 /etc/shadow 的信息)

    echo $pwd | /usr/bin/passwd --stdin $username   #从管道获取密码

     

    5)   id

    功能描述

    显示真实和有效的 UID GID

    语法

    id [选项] [用户名]

        -g 只显示组ID

        -G 只显示附加组

        -u 只显示用户ID

    示例:

    [abeam@localhost root]$ id

    uid=1000(abeam) gid=1000(abeam) =1000(abeam),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

     

    6)   pwck

    功能描述

    检查密码文件的完整性

    语法

    pwck [选项] [passwd [ shadow ]]

    说明:当用户不能登录可以检查以上文件。

    示例:

    # pwck /etc/passwd      #检查 passwd 文件

    # pwck /etc/shadow      #检查 shadow 文件

     

    7)   vipw

    功能描述

    编辑用户信息、密码文件

    说明: vi 命令唯一的区别是,当 A 用户编辑文件时会锁住该文件,B用户只能等 A 用户退出编辑后才能进行编辑。

    语法

    vipw [选项]

        -p 编辑 /etc/passwd 文件

        -s 编辑 /etc/shadow 文件

    示例:

    # vipw -p       #编辑 /etc/passwd 文件

    # vipw -s       #编辑 /etc/shadow 文件

     

    8)   chage

    功能描述

    更改用户密码或过期信息(UNIX 不支持)

    语法

    chage [选项] [用户名]

        -l 查看用户密码设置

        -m 密码修改的最小天数

        -M 密码修改的最大天数

        -d 密码最后修改的时间

        -I 密码过期后,锁定账户的天数

        -E 密码过期日期,如果为0,表示密码立即过期;如果为-1,表示密码永不过期

        -W 密码过期前,开始警告的天数

    示例:

    # chage -l user2        #查看 user2 密码设置

    # chage -m 55 user2     #设置 user2 修改密码的最小天数

     

    9)   finger

    功能描述

    查看用户相关信息,如:宿主目录、启动 Shell、登录时间等。

    语法

    finger [-lmsp] [user ...] [user@host ...]

    示例:

    # finger            #查看当前用户登录信息

    # finger user2      #查看 user2 用户的信息

     

    10)  su

    功能描述

    切换用户

    语法

    su [选项] [-] [用户名]

    注意事项:

    1.   表示同时切换环境变量,否则不会切换;

    2.   root 切换到普通用户不需要输入密码,而普通用户切换到 root 或者其他用户必须输入密码。

    示例:

    # su user1      #不切换环境变量

    # su - user1    #切换环境变量

    错误:su: 鉴定故障。采用 sudo su 命令即可。

     

    11)  who

    功能描述

    查看系统登录用户信息

    用户信息包括:用户名、登录终端、登录IP、登录时间等。

    语法

    who [选项]

    示例:

    # who           #查看系统登录用户信息

    user2    :0           2020-03-26 09:46 (:0)

    root     pts/0        2020-03-26 10:26 (192.168.1.1)

     

    12)  启用或停用 shadow 功能

    1.   pwconv: 将用户密码转换到 /etc/shadow 文件中(新增、修改密码时调用);

    2.   pwunconv: 将用户密码回写到 /etc/passwd 文件中,并删除 /etc/shadow文件(UNIX 不支持);

    3.   grpconv: 将用户组密码转换到 /etc/gshadow 文件中(新增、修改密码时调用);;

    4.   grpunconv: 将用户组密码会回写到 /etc/group 文件中,并删除 /etc/gshadow文件(UNIX 不支持);

    5.   authconfig/etc/sysconfig/authconfig

    # authconfig       #查看 authconfig 所有选项(例如:--enableshadow--enablemd5 等)

    # vi /etc/sysconfig/authconfig  #编辑 authconfig 配置文件

    注意:authconfig 命令的修改是临时有效的,/etc/sysconfig/authconfig 是永久有效的(例如:USESHADOW=yes)

    6.   system-config-users(图形工具管理用户)

    # system-config-users      #图形化用户管理

    # system-config-date       #设置日期

    # system-config-display     #设置显卡

    # system-config-network     #设置网络

    # system-config-           #查看其他设置(system-config-xxx)

     

    13)  思考:为什么 passwdshadow 文件普通用户没有写权限,也可以修改密码?这是因为 passwd 的执行权限为s, 也就是 SetUID

    # ls -l `which passwd`

    -rwsr-xr-x. 1 root root 27832 6  10 2014 /usr/bin/passwd

    以上可见 passwd 的所有者是 root,那么将以 root 去执行 passwd 这个命令,所以每个用户都可以修改自己的密码了。

    n  示例:

    1.   touch 命令授予 SetUID 权限,看是什么情况?

    # ls -l `which touch`

    -rwxr-xr-x. 1 root root 62568 10 31 2018 /usr/bin/touch  #755

    $ touch file1       #普通用户创建一个文件

    $ ls -l file1       #所有者为当前用户(abeam)

    -rw-rw-r--. 1 abeam abeam 0 3  22 17:27 file1

     

    现在将 touch 命令授予 SetUID 权限,再次创建文件

    # chmod u+s /bin/touch      #s 表示 SetUID 权限

    或者

    # chmod 4755 /bin/touch     #SetUID 的数字标识为4

    # ls -l /bin/touch         #查看 touch 权限

    -rwsr-xr-x. 1 root root 62568 10 31 2018 /bin/touch      #4755

    $ touch file2       #普通用户在创建一个文件

    $ ls -l file2       #所有者为当前用户(root)

    -rw-rw-r--. 1 root abeam 0 3  22 17:47 file2

    注意:

    1)   如果将以上 touch 的权限设置为 6755,即同时有 SetUID SetGID,调用该命令后,创建的文件所属组也会为 touch 的所属组(root)

    2)   以上修改的 /usr/bin/touch /bin/touch 为硬链接,所以示例得以成功。

     

    2.   vi 命令被授予了 SetUID 权限

    此时,普通用户就可以修改任意的文件,比如:/etc/passwd 等。这是非常危险的,所以尽量避免将系统的命令授予 SetUID SetGID.

     

    3.   查找授予了 SetUID SetGID 的命令/程序

    # find / -perm -4000 -o -perm -2000

    说明:权限选项为[-perm],根据权限数字查找 SetUID SetGID

     

    注意事项:在安装完系统后,可以将设置了 SetUID SetGID 的程序写入到文件里面。再写一个 Shell 脚本,定义跟当前设置了 SetUID SetGID 的程序列表进行比较,就知道新增的设置了 SetUIDSetGID 的程序了。可以在安全性上得到更好的保障。

     

    3.   用户组管理命令

    1)   groupadd

    功能描述

    添加用户组

    语法

    groupadd [选项] [组名]

        -g 指定组的GID

    示例:

    # groupadd mygroup1            #自动分配GID

    # groupadd -g 123 mygroup2      #显示指定GID

    # grep mygroup /etc/group

    mygroup1:x:1002:

    mygroup2:x:123:

     

    2)   grougmod

    功能描述

    修改指定组的定义

    语法

    groupmod [选项] [组名]

        -g 修改组ID

        -n 修改组名称

    示例:

    # groupmod -g 1888 mygroup5         #修改组ID

    # groupmod -n group5 mygroup5       #修改名称为 group5

     

    3)   groupdel

    功能描述

    删除一个用户组和相关文件

    语法

    groupdel [选项] [组名]

    示例:

    # groupdel group6   #删除后 /etc/group/etc/gshadow 和所属该组的用户的组都会删除

    注意:如果存在用户为该组的用户,则不能删除。

     

    4)   gpasswd

    功能描述

    设置组密码以及管理组内的成员

    语法

    gpasswd [选项] [组名]

        -a 添加用户到用户组

        -d 从用户组中删除用户

        -A 设置用户组管理员

        -r 删除用户组密码

        -R 禁止用户切换为改组

    示例1

    # gpasswd -a myuser3 mygroup5       #将用户添加到组里

    # gpasswd -d myuser3 mygroup5       #将用户从组里删除

     

    示例2:设置用户组管理员(管理员可以对组里添加、删除成员)

    # gpasswd mygroup5                 #设置组密码

    # gpasswd -a myuser3 mygroup5       #添加用户 myuser3

    # gpasswd -a myuser4 mygroup5       #添加用户 myuser4

    # gpasswd -A myuser4 mygroup5       #设置管理员

    [myuser4@localhost root]$ gpasswd -d myuser3 mygroup5   #管理员删除用户

    # gpasswd -r mygroup5              #删除组的密码

     

    提示:当设置密码后,同样与 /etc/shadow 一样,也会在 /etc/gshadow 文件中写入用户组的密码。

    用户密码一样,同样有两个命令(grpunconvgrpconv)用于转换用户组的密码。并且 gpasswd passwd 命令一样,也是具有 SetUID

    # ls -l `which gpasswd`

    -rwsr-xr-x. 1 root root 78272 10 31 2018 /usr/bin/gpasswd

     

    5)   groups

    功能描述

    显示用户所属的所有组(包括缺省组)

    注:显示的第一个组为缺省组

    语法

    groups [选项] [用户名]

    示例:

    # groups           #查看当前用户所属的组

    # groups myuser4    #查看指定用户所属的组

    myuser4 : mygroup4 mygroup5

     

    6)   grpck

    功能描述

    检查组文件的完整性

    语法

    grpck [选项] [group [ shadow ]]

    示例:

    # grpck /etc/group      #检查 group 文件

    # grpck /etc/gshadow    #检查 gshadow 文件

     

    7)   vigr

    功能描述

    编辑用户组、密码文件

    说明: vi 命令唯一的区别是,当 A 用户编辑文件时会锁住该文件,B用户只能等 A 用户退出编辑后才能进行编辑。

    语法

    vipw [选项]

        -g 编辑 /etc/group 文件

        -s 编辑 /etc/gshadow 文件

    示例:

    # vigr -g       #编辑 /etc/group 文件

    # vigr -s       #编辑 /etc/gshadow 文件

     

    8)   newgrp

    功能描述

    登录到一个新组

    语法

    newgrp [组名]

    输入组密码进行登录

    注意:登录只是临时的,下一次登录用户会还原到原来的组,因为没有写入配置文件中

    示例1

    [abeam@localhost root]$ id

    uid=1000(abeam) gid=1005(mygroup5) =1005(mygroup5),10(wheel),1000(abeam) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    [abeam@localhost root]$ newgrp mygroup5     #登录到新组(必须有组密码)

    密码:

    [abeam@localhost root]$ groups             #查看当前用户所属的组

    mygroup5 wheel abeam

    [abeam@localhost root]$ id                 #查看 UID GID

    uid=1000(abeam) gid=1005(mygroup5) =1005(mygroup5),10(wheel),1000(abeam) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

     

    4.   批量添加用户

    1)   第一种方式(手工编写用户、密码文件批量导入)

    1.   创建用户文件

    # vi newusers.info

    2.   生成用户信息

    # newusers < newusers.info     #导入用户

    导入用户完成了2件事情:

    # grep buser /etc/passwd /etc/shadow    #1.导入了用户信息

    # ls -l /home | grep buser             #2.创建了宿主目录

    # ls -a /home/buser2    #但是没有拷贝用户环境变量和配置文件

    .  ..

    3.   创建密码文件

    # vi passwd.info

    4.   生成密码信息

    # pwunconv                 #关闭 shadow 功能

    # chpasswd < passwd.info    #导入密码

    # tail -3 /etc/passwd      #查看 passwd

    # pwconv                    #开启 shadow 功能

    5.   拷贝用户环境变量与配置文件

    # cp -r /etc/skel/. /home/buser1    #拷贝 skel 中的所有文件到宿主目录

     

    2)   第二种方式(使用 Shell 脚本批量添加)

     

    5.   用户授权

    1)   用户组授权

    # mkdir dir6        #创建目录

    # ls -ld dir6       #默认权限为755,所以非root 组的用户是没有写权限的(创建、删除文件)

    drwxr-xr-x. 2 root root 6 3  24 17:38 dir6

    # useradd user5     #创建用户user5

    $ id               #如果未指定用户组,默认会创建一个与用户名同名的组

    uid=1005(user5) gid=1006(user5) =1006(user5) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    # passwd user5      #设置 user5 的密码

    # useradd user6     #创建用户user6

    # passwd user6      #设置 user6 的密码

    # su user5          #切换为 user5

    [user5@localhost dir6]$ touch file1     #无法创建文件

    touch: 无法创建"file1": 权限不够

     

    # groupadd group6           #创建组group6

    # usermod -G group6 user5   #组中添加用户user5

    # gpasswd -a user6 group6   #组中添加用户user6

    # grep user /etc/group      #查看group6

    group6:x:1008:user5,user6  #已经包含了user5user6 用户了

    # chgrp group6 ./dir6       #改变 dir6 所属组

    # chmod g+w ./dir6          #授予组写权限

    # ls -ld ./dir6            #所属组已改变

    drwxrwxr-x. 2 root group6 6 3  24 17:38 ./dir6

    [user5@localhost dir6]$ touch file1     #创建成功

    [user6@localhost dir6]$ rm -f file1     #删除成功

     

    2)   限制用户 su root

    原理:修改 su 命令的默认权限,将 rwsr-xr-x(4755) 改为 rwsr-xr--,这样就只有所有者(root)和所属组的用户可以执行该命令了。新建一个用户组,将允许执行该命令的用户添加到该组中,并将 su 命令所属组设置为该组即可。

    # ls -li /bin/su /usr/bin/su

    说明:su 默认权限为 4755/bin/su /usr/bin/su 为硬链接文件,所以改任何一个文件都可以。

    # groupadd subgroup            #添加一个新租

    # usermod -G sugroup buser1     #将允许执行 su 的用户加入组中

    # chgrp sugroup /bin/su         #改变 su 的所属组

    # chmod 4750 /bin/su           #权限改为 rwsr-x---

    注意:经测试,chgrp 会将已存在的 SetUID 去掉,所以 chomd 需要在后面执行;并且必须保证权限存在 SetUID 权限,否则 su 将出现错误:su: 鉴定故障。

     

    [buser4@localhost ~]$ su – root    #普通用户切换 root

    -bash: /bin/su: 权限不够        #普通用户权限不够

    注意:以上设置是直接设置所有普通用户都不能使用 su 命令,并不仅限于切换为 root 用户。

     

    3)   使用 sudo 代替 su 切换为 root 的才能实现功能(如:执行命令)

    相比 su 切换为 root 的优点:

    l  在执行 sudo 命令时,临时成为 root

    l  不会泄露 root 口令;

    l  仅向用户提供有限的命令使用权限。

     

    1.   sudo 相关文件介绍

    # rpm -ql sudo

    /etc/sudoers           #sudo 的配置文件

    /usr/bin/sudo          #普通用户使用的命令

    /usr/sbin/visudo       #管理员(root)使用的配置文件编辑命令

    注意:/etc/sudoers 配置文件必须使用 visudo 命令,且必须为 root 用户才能编辑。

     

    2.   示例:授权普通用户可以添加用户(useradd)

    # which useradd

    /usr/sbin/useradd      #useradd 的绝对路径

    # hostname             #查看主机名

    localhost.localdomain

    # visudo               #编辑 sudoers 配置文件

    buser1  localhost.localdomain=/usr/sbin/useradd,/usr/sbin/userdel

    说明:

    1)   在文件末尾加入以上内容(多个命令以","逗号分隔);

    2)   如果对用户组授权,需要在组名前加%,例如:%mygroup1 192.168.1.150=/usr/sbin/useradd

    3)   如果授予用户或组可以执行 root 所有命令,可以这样设置:

    %mygroup1 192.168.1.150=(ALL)ALL

    格式:用户名(%组名) 主机名(或IP地址)=命令(绝对路径)

     

    $ sudo useradd suser1   #普通用户执行 useradd 命令

    说明:命令对用户或组授权,不代表该用户或组可以随意执行该命令,执行时必须以 sudo + 命令的方式。

    [sudo] buser1 的密码:  #第一次(每次会话)需要输入密码

     

    3.   sudo

    功能描述

    可以使普通用户或组以管理员(root)的身份执行命令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

    可执行的用户或组以及命令:必须在 /etc/sudoers 中定义,且使用 visudo 编辑和 root 用户。

    语法

    sudo [选项] [命令]

    注意:sudo 可以将可使用的命令细化到选项,或者参数。

    示例:

    $ sudo userdel suser1   #普通用户使用 sudo 执行 userdel 命令

    $ sudo -l               #查看当前用户 sudo 可以执行的命令

    (root) /usr/sbin/useradd, /usr/sbin/userdel

    $ sudo -h               #查看帮组(命令选项)

     

    概念:

    1)   sudo 可以让普通用户以 root 身份执行任何命令,并不只是 root 可以执行的命令;

    2)   sudo 执行的命令可以精确化,例如:

    buser1 192.168.1.150=/usr/sbin/shutdown -h now      #表示当 buser1 使用 shutdown 命令时,只能使用该选项,不能使用其他选项。

     

    4)   精确化示例:sudo 实现用户管理某个服务(例如:Apache

    1.   权限分析:

    1)   可编辑 Apache 配置文件;

    2)   可管理 Apache 的服务;

    3)   可更新网页(站点文件等)

     

    2.   可编辑 Apache 配置文件(三种方法)

    1)   设置 Apache 所有目录、配置文件的所有者;

    2)   设置 Apache 所有目录、配置文件的所属组,授予组相应的权限,并将用户加入组中;

    3)   使用 sudo 实现,编辑 visudo 文件,例如:

    buser1 192.168.1.150=/bin/vi /etc/http/conf/httpd.conf

    说明:表示 buser1 用户可以以 root 身份执行 vi,编辑 httpd.conf 文件。

    $ sudo /bin/vi /etc/httpd/conf/httpd.conf   #buser1 编辑该文件

     

    3.   可管理 Apache 的服务

    使用 sudo 实现,编辑 visudo 文件,例如:

    buser1 192.168.1.150=/etc/rc.d/init.d/httpd start, /etc/rc.d/init.d/httpd reload, /etc/rc.d/init.d/httpd fullstatus, /etc/rc.d/init.d/httpd configtest    #分别可以执行(启动、使配置生效、查看服务状态、监测语法错误)

    $ sudo /etc/rc.d/init.d/httpd start     #buser1 启动 Apache

    $ sudo /etc/rc.d/init.d/httpd stop      #但不能执行其他操作(未授权)

     

    4.   可更新网页(站点文件等)

    # grep DocumentRoot /etc/httpd/confi/httpd.conf     #查找网站存放的位置

    然后,对该目录修改权限(所有者为 buser1,或者使用用户组管理)。

     

    6.   检测密码强度

    1)   安装 john 软件包

    1.   第一步:下载源代码包

    下载地址:https://www.openwall.com/john/

     

    2.   第二步:下载后上传至系统 /home/abream/learn 目录下

    /home/abream/learn/john-1.9.0.tar.gz

     

    3.   第三步:解压缩到当前目录

    # tar -xzvf john-1.9.0.tar.gz

     

    4.   第四步:进入到解压目录

    # cd john-1.9.0

    # ls                #发现并不是一个标准的源代码安装包

    doc  run  src

    # ls -l ./doc       #查找 README/INSTALL

    -rw-------. 1 root root  5825 4  12 2019 README

    # cat ./doc/INSTALL #查看 INSTALL

     

    5.   安装

    [root@localhost src]# make

    # make linux-x86-64

    安装完成后,会在 run 目录下创建相关命令。

     

    提示:如果不是标准的源代码包,一定有相应的安装说明,比如:README 或在 INSTALL

     

    2)   检查、破解密码

    1.   buser1 用户信息输出到 buser1.passwd 文件中

    # grep buser1 /etc/passwd > ./buser1.passwd

     

    2.   buser1 密码输出到 buser1.shadow 文件中

    # grep buser1 /etc/shadow > ./buser1.shadow

     

    3.   buser1.passwdbuser1.shadow 和成为一个文件

    # ./john-1.9.0/run/unshadow ./buser1.passwd ./buser1.shadow > buser1.john

    # cat buser1.john

    说明:其实合成后的 buser1.john 文件内容,就是 pwunconv 后的 /etc/passwd 中的格式和内容。

     

    4.   检查、破解密码

    # ./john-1.9.0/run/john buser1.john

    提示:可以尝试“黑客字典”来破解,其实“黑客字典”只是将常见的密码写进去了。

  • 相关阅读:
    linux 系统层/用户层资源使用信息监控
    人工神经网络学习
    刷题
    使用机器学习进行气象数据分析
    kaggle 从零开始记录遇到的问题
    大数据平台资料收集
    MacOS应用cocoa application问题
    Latex学习手记(持续更新)
    Matplotlib折线图
    Android的系统架构——安卓运行库
  • 原文地址:https://www.cnblogs.com/abeam/p/15415621.html
Copyright © 2011-2022 走看看