用户 是Linux系统工作中重要的一环,在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,一个账号就是一个用户。
在Linux系统中,每一个用户对不同的文件或者目录有的不同权限。
我们可以给 文件/目录 设置如下权限:
权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|
读 | read | r | 4 |
写 | write | w | 2 |
执行 | excute | x | 1 |
一个 组 管理多个用户,可以给组设置权限,组所拥有的权限就是用户所拥有的权限
从左到右分别是:
-
表示文件,如果是 d
表示目录。硬链接数的详细说明:
使用ls -l
命令后,显示aaa
的硬链接数是2,即代表有2中方式可以访问到aaa
。方式一:绝对路径访问。方式二:进入到aaa
目录后,以相对路径的方式访问:./
。
该文件存放系统所有用户的信息,每一行内容代表一个用户,以 “:” 分割共 7 列。以 root 用户为例:“root:x:0:0:root:/root:/bin/bash
”
第 1 列:用户名
第 2 列:密码位。密码是放在"/etc/shadow
" 中且是加密的,所以这里会看到一个 “x”
第 3 列:用户ID,即 UID
0 (超级管理员)
:当 UID 为 0 时,代表该用户是超级管理员。所以当你要让其他的用户名称也具有 root 的权限时,将该用户的 UID 改为 0 即可,也就是说一个系统上超级管理员不见得就是 root,很不建议有多个用户的 UID 是 0
1 - 499 (系统用户)
:这些 UID 是保留给系统用户的 UID,也就是说 UID 在 1 - 499 范围的用户是不能登录的,只能用来运行系统或者服务。其中,UID 1 - 99 是系统自动创建账号时使用的; UID 100 - 499 是用户有创建系统账号需求时使用的
500 - 60000 (普通用户)
:普通用户UID。
第 4 列:组ID,即 GID
第 5 列:用户信息说明。这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已
第 6 列:用户家目录,即用户登录后默认进入的目录。
第 7 列:登录后获取的shell。一般都是 “/bin/bash”。
useradd [选项] 用户名
选项:
-u 用户ID:指定用户ID。一般指定 UID 要大于500,如果没有特殊需求尽量不要指定,由系统自动分配即可
-g 初始组名:指定用户所属初始组。尽量不要指定,系统会自动创建一个和新增用户名相同的组最为该新增用户的初始组
-G 附加组名:指定用户所属附加组。如果要指定多个附加组,组名用 "," 隔开
-c 说明文字:加上备注文字。备注文字会保存在 "/etc/passwd" 文件的第 5 列
-d 家目录:指定用户家目录
-s shell:指定用户登入后所使用的 shell 程序
刚添加成功的用户没有密码(此时该用户的密码是 “!!
” ),还不能用于登录系统,需要通过 “passwd” 命令设置密码后才能登录。
当然,“passwd
” 命令也能用来修改已存在的用户密码,以及管理用户密码有效时间。
passwd [选项] [用户名]
选项:
-l 或 --lock:临时锁住密码使密码失效。即把 "/etc/shadow" 第二列密文密码前面多加个 "!!"
-u 或 --unlock:解开已锁住的用户密码。相对于 -l 的反向操作
-d 或 --delete:删除现有用户的密码
-n 天数:两次密码修改时间间隔。对应"/etc/shadow" 第 4 列
-x 天数:密码有效期。对应"/etc/shadow" 第 5 列。
-w 天数:密码到期前的警告天数。对应"/etc/shadow" 第 6 列
-i 天数:密码到期后的宽限天数。对应"/etc/shadow" 第 7 列
-S 或 --status:显示用户密码状态
--stdin :从标准输入读取令牌。主要用在通过脚本批量添加用户,不需要交互的场景
示例,修改 "user1" 的密码为 "123456":echo "123456" | passwd --stdin user1 。尽量不要在shell里这样操作,history 会记录执行过的历史命令,设置的密码可能不被泄露
usermod [选项] 用户名
选项:
-u 用户ID:修改用户ID
-d 家目录:修改用户家目录
-c 用户说明:修改用户说明
-g 初始组名:修改用户初始组
-G 附加组名:修改用户附加组
-s shell:修改用户登入后所使用的 shell 程序
-e 日期:修改账号失效日期,格式是 "YYYY-MM-DD"。即修改 /etc/shadow 第 8 列数据
-l 新用户名:修改用户名
-L :临时锁定账号。与 "passwd -l 用户名" 作用一样
-U :解锁账号
userdel 用户名
该文件存放用户组信息,每行代表一个用户组信息,以 “:” 分割共 4 列。以 root 组信息为例:“root:x:0:
”
第 1 列:组名。
第 2 列:组密码位。和用户密码一样,组密码已经移动到 “/etc/gshadow” 文件中去,因此这个字段只存在一个 “x” 。
第 3 列:用户组ID,即 GID。对应 “/etc/passwd” 文件中的用户组ID
第 4 列:组内用户列表(不包含以该组为初始组的用户),多个用户名以","隔开。例如现在需要把 “user1” 和 “user2” 也加入到该 root 组,则 root 组信息变为 “root:x:0:user1,user2
”
groupadd [选项] 组名
选项:
-g 组ID:指定组ID
groupmod [选项] 组名
选项:
-g 组ID:修改组ID
-n 新组名:修改组名
groupdel 组名
修改文件或目录的权限
chmod [选项] 权限模式 文件或目录
选项:
-R :递归设置权限,也就是给予目录中的所有文件和子目录设定权限
--reference=参考文件或目录:使用参考文件或参考目录的权限来设置目标文件或目录的权限
权限模式
:分为 符号组合 和 八进制数组合
符号组合 的格式是[ugoa][[+-=][permission]]
,也就是[用户身份][[赋予方式][权限]]
的格式。
用户身份
u
:代表拥有者(user)
g
:代表所属组(group)
o
:代表其他用户(other)
a
:代表全部身份(all)
赋予方式
+
:加入权限
-
:减去权限
=
:设置权限
权限
r
: 读取权限(read)
w
: 写权限(write)
x
: 执行权限(execute)
八进制数组合 的格式是 [0-7][0-7][0-7]
三位数字组成(每一位数字都是 权限之和 ),第一位是 拥有者 权限之和,第二位是 所属组 权限之和,第三位 其他用户 权限之和。
r
读取权限对应的数字是 4
w
写权限对应的数字是 2
x
执行权限对应的数字是 1
例如读写权限 rw 八进制数表示 6
示例:
# 1. 添加组用户的写权限。
chmod g+w test.log
# 2. 删除其他用户的所有权限。权限为空,即权限设置为'---'
chmod o= test.log
# 使所有用户都没有写权限
chmod a-w test.log
# 3. 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限
chmod u=rwx, g=rw, o=r test.log
等价于
chmod 754 test.log
# 4. 将目录以及目录下的文件都设置为所有用户都拥有读写权限
chmod -R a=rw testdir/
# 5. 根据参考文件 a.log 的权限来 设置文件 test.log 的权限
chmod --reference=a.log ./test.log
修改文件和目录的拥有者和所属组
chown [选项] 拥有者[:所属组] 文件或目录
选项:
-R :递归修改目录下所有的文件及子目录的拥有者和所属组
--reference=参考文件或目录:使用参考文件或参考目录的拥有者和所属组来设置目标文件或目录的拥有者和所属组
拥有者[:所属组]:
当省略 ":所属组",仅改变文件所属组
示例:
# 修改文件的拥有者为 user1,所属组为 group1
chown user1:group1 test.log