/etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
/etc/passwd 文件中的内容非常规律,每行记录对应一个用户
username:password:UID:GID:connection:home dictionary:shell
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
Linux 系统中默认怎么会有这么多的用户?这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
不仅如此,每行用户信息都以 ":" 作为分隔符,划分为 7 个字段
用户名
用户名,就是一串代表用户身份的字符串。
用户名仅是为了方便用户记忆,Linux 系统是通过 UID 来识别用户身份,分配用户权限的。/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。
密码
"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中(下一节做详细介绍)。
在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取。
虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。
因此,现在 Linux 系统把真正的加密密码串放置在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。
需要注意的是,虽然 "x" 并不表示真正的密码,但也不能删除,如果删除了 "x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以的),除非特殊情况(如破解用户密码),这当然是不可行的。
UID
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。
实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份。
0 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。
1~499 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。
其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。
500~65535 普通用户。
GID
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。这里需要解释一下初始组和附加组的概念。
初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。比如说,我们手工添加用户 lamp,在建立用户 lamp 的同时,就会建立 lamp 组作为 lamp 用户的初始组。
附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。
举例来说,刚刚的 lamp 用户除属于初始组 lamp 外,我又把它加入了 users 组,那么 lamp 用户同时属于 lamp 组和 users 组,其中 lamp 是初始组,users 是附加组。
当然,初始组和附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。
需要注意的是,在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组。
描述性信息
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。
主目录
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
例如,root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname,即在 /home/ 目录下建立和用户名相同的目录作为主目录,如 lamp 用户的主目录就是 /home/lamp/ 目录。
默认的Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。
用户登陆 Linux 系统后,通过使用 Linux 命令完成操作任务,但系统只认识类似 0101 的机器语言,这里就需要使用命令解释器。也就是说,Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。
通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash)
----------------------------------------------------------------------------------------------------------------------
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中
组名:密码:GID:该用户组中的用户列表
组名
也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
组密码
和 /etc/passwd 文件一样,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
组ID (GID)
就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
组中的用户
此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
-------------------------------------------------------------------------------------------------------------------
用户和组管理
添加用户adduser
adduser 参数 用户名
adduser abc #添加普通用户abc
删除用户 deluser
deluser 参数 用户名
deluser -remove-home abc #删除用户abc及主目录
更改用户密码passwd
passwd 参数 用户名
passwd abc #更改abc的密码
修改用户信息usermod
usermod 参数 用户名
usermod -l newname abc # 将用户abc 改名为newname
显示用户信息finger
finger 参数 用户名
finger -l abc #显示用户abc的详细信息
显示用户ID
id 参数 用户名
添加用户组addgroup
addgroup 参数 组名
addgroup -system sys #添加一个系统用户组
删除组delgroup
delgroup 参数 用户组
修改组信息groupmod
groupmod 参数 组名
显示组内用户groups
groups 组名
-------------------------------------------------------------------------------------------------------------------------------
文件/目录的权限查看命令为:ls -l,该命令会列出当前目录下所有文件(包括子目录)的详情,结果如下图所示:
第一行是列出了当前目录下所有文件数量(包括子目录中所有文件),然后紧接着每一行都是当前目录下的一个文件。每一行中各部分含义如下:
权限 incode 所属用户 所属用户组 文件大小 修改时间 名称
drwxrwxrwx 0 user group 512 月日时间 name
其中第一个字段如drwxrwxrwx或drwxr-xr-x这种就表示该文件的权限,这个字段的值一共有10位字符,每一位的含义如下:
位置 含义 取值说明
第1位 是否为目录 d表示该文件为目录,-表示该文件不是目录
2~4位 所属用户对该文件的权限 2,3,4位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
5~7位 所属用户组对该文件的权限 5,6,7位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
8~10位 其他用户对该文件的权限 8,9,10位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
chmod修改文件或文件夹的权限
chmod 参数 文件名/目录名
chown 修改文件或目录的归属用户
chgrp 修改文件或目录的归属组