在之前的博文中我们介绍了Linux一个重要的哲学思想就是一切皆文件,内存是文件,硬盘,cpu都是文件。还有许许多多的脚本文件,二进制文件,存档文件等。这些文件要是任何人都可以随意使用,那么Linux的世界可就乱套了。所以现在我们来聊一聊文件管理的内容。

       一个文件要执行首选要进行的就是身份识别,即使用者是谁。然后再对照使用者所拥有的权限来决定使用者能进行的操作。

       我们先来说一下使用着的身份识别。Linux中的用户信息也是被存放在文件中。系统中每个用户的相关信息都被存放在/etc/passwd,/etc/shadow,/etc/group ,/etc/gshadow这四个文件中

一、/etc/passwd:用户的属性信息.

linux的用户和用户组_account


通过man 5 passwd命令我们可以了解/etc/passwd这个文件的相关介绍。 这个文件中每一行就是一个用户的信息。每行的信息又被“:”分割成了7段。

account:password:UID:GID:GECOS:directory:shell

1、 account:用户名称。

   2、passwor:密码占位符。

               无论有没有为用户设置密码我们都会看到是x。因为/etc/passwd对所有用户而言都有可读的权限所以,密码的相关信息是保存在/etc/shadow当中的。

   3、UID:用户的uid号码。0表示root用户,1-499表示系统用户,500以上表示普通登                录的用户  

           如果在创建新用户的时候没有指定用户的uid号码,系统会自动生成,系统自                动生成的新用户的uid号码为之前一个用的uid号码加1。

   4、GID:用户基本组的gid号码。

           如果在创建新用户的时候没有指定用户的基本组的gid号码,系统会自动生                成,系统自动生成的新用户的基本组号码为之前一个用户基本组号码加1.

   5、GECOS:用户的一些额外信息,比如办公地址,email邮箱等。系统不会自动生成。

   6、Directory:用户的加目录。

                 如果在创建用户的时候没有额外为用户指定家目录,系统会自动生                      成,系统自动生成的家目录在/home/下,同用户名相同的目录。root用户为/root。在生成用户家目录的同时还会生成一些隐藏文件,用于配置用户的环境变量。

linux的用户和用户组_account_02


   7、Shell:配置用户登录时所使用的默认shell


下面介绍创建和修改用户的命令,配合参数的使用可以对/etc/passwd中的相关信息做修改。

#useradd [选项]username

-u:指定用的UID号码。有效范围为0-65535

-g:指定用的GID号码。UID号码必须事先存在。

-G:指定用户的附加组的组ID号码,组ID号码必须事先存在。

-c:指定用户的额外信息。中间可以用,号分割。

-d:指定用的家目录。在使用这个选项的时候需要注意目录的dirname必须事先存在,而basename可以自动生成。比如我想新创建一个用户,用户名为user2,这个用户的家目录为/temp/usr/user2。那么/temp/usr目录必须要事先存在。

-s:指定用登录时候的默认shell。

-r:用于创建系统用户,即ID号码在1-499之间。用户的家目录不会被创建出来。

-M:不会用户创建家目录。

-m:必须为用户指定家目录


如果想要为已经创建好的用户修改他的用户属性,我们可以是用usermod命令。

#usermod [选项]username

其选项的用法同useradd的用法类似。需要额外注意的是一下几个参数的使用。

-a -G:如果我们使用usermod -G修改用户的额外组,那么该用户之前的额外组将被覆盖,如果想要在原有的额外组的基础上追加,我们要配合-a参数一起使用。

-m -d:如果我们想要将用户的家目录改到别的目录。那么我们一定要配合-m参数一起使用。否则用户原来家目录中的隐藏文件将不会被迁移到新目录中。

-l:修改用户的用户名。


如果我们想要删除一个已存在的用户,我们可以使用userdel命令。

#userdel [选项]username

-r:将用户的家目录一并删除。


二、/etc/shadow:用户的影子口令信息

linux的用户和用户组_account_03


/etc/shadow中保存的是用密码相关的信息。每行就是一个用户的信息,其中又用:分割成了9段。每段内容分别为。

用户名:加密的密码串:最后一次修改密码的时间:密码的最短使用期限:密码的最长使用期限:密码到期警告天数:账号的非活动天数:账号的过期期限:预留位

用户名:这个不用介绍了吧

加密的密码串:如果用户没有设置密码这段信息为两个!!即:!!:。如果用户是锁定状态则                  为两个叹号加密码串,这个时候用户是被禁止登录的。

             该段的信息又被$划分为了三段分别是加密方式,salt,加密后的密码串。

密码最后一次的修改时间:这是一个相对与1970年1月1日的天数。

密码的最短使用期限:两次修改口令间隔的最短天数。如果是0则此功能禁用。

密码的最长使用期限:两次修改口令间隔的最长天数。

密码的过期警告天数:提前多少天警告用户密码将过期。

账号的非活动天数:口令过期多少天后禁用此用户。

账号的过期期限:账号的过期时间,如果为空则永久有效。

预留位:留给linux以后发展使用。


下面介绍另个修改密钥属性的命令

#passwd [选项] 参数

-n:密码最短使用天数;

-x:密码最长使用期限;

-w:警告天数;

如果一个用户管理员想要禁止他登录,可以使用-l来锁定用户!用-u来给用户解锁。

另外还有两个可以修改用户密钥信息的命令是chage、usermod。能实现的功能和passwd类似。