Skip to main content

Linux 用户(组)管理与权限设定

写在前面

# linux 命令众多,记住几个常用的 ,剩下的通过以下方式获取:
- `Tab` 自动补全 ,两次`Tab`列出有歧义的命令
- > command –help   # 显示 command 命令的帮助信息
- > man command   # 查阅命令使用手册
# linux 的目录:
- `~` 表示 home 目录
- `.` 表示当前目录
- `/` 表示根目录

篇一 : 用户(组)篇

1.1 超级用户 root 与sudo

Linux 系统中的 root 账号通常用于系统的维护和管理,对系统所有资源具有访问权限。因为权限过大,甚至可以删除系统文件致使系统瘫痪,所以不推荐直接使用 root , 而是使用home目录下的个人账号 (称为标准用户)。

标准用户有时候必须得到类似 root 账号的权限才能做一些事情,所以在 Linux 系统中使用sudo可以为了标准用户预设 root 身份。

sudo 命令    # 用预设的 root 身份来执行命令

标准用户使用sudo 时,必须先输入密码,之后 5 分钟内有效,超过 5 分钟需要再次输入密码

注意本文中大部分命令,都需要使用sudo预设的 root 权限,如组管理、用户管理、更改某些文件目录的权限等

1.2 组和用户的创建与删除 groupuser

sudo groupadd [选项] 组名   # 添加新的组

sudo groupdel [选项] 组名    #删除一个组

sudo useradd [选项] 用户名   # 创建新用户

  • -m : 自动建立用户家目录,创建用户时最好加这个
  • -g 组名 : 指定用户所在的组,否则会建立一个与用户同名的组 , 如: sudo useradd -m -g 组名 用户名

sudo passwd 用户名   # 给用户设置密码,如果是给当前用户设置密码,则不用写用户名

家目录的权限默认为: 用户(rwx), 组和其他(r-x)

gpasswd [选项] 组   # 组中添加或删除用户

选项:

  • -a 用户名 : 将用户添加到组中
  • -d 用户名 : 将用户从组中删除

sudo userdel [选项] 用户名   # 删除一个用户

  • -r : 把用户家目录一并删除

提示: 如果添加用户时,没有加-m创建家目录,最简单的方法是删除该用户,重新创建。

1.3 查看组、用户的配置信息 idwhowhoamiw

添加的组会保存到/etc/group文件中,可以通过cat -n /etc/group | grep 组名 单独查看信息。

创建的用户保存在/etc/passwd文件中,可以通过cat -n /etc/passwd | grep 用户名 单独查看信息。

老司机领路,用户配置文件

$ cat -n /etc/group | grep kmust   # 查看kmust组的信息
69 kmust:x:1001: # 组id为1001,69为行号

$ cat -n /etc/passwd | grep zyq # 查看 zyq 用户的信息
40 zyq:x:1000:1000:zyq,,,:/home/zyq:/bin/bash
# 40:行号
#zyq:用户名
#x : 密码标志,真正的密码是放在shadow(影子文件)中,并且加密
#1000:1000: 分别是UID和GID。UID(用户ID): 0(超级用户),1~499(系统用户),500~65535(普通用户)。 要想修改一个用户为超级用户,只需将UID改为0即可
#zyq,,, : 用户的说明信息,当初创建用户时随便写的
#/home/zyq : 家目录
#/bin/bash : 登录使用的shell(ubuntu是dash软件)

通过如下的命令可以列出有关信息,而不用进入配置文件中查找:

id [选项]….[用户]..    #查看用户的 UID(用户 id) 和 GID(组 id) 和附件组等, 用户不写,默认当前用户

who [选项]…     #查看目前所有登录的用户和用户 IP 地址和时间, 未登录用户不能显示

whoami [选项] …..    #查看我是哪个用户
w     #查看系统负载与用户

提示: tty1~tty6: 本地控制台终端;tty7 表示图形终端;pts/0~255 表示虚拟终端

1.4 用户的 附加组 和 主组 以及修改 usermod

附件组和主组: 主组,也叫初始组,是用户一登录就立刻拥有的组,通常在新建用户时用-g指定,在/etc/passwd文件用户信息中的 GID 就是主组。 用户的附加组是用于指定_用户的附加权限_,查看方法如下 : (主组只能有一个,附件组可以有多个)

$ cat -n /etc/group | grep zyq  # 在组文件中搜索用户(zyq)关键词,从中可以查看zyq用户的附加组
行号 组名 id
5 adm:x:4:syslog,zyq # 用户zyq在组adm(附件组)中,则该用户可以被赋予使用管理员的权利
18 cdrom:x:24:zyq # 用户zyq在组cdrom(附件组)中,则该用户可以被赋予使用光驱
21 sudo:x:27:zyq # 用户zyq在组sudo(附件组)中,则该用户可以被赋予使用sudo
23 dip:x:30:zyq # 用户zyq在组dip(附件组)中
35 plugdev:x:46:zyq # 用户zyq在组plugdev(附件组)中
52 lpadmin:x:113:zyq # 用户zyq在组lpadmin(附件组)中
67 zyq:x:1000: #zyq组的id 为1000
68 sambashare:x:128:zyq # 用户zyq在组sambashare(附件组)中

$ id zyq #查看zyq用户的信息,在用户信息中也可以看到该用户的一些附加组
uid=1000(zyq) gid=1000(zyq) # 用户的UID和GID(主组的id)
组=1000(zyq) # 主组
4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare) #附件组

有些用户(如新建用户)是没有附加组的,所以要使用usermod命令来添加、管理附加组:

usermod -g 组名 用户名   # 修改用户的主组

usermod -G 附件组 用户名   # 修改用户的附件组

扩展usermode 还可以修改用户登录的 Shell。 新添加的用户一般没有指定 Shell,所以在远程登陆端会出现文件和目录并没有颜色区分、用户显示不出来,删除键失灵等等问题。 所以可用如下命令,将 windows 远程登录所用的 Shell 软件改成 bash:(当然,Shell 也并非只有 bash,还有 nologin,一般为系统用户所有)

usermod -s /bin/bash 用户名   # 修改用户登录的 Shell

1.5 切换用户 su

su - [用户名]   # 切换用户,- 表示同时切换到家目录,用户名不写默认切换到 root 用户

exit     # 退出当前登录用户到上一个用户

篇二 : 文件与目录权限篇

2.0 预备知识

用户、组、权限 :Linux 是多用户多任务系统,linux 中的目录和文件对不同的用户设有不同的权限,具有相同权限的多个用户为了方便可以放在一个新建的组中,对组设置权限即可。

文件类型权限所属
- : 二进制文件r 4 读u : 所有者,也叫(用户或拥有者)
d : 目录w 2 写g : 所属组
l : 软连接x 1 执行o : 其他人 ;a : 所有人

权限对文件和目录的概念如下 :

权限for 文件for 目录
r可以查看文件内容缺少该权限,只能进入该目录,但是不能查看该目录下的内容
w可以修改文件内容缺少该权限,可以进入目录,查看修改目录下的内容,但不可以在目录下创建删除其他文件或者目录
x可以执行文件缺少该权限,不能进入该目录,也不能查看该目录下的内容

Linux 的目录和文件对用户、组和其他人的权限的查看用命令: ls -l

![](/home/zyq/Pictures / 到 选区_001.png 的链接)

硬链接数 : 有多少种方式可以访问到目录或者文件。 例如,目录a下有 目录b目录c 。则有如下 4 种方式可以访问目录a

  • cd xx/xx/a #在任意位置用绝对路径访问
  • cd . #在 a 目录下访问当前目录
  • cd .. # 分别在 b 目录和 c 目录下访问上一级目录

一般 文件的硬链接数为 1 ,目录的硬链接数为 2+子目录数

2.1 修改文件 | 目录的拥有者和所属组 chown chgrp

chown [选项] 用户名 文件名 | 目录    #将文件或目录的拥有者 (用户) 修改为指定的用户名

chgrp [选项] 组名 文件名 | 目录     #将文件或目录的所属组修改为指定的组

选项:

  • -R 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改

2.2 修改文件 | 目录的权限 chmod

# 三种对象(拥有者、所属组和其他人)对同一个文件和目录都有属于自己的权限。
# 修改权限的方式有两种:
- > chmod [选项] .. {对象 - 操作 - 权限} 文件名 | 目录
- * 选项:`-R` 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
- * 对象:`a` 表示所有人;`u` 表示拥有者;`g` 表示所属组 ; `o` 表示其他人
- * 操作:`+` 表示增加权限 ; `-` 表示减少权限
- * 权限 : `r` 读; `w` 写 ; `x` 执行
# 例:`sudo chmod a-w 目录a #对所有对象减少目录a的写权限`

- > chmod [选项] 八进制权限 文件名 | 目录
选项:
- * `-R` 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
八进制权限:
- * 是用三个数字分别是拥有者、组、其他人的权限。
- * 常用权限:
1. `777` 表示`u=rwx,g=rwx,o=rwx`
2. `755` 表示 `u=rwx,g=rx,o=rx`
3. `644` 表示 `u=rw,g=r,o=r`
# 例:`sudo chmod -R 755 目录a #对`目录 a 的权限设置是拥有者 rwx,组 rx,其他人 rx。

2.3 权限控制 ACL

ACL 是访问控制列表,是一种权限分配之外的普遍范式。为了应对复杂多变的权限设置。

ACL 权限是否被支持与系统根目录所在分区有关。(可用df -h 查询根目录所在分区),通过dumpe2fs -h /dev/sda3 #查询指定分区详细文件系统信息 查看字段Default mount options:,出现acl字样说明被支持。在当前绝大多数为文件系统是默认支持 ACL 权限的,并且在被支持的前提下,ACL 是默认已经开启的,如果没有开启,开启方法请自行搜索。

setfacl [选项] 文件名   # 对文件为设置对象设置 ACl 权限

选项:

  • -m 被设置对象 : 设置 ACL 权限
  • -x {u:user|g:group} : 删除指定的 ACL 权限
  • -b : 删除所有 ACL 权限,后不用加被设置对象。 会把用户和组权限都删除
  • -R : 针对目录递归设置 ACL 权限, 如setfacl -m u:xiaoting:rx -R ./c

被设置对象:

  • u:用户名:{r|x|w} : 指定用户设置权限,如u:zhagnsan:rx
  • g:组名:{r|w|x} : 指定组设置权限
  • m:{r|w|x} : 指定 mask 权限(最大权限)

提示: 添加的 ACL 权限和 mask 权限相与得到的权限才是真正能执行的权限,默认情况下 mask 的权限为rwx,可以通过修改 mask 的权限来控制添加了 ACL 权限之后的真正最大有效权限 。

某一目录被递归设置权限后,该目录下的所有子目录与子文件都被设置了权限,假如此时在该目录下又新建了新的目录或文件,则该文件或目录是没有权限的,所以,需要设置默认 ACL 权限 (即设置为默认 ACL 权限的目录,针对该目录下添加的子文件或目录都默认继承该目录的权限,以前已经存在的权限并不会变,但目录变了),方法是在被设置对象前加d:

getfacle 文件名   # 查看 ACL 权限

提示: 添加了 ACL 权限的目录或者文件,用ls -l命令后,文件或目录末尾会显示+图标。

ACL 演练:

# 对当前目录下的c目录,递归添加ACL权限:用户xiaoting具有rw权限。但是以后目录c下新建的文件或目录并没有该权限。
$setfacl -m u:xiaoting:rw -R c
# 对当前目录下的c目录,递归的添加ACL权限:用户xiaoting具有rx权限。以后目录c下新建的文件或目录自动对该用户添加该权限 。而目录c下以前就存在的文件的权限依然没有变,但是以前就存在的目录的权限却变化了。原因是-R选项本身就是递归的改变。
$ setfacl -m d:u:xiaoting:rx -R c
#对当前目录下的c目录,递归的取消所有ACL权限,包含目录c下的所有子文件和子目录
$setfacl -b -R c