Linux的用户管理

Linux账号管理与文件权限管理

Linux操作系统,不论什么发行版本,不管是Redhat系还是debain系亦或是Unix系,他们在对于系统账号管理的实现上都是基于ID号来实现的,我们在登录操作系统的时候,输入用户和密码,后台会将用户名转为ID号后在判断该账号是否存在,UID的范围是0-65535,其中,UID是0,则表示这个是超级管理员root,普通的用户会从1-60000开始算,在这里又会包含系统用户和登录用户,不同版本的系统也会有差异,比如centos6和7,那么,在centos6中,系统用户,也就是一些系统进程所需要使用的用户,比如web程序,ftp程序等,他们的范围是1-499,那么500开始创建的就是登录用户,在centos7中,系统用户则是1-999,登录用户从1000开始。

创建和管理Linux用户的命令和相关参数:

  1. useradd

   描述:创建新的账户

  用法:useradd[选项]用户名称

  我们可以使用man useradd去看下他有哪些选项,首先我们看下和useradd的相关信息都在man手册中的哪个位置,可以使用whatis useradd命令去查看

wKioL1XdJvbQSU37AAI1JLOXEpQ216.jpg



在执行后的结果中,我们看到与useradd相关的信息在man手册的第8项,那么我们可以使用man 8 useradd去查看,我们重点看下OPTIOS下面的相关信息。wKiom1XdJN_TT8e2AAQ-eXc8IPs261.jpg


那么,这里看到有很多的选项,我们常用的与useradd相关的参数有下面几种:

-c    设置账号描述信息,一般为账号全程。

-d    设置账号的home目录

-e    设置账号的失效日期,格式为YYYY-MM-DD

-g    设置账号的基本组

-G    设置账号的附加组,多个附加组需要用","隔开

-M    不创建家目录,一般与-s结合使用

-s    设置账号的登录shell,默认为bash

-u    指定账号UID


假如我们要创建一个账户叫nginx,不允许它登录,只是希望它作为nginx的进程用户,那么我们就可以使用如下命令去创建:

[root@HZ-CDN-1 ~]# useradd -s /sbin/nologin -M nginx

在比如,我们要创建一个账号mayun,他的UID是600,家目录是home下的ali_mayun,登录时所使用的shell是sh,那么我们就可以使用下面的命令去创建,创建完之后,我们可以使用id mayun去查看,这里面我们可以看到他的uid是他的用户id 后面还有,gid和groups,这个是他的组id,创建一个新用户时,系统会自动创建一个与其名字一样的组

[root@HZ-CDN-1 ~]# useradd -u 600 -d /home/ali_mayun -s /bin/sh mayun
[root@HZ-CDN-1 ~]# id mayun
uid=600(mayun) gid=600(mayun) groups=600(mayun)

2.groupadd

linux的组有基本组合附加组之分,一个用户只能加入一个基本组,但是可以加入多个附加组。我们上面说了,一个用户当创建完后系统会自动创建一个与用户名相同的组,并且设置用户加入这个基本组,linux的组由groupname/GID组成,其中超级管理员的组为0,系统用户的组为1-499,centos7为1-999,普通用户的组为500+,centos7为1000+,那么我们来看下创建组的一些参数都有哪些,还是使用如下命令去查看man手册。

[root@HZ-CDN-1 ~]# whatis groupadd
groupadd             (8)  - create a new group
[root@HZ-CDN-1 ~]# man 8 groupadd
GROUPADD(8)               System Management Commands               GROUPADD(8)
……


创建组常用的选项:

-g    设置组的ID号

比如我们要创建一个组mayun_ali 指定它的id为1000,并且我们希望将他设置为我们之前创建的mayun那小子的附加组。

(1)首选,需要创建一个组为1000的mayun_ali

[root@HZ-CDN-1 ~]# groupadd -g 1000 mayun_ali

(2) 然后执行以下命令,那么我们对比下输出的id mayun的值,可以看到区别,这里的usermod是修改创建完的用户相关信息。

[root@HZ-CDN-1 ~]# id mayun
uid=600(mayun) gid=600(mayun) groups=600(mayun)
[root@HZ-CDN-1 ~]# usermod -a -G mayun_ali mayun
[root@HZ-CDN-1 ~]# id mayun
uid=600(mayun) gid=600(mayun) groups=600(mayun),1000(mayun_ali)
[root@HZ-CDN-1 ~]#


3.usermod

描述:修改账号信息

用法:usermod[选项] 账户名称

选项:

-d    修改账户的home目录

-e    修改账户失效的日期

-g    修改用户的基本组

-G    修改用户的附加组

-a    如果要增加用户的附加组,必须加-a参数

-s    修改用户的登录shell

-u    修改用户的UID


例如,我们将刚才mayun那小子的家目录换成home目录下的alibaba,登录shell换成tcsh,并且让他能够加入taobao这个组,那么我们可以这样子去操作:

[root@HZ-CDN-1 ~]# mkdir /home/alibaba
[root@HZ-CDN-1 ~]# groupadd taobao
[root@HZ-CDN-1 ~]# usermod -d /home/alibaba/ -s /bin/tcsh -a -G taobao mayun
[root@HZ-CDN-1 ~]# id mayun
uid=600(mayun) gid=600(mayun) groups=600(mayun),1000(mayun_ali),1001(taobao)


我们刚才已经创建完mayun这个用户,并且设置了一些组的信息,但是,这个用户目前还不能登录,因为他没有密码。


4.passwd

描述:更新账号认证信息

用法:passwd [选项][账户名称]

选项:

-l    锁定账号,仅root可以使用此选项

--stdin    从管道读取密码

-u    解锁用户

-d    快速清空密码,仅root可以使用此命令


例如,设置mayun的密码,注意,我们输入密码是看不见的,你输入错了只能重新输入,没法删除。

[root@HZ-CDN-1 ~]# passwd mayun
Changing password for user mayun.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

我们要想从管道读取密码去设置mayun的账号,可以这样操作,这样子就重新设置了mayun的密码,覆盖了之前的密码。

[root@HZ-CDN-1 ~]# echo "alibaba@woshimayun" | passwd --stdin mayun
Changing password for user mayun.
passwd: all authentication tokens updated successfully.

我们现在从另外一个普通用户登录mayun这个账号,可以看到是正常可以登录的,这里的su 是switch user的意思 意思为切换用户,直接su将会使用当前用户的环境变量去登录到另外的用户,使用su - 将会使用登录后的用户环境变量去登录。

[root@HZ-CDN-1 ~]# su robin
[robin@HZ-CDN-1 root]$ su - mayun
Password: 
[mayun@HZ-CDN-1 ~]$

那么,我们在切换到root用户,使用如下命令,这样子就锁定了mayun这个账号了,他不能进行登录

[root@HZ-CDN-1 ]# passwd -l mayun
Locking password for user mayun.
passwd: Success


5.userdel

选项:

-r    删除账户以及相关文件

root@HZ-CDN-1 robin]# userdel robin  //删除robin,但是该账户的文件不会删除
userdel: user robin is currently used by process 1973
[root@HZ-CDN-1 home]# userdel -r mayun //删除mayun,但是会删除相应的家目录
userdel: user mayun is currently used by process 1945


那么,我们刚才说了这么多,创建用户,删除用,用户的账号密码信息都是保存在哪里的呢?

  1. /etc/passwd文件

系统账号的所有用户的信息都是保存在/etc/passwd这个文件下的。我们可以使用cat /etc/passwd去查看,如下所示:

[root@HZ-CDN-1 home]# 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
……
nginx:x:502:502::/home/nginx:/sbin/nologin
mayun:x:600:600::/home/alibaba/:/bin/tcsh
robin:x:601:601::/home/robin:/bin/bash

文件的格式是:登录名:x:UID:GID:comment:主目录:用户默认shell


那么,你可以看到,这个文件其实并没有密码信息,那么密码信息究竟保存在哪里呢?


2./etc/shadow文件

[root@HZ-CDN-1 home]# cat /etc/shadow
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
……
mayun:!!$6$CT0Iu7L9$yQXE2rwL5g2yIP8diu1/brnSziC5aOg.OUXZiOyOHXzvvzxv1Hi.pQ5xh5fqhKtJbNuMhy8KOneE2M6CME7Eg0:16673:0:99999:7:::
……

shadow文件是保存了用户的密码信息,这个密码不是明文的,而是经过加密的密文,并且是不可逆的单向加密。

它的格式:

login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field,它有9组字段以:隔开

(1)账号名称:必须与/etc/passwd相同才行

(2)encrypted password(加密口令),这里的密码中用户名后面的!!表示密码不可用,因为我之前已经将他禁止了。

$6$CT0Iu7L9$yQXE2rwL5g2yIP8diu1/brnSziC5aOg.OUXZiOyOHXzvvzxv1Hi.pQ5xh5fqhKtJbNuMhy8KOneE2M6CME7Eg0

大家看下这里的密码有以$分了3个子段,这里面的6表示的是加密方式,1代表md5加密,centos5x采用的是md5加密

(3)最近改动密码的日期,显示的是16673,这个是linux时间戳从1970.1.1开始到当前的时间,可以这样去计算

[root@HZ-CDN-1 home]# echo $(($(date --date="2015/08/26" +%s)/86400+1))
16673

(4)密码不可被更改的天数

(5)密码需要重新更换的天数

(6)密码需要更改期间前的警告天数

(7)密码过期后的账号宽限期

(8)账号失效日期

(9)保留


你可能感兴趣的:(centos,系统运维,Linux账户与权限管理)