运行环境

系统:CentOS Linux release 7.9.2009 (Core)

账户管理

1.查看系统账户

1
2
3
4
5
6
7
8
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
......
# 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

2.添加系统账户

useradd [-mMnr] 用户名

  • 参数说明
    • -m  自动建立用户的登入目录
    • -M  不要自动建立用户的登入目录
    • -n  取消建立以用户名称为名的群组
    • -r  建立系统帐号

当然这里只是部分的参数说明,因为还有大部分的参数在 usermod 中同样支持,更多参数可以 –help 查看。

3.修改系统账户

usermod [-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ] 用户账号

  • 参数说明
    • -c<备注>  修改用户帐号的备注文字
    • -d登入目录>  修改用户登入时的目录
    • -e<有效期限>  修改帐号的有效期限
    • -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号
    • -g<群组>  修改用户所属的群组
    • -G<群组>  修改用户所属的附加群组
    • -s  修改用户登入后所使用的shell
    • -u  修改用户ID
1
2
# 修改用户的id(用户和群组都有唯一的id,修改群组时可以使用名称或id)
usermod -u 777 root

4.删除系统账户

userdel [-r] 用户名

  • 参数说明
    • -r 用户的主目录一并删除

5.用户口令管理

passwd [-ludf] 用户名

  • 参数说明
    • -l 锁定口令,即禁用账号
    • -u 口令解锁
    • -d 使账号无口令
    • -f 强迫用户下次登录时修改口令

群组管理

1.添加用户组

groupadd [-go] 用户组

  • 参数说明
    • -g GID 指定新用户组的组标识号(GID)
    • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同

2.修改用户组

groupadd [-gon] 用户组

  • 参数说明
    • -n 重命名用户组

3.删除用户组

groupdel 用户组

如果一个账户通过 -G 设置了多个用户组,可以通过 newgrp 用户组 来切换其他用户组,已达到权限管理的目的。

文件所属权

当然我们设置用户以及用户组是为了分配权限,而分配权限的目的就是为了让不同的用户或者组只能操作属于自己权限内的文件或文件夹。

设置文件所有者

chown [-cfhvR] user[:group] file…

  • 参数说明
    • user : 新的文件拥有者的使用者 ID
    • group : 新的文件拥有者的使用者组(group)
    • -c : 显示更改的部分的信息
    • -f : 忽略错误信息
    • -h :修复符号链接
    • -v : 显示详细的处理信息
    • -R : 处理指定目录以及其子目录下的所有文件

示例

1
2
3
4
5
6
7
8
9
10
11
# 设置 /var/run/httpd.pid 文件的所有者为 root
chown root /var/run/httpd.pid
# 设置 /var/run/httpd.pid 文件的所属群组为 root
chown :root /var/run/httpd.pid
# 也可以一次性设置所有者和所属群组
chown root:root /var/run/httpd.pid

# 设置文件下所有文件的所有者为 root
chown -R root /var/run
# 或者使用编号也是同样的效果
chown -R 0 /var/run

设置所有者操作权限

chmod [-cfvR] mode file…

  • 参数说明
    • -c : 若该文件权限确实已经更改,才显示其更改动作
    • -f : 若该文件权限无法被更改也不要显示错误讯息
    • -v : 显示权限变更的详细资料
    • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

这里要注意的是 mode 的用法,首先我们得先了解一个文件包含三种权限:分别是读(r)、写(w)、执行(x),而给文件设置权限又包含三种操作:设置权限(=)、在原有权限的基础上添加权限(+)、在原有的基础上去除权限(-),所以很容易的可以得出 +w 为添加写权限、-x 为去除执行权限。

然而仅仅有这两个符号还是不够的,文件权限还划分为三个等级,分别是:文件所有者(Owner)、用户组(Group)、其他用户(Users),三者的首字母代表符号模式。

因为我们在之前给用户设置了用户组,所以要给文件的拥有组设置权限如:chmod g+r httpd.pid,当然也可以多个等级一起赋值如:chmod ugo+r httpd.pid 等同于 chmod a+r httpd.pid(a=all 代表所有权限等级)。

1
2
3
4
5
6
# 通过 ls 指令可以看出当前文件夹下所有文件的权限
ls -l
# 大致为以下结构:
drwxr-xr-x. 19 root root 267 Jun 24 10:58 var
# drwxr-xr-x,已等级划分分别为,rwx、-xr、r-x,-表示无权限,d表示文件类型(是文件夹则为d)
# 当然我们可以看出var文件夹的所有者为root,所属用户组为root

有意思的是r、w、x可以用八进制来代替,分别是:r=4,w=2,x=1,所以:

  • 若要 rwx 属性则 4+2+1=7
  • 若要 rw- 属性则 4+2=6
  • 若要 r-x 属性则 4+1=5

那么 chmod a=rwx filechmod 777 file 效果相同。