Linux用户管理

一、Linux用户管理概念及原理

  问题:为什么要用户管理?

  答:这不废话嘛!就比如企鹅,你得注册成一个用户才能够进行登录聊天,这样的操作在服务端就是用户组管理。想要访问服务器都必须以一个用户的身份访问。不同的用户当然权限不同,比如QQ会员就和普通QQ用户权限不一样。所以需要用户管理以及用户组管理。

  需要掌握的内容,我们需要掌握用户(用户组)的创建和删除,权限的增改等命令。了解其底层原理(一般都是通过/etc/passwd、/etc/shadow、/etc/group等文件来管理)。

  用户组的概念

    1、每个用户至少属于一个用户组

    2、每个用户组可以包括多个用户

    3、同一用户组的用户享有该组共有的权限

二、Linux用户管理相关配置文件  

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

  内容中是每个用户的条目,例:

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

  用户名:密码位:UID:组ID:描述信息:宿主目录:命令解释器(shell)(命令解释器写错或是写nologin的话用户无法登陆)

  其中第二位密码位为x是有原因的,因为/etc/passwd文件是需要在操作中被读取的,所有用户都具有可读的权限,这样如果一个用户读取了passwd的内容,就可以看到其他用户的密码了。这样安全性无法得到保障。而真正的密码保存在/etc/shadow 

2、用户类型

  超级用户(root,UID=0)通过更改/etc/passwd中用户的UID为0可以获得和root一样的权限,更改其他用户的密码不会被最大时间间隔或最小时间间隔限制

  普通用户(UID=500-60000)

  伪用户(UID=1-499)

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

      bin、daemon、shutdown、halt等,任何Linux系统默认都有这些伪用户

      mail、news、gamespot、apache、ftp、mysql、及sshd等,与系统进程相关

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

    3、可以没有宿主目录

3、密码文件:/etc/shadow

  内容也是每个用户的条目,例: 

  root:$6$QpYf8pdA$vno62eTOoQWWuDGC8lFeukXTTuYpkZ8712tikLxmN3uBWu1TPG3WqPiLqEP6ZA0HFx55jUisx0yTyoriQEvd01:16905:0:99999:7:::

  用户:经过密文加密的密码:最后一次修改时间(Unix的创建日期起计算):最小时间间隔(要修改密码不行几天后):最大时间间隔(多少天后必须更换密码):警告时间(默认7天):

  用户的创建过程中,首先先将相关信息(文件名,密码,宿主目录(默认在/home目录下创建一个和用户名一样的目录)等)写入passwd文件中,再将密文转换到shadow中去,再复制/etc/skel中的文件到用户的宿主目录中去,这跟使用usradd命令大体上一致。用户登录时首先验证passwd和shadow文件内容。

  通过使用pwunconv和pwconv可以关闭和开启shadow的功能

4、其他配置文件  

  a、用户组文件:/etc/group  用户组的相关信息

  b、用户组密码文件:/etc/gshadow

  c、用户配置文件:

    /etc/login.defs  用户默认登录设置

    /etc/default/useradd  

  d、新用户信息文件:/etc/skel  可以在这个目录中放一些添加用户时需要加入的信息(文件),使用命令添加用户时会自动将该目录的文件添加到用户宿主目录中

  e、登录信息:/etc/motd

三、Linux用户管理常用命令 

  1、用户管理命令

    1、添加用户useradd

    2、删除用户userdel -r [username] 想要彻底删除就要带上选项“r”,否则只是删除/etc/passwd、/etc/shadow、/etc/group、/etc/gpasswd中相关信息,但是/home目录下的宿主目录和/var/spool/mail下的邮箱目录都没有删除。这样再次创建同名的文件时会报错。无法创建。

    2、添加组groupadd

    3、用户添加进组里

      ·usermod -G [groupname] [username]

      ·gpasswd -a [username] [groupname]

        -a  添加用户到用户组

        -d  从用户组中删除用户

        -A  设置用户组管理员

        -r  删除用户组密码

        -R  禁止用户切换该组

    4、授权多个用户能够操作同一文件。如果是单个用户的话,修改该文件的所有者就可以了,但是如果需要多个用户对该文件有某类权限时,就需要用到用户组的概念。

      将多个用户添加到一个用户组中,修改该文件的所属组,再设置相关权限即可。例:授权用户jack和tom对目录software有写操作

      #groupadd softadm    创建一个用户组

      #usermod -G softadm jack  向这个用户组添加多个用户

      #gpasswd -a tom softadm

      #chgrp softadm /software  改变该目录的所属组

      #chmod g+w /software    更改所属组的权限

  2、用户组管理命令

    groupadd  添加用户组

    groupdel  删除用户组

    groupmod  修改用户组

    groups  查看一个用户隶属哪些用户组

    newgrp  切换用户组

  3、常用命令

    pwck  检测/etc/passwd文件

    vipw  (专门)编辑/etc/passwd文件,因为大多数的文本编辑命令不会锁定文件(指多个用户可以同时修改文件)vipw可以锁定passwd文件

    id  查看用户id和组信息

    finger  查看用户详细信息

    su  切换用户(su -   环境变量也会切换)每个用户都能够使用su命令,这样不好,因为每个用户都可以使用su切换到root,然后猜密码,不安全,应当限制su命令的使用权限,具体请看

    passwd -S  查看用户密码状态

    who 、w   查看当前登陆用户信息

四、特殊权限SetUID及粘着位(SetUID,SetGID,粘滞位)

  思考:有一个很奇怪的现象,

  

  以上截图可以看出,普通用户对shadow和passwd文件都没有写权限,那么普通用户是怎么修改密码的呢?

  答案:问题的关键在于passwd这个改密码的命令。查看该命令文件的权限

  

  可以看出所有者的权限是rws,其中的s表示有SetUID的权限。

  1、SetUID的定义:当一个可执行命令(文件)具有SetUID权限,用户执行这个程序时,将以这个程序的所有者身份执行(如果所有者是root,就变身成root)。

可以通过以下命令来添加SetUID权限

    chmod 4755 [文件名]  4表示SetUID的权限位

    chmod u+s [文件名]

  注意:SetUID这样的权限是有风险的,比如vi命令加上SetUID权限,就会让所有文件都可以肆意修改。

  2、类似的,还有SetGID的概念:具有SetGID的文件执行的时候是以该文件所属组的身份执行

    chmod g+s [文件名]

    chmod 2755 [文件名]

  3、粘滞位t,与SetUID,SetGID对应,作用与其他人的权限

    当一个目录权限为777,每个用户都可以添加删除文件(w权限),设置了粘滞位后,只有文件的所有者才可以删除该文件。比如/tmp文件,一个用户不能删除另一个用户的文件。

  4、查找具有SetUID和SetGID的文件

    find / -perm -4000 -o -perm -2000  在根目录下查找具有SetUID和SetGID的文件

五、管理员授权

  1、限制su命令的使用权限

    通过添加一个用户组,只有root和属于该组的用户有su的使用权限

    1、groupadd sugroup  添加一个用户组

    2、chmod 4550 /bin/su  改变/bin/su命令的权限,将其他人的权限改为---

    3、chgrp sugroup /bin/su  将/bin/su的所属组改为sugroup

    4、gpasswd -a [username] sugroup  添加用户进sugroup

  2、sudo,让一个用户可以以root的身份执行某个命令,可以具体到只能使用命令的某个选项

    sudo是一个软件,Linux默认会进行安装。用来配置一个用户的管理权限非常方便

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

    -不会泄露root口令

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

    通过更改配置文件来进行用户对某个命令的权限设置,使用visudo命令来配置

    格式:用户名(组名) 主机地址=命令文件路径(要是绝对路径,否则默认在当前路径下查找)

六、批量添加用户

  方法一

    1、newusers 导入用户信息文件  用vi按/etc/passwd的格式(用户名:密码位:UID:组ID:描述信息:宿主目录:命令解释器(shell))写一个用户文件。使用newusers命令之后会自动在/etc/passwd文件中添加用户信息,并且自动创建宿主目录(手动添加不会自动创建)

    2、pwunconv  关闭shadow password功能

    3、chpasswd  导入密码文件  同样要用vi编写一个密码信息文件,格式([用户名]:[密码])

    4、pwconv  开启shadow password功能,将密码写入shadow文件

   方法二

    shell编程方法

原文地址:https://www.cnblogs.com/njupt-Qsimple/p/5402080.html