1. 介绍

在 Linux 中每个文件(Linux 中一切对象都是文件,包括文件、目录、命令、设备等)都包含有访问权限,这些权限决定了谁能访问和如何访问这些文件。

chmod 命令用来设定访问权限,chown 用来更改所有者,chgrp 用来更改所属用户组。

有三种方式来限制访问权限:

  1. 用户自己访问。
  2. 一个用户组中的用户访问。
  3. 用户组之外的用户访问。

用户能够控制一个文件或目录的访问程度,读、写以及执行;当创建一个文件时,系统会自动赋予文件的所有者读和写的权限,这样所有者能够显示和修改该文件。文件所有者可以将这些权限改变为任何想要指定的权限。

查看文件权限:

ls -l run
-rwxrwxr--. 1 root root 2346 Aug 19  2016 run

说明:

先看 -rwxrwxr--
###############################################
a.首字符'-',表示文件类型。
'd' - 文件夹
'-' - 文件
'l' - 链接
's' - socket
'p' - named pipe
'b' - block device
'c' - character device
###############################################
b.剩余部分记录了文件权限,三个字符一段,共分为三段。
第一段 文件所有者的权限
第二段 文件所属组的权限
第三段 其他用户的权限
###############################################
c.文件权限每一段有三个字符,对应 可读/可写/可执行
r 可读,用数字 4 表示
w 可写,用数字 2 表示
x 可执行,用数字 1 表示
- 无权限,用数字 0 表示
X 只有文件对某些用户是可执行的或该文件是目录时才追加 X

所以上面的意思是,run 是一个普通文件,文件拥有者有读写执行权限,所属用户组拥有读写执行权限,其他用户有读权限。

2. chmod

chmod 命令用来改变文件访问权限。具体有两种方法,一种是字母方式,一种是数字方式。

2.1 字母方式

chmod [who] [+|-|=] [mode] 文件名
who:
u 表示 user
g 表示 group
o 表示 other
a 表示 all ,默认值
操作符:
+ 添加
- 取消
= 赋予权限并取消其他所有权限(如果有)
mode:
r 可读
w 可写
x 可执行
X 只有文件对某些用户是可执行的或该文件为目录时才追加X
s 在文件执行时把进程的拥有者或组ID置为文件的拥有者。方式"u+s"设置文件的用户ID位,"g+s"设置组ID位
t 保存程序的文本到交换设备上
u 和文件拥有者有一样的权限
g 和文件所属用户组有一样的权限
o 和其他用户有一样的权限
文件名:
以空格分开的文件列表,支持通配符
在一个命令行中可以给出多个权限,其间用逗号隔开,如 chmod g+r,o+r file

2.2 数字方式

一般形式为:
chmod [mode] 文件名
每一段有三个字母,字母 rwx- 分别对应值为 4210。
例如- rwx r-x r-- 用二进制表示为 111 101 100,三位为一段,十进制数是 754。
即 chmod 754 a.txt
如果想一次修改某个目录下所有文件的权限,包括子目录中的文件,可以使用 -R 表示递归处理。
chmod -R 777 /dir
则 dir 目录下所有文件权限都会改变为可读可写可执行。

3. chown

chown 命令用来改变文件拥有者。

例:chown root file
将 file 拥有者改为 root,可以使用 -R 表示递归处理。

4. chgrp

chgrp 命令用来改变文件所属用户组。

例:chgrp root file

将 file 所属的用户组改为 root,可以使用 -R 表示递归处理。

5. 参考

5.1 用户属于用户组

用户组配置文件在 /etc/group 中,每行代表一个用户组。

root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:

每一行共分四列,依次表示:用户组组名、组密码(真正的密码存储在 /etc/gshadow)、用户组 ID(0:超级用户;1-499:系统用户组;500~自定义组)、组成员。

5.2 用户组密码

配置文件路径 /etc/gshadow

root:::
bin:::
daemon:::
sys:::
adm:::
tty:::

每列依次表示:组名、组密码、组管理员、组成员。

5.3 用户配置文件

文件路径 /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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

每列依次表示:用户名、用户密码(存储在 /etc/shadow)、用户 ID、所属组 ID、备注、用户主目录、Shell 类型

5.4 用户密码配置文件

配置文件路径为 /etc/shadow

root:$1$7eFcoTvO$vCO2vLSq0.hFj9pW/zMvE/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::

5.5 用户组管理

添加组
groupadd [选项] <组名>
-g:指定新建组 ID
-r:创建系统工作组,系统组的组 ID 小于 500
-K:覆盖配置文件 /ect/login.defs
-o:允许添加组 ID 不唯一的工作组
例:groupadd -g 344 group1

修改组
groupmod [选项] <组名>
-g:设置新的组 ID
-o:重复使用群组识别码
-n:设置新的组名
例:groupmod -n group4 group3

删除组
groupdel <组名>
组下有用户时是不能删除组的。
例:groupdel group4

5.6 用户管理

添加用户
useradd [选项] <用户名>
-c:加上备注文字。备注文字会保存在 passwd 的备注栏位中
-d:指定用户登入时的启始目录
-e:指定帐号的有效期限
-f:指定在密码过期后多少天即关闭该帐号
-g:指定用户所属的群组
-G:指定用户所属的附加群组
-m:自动建立用户的登入目录
-M:不要自动建立用户的登入目录
-n:取消建立以用户名称为名的群组
-r:建立系统帐号
-s:指定用户登入后所使用的 Shell
-u:指定用户 id

如果添加用户时,不指定组,则会创建一个和用户名同名的组,再将用户放入组中。
例:useradd -g group1 user1
useradd -g mysql mysql -s /sbin/nologin

修改用户
usermod [选项] <用户名>
-c:修改用户帐号的备注文字
-d:修改用户登入时的目录
-e:修改帐号的有效期限
-f:修改在密码过期后多少天即关闭该帐号
-g:修改用户所属的群组
-G:修改用户所属的附加群组
-l:修改用户帐号名称
-L:锁定用户密码,使密码无效
-s:修改用户登入后所使用的 Shell
-u:修改用户 ID
-U:解除密码锁定
例:usermod -l user5 user2

删除用户
userdel [选项] <用户名>
-r 删除用户的同时,删除和用户相关的所有文件
-f 强制删除用户,即使用户已登录
例:userdel user1

5.7 密码管理

passwd [选项] 用户名
-S 查看用户密码状态
-l 锁定用户密码(禁止登陆)
-u 解除用户密码锁定
-d 删除用户密码
没有密码的用户,是不能登陆系统的。
例:passwd user1

6. 补充说明

  • x 对于目录来说是可以进入目录,对于文件来说是可执行