本章内容:
- 理解Linux安全性
- 解读文件权限
- 使用Linux组
7.1 Linux的安全性
Linux安全系统的核心是用户账户。先介绍管理用户账户需要的文件和工具。
7.1.1 /etc/password 文件
$ cat /etc/passwd
可以看到root用户分配到的UID是0.
Linux会为各种各样的功能创建不同的用户账户,这些账户不是真正的用户。 这些账户叫做“系统账户”,是系统上运行的各种服务进程访问资源用的特殊账户。
===
7.1.2 /etc/shadow 文件
只有root用户才能访问,对系统密码管理提供了更多的控制。
===
7.1.3 添加新用户
useradd 选项 参数
查看配置用户的默认参数:
$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
新建用户时的命令参数
代码:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名 指定新账号的登录名。
# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。(创建用户需要root权限)
===
7.1.4 删除用户
userdel linuxso 注:删除用户linuxso,但不删除其家目录及文件;
userdel -r linuxso 注:删除用户linuxso,其家目录及文件一并删除;
===
7.1.5 修改用户
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s ][-u ][用户帐号]
-c 更改 /etc/passwd 第5栏用户信息说明的部分,后面接描述信息,可以使用chfn命令替代
-d 更改 /etc/passwd 第6栏用户的home目录部分,如果再加上 -m 参数(只与-d配合)。则会将现有home目录的地址重命名为新的home目录地址,如原来没有指定home目录地址,则为账号新建一个指定的home目录地址。
-e 更改 /etc/shadow 的第8栏账号的失效日期,后面接日期参数格式为 MM/DD/YY 或 YYYY-MM-DD
-f 更改 /etc/shadow 的第7栏账号过期宽限时间部分,当后面接的值为 0 时,账号立即失效,为 -1 时关闭此功能默认值为 -1
-g 后面接 group name 必须是现有 group 组中的一个,改变用户的初始化用户组 id 对应 /etc/passwd 的第4栏内容
-G 后面接 group name 必须是现有 group 组中存在的组名,改变用户能够支持的用户组,修改的是 /etc/group
-l 后面接账号名称,即更改用户名。对应的是 /etc/passwd 的第一栏
-s 后面接shell的实际文件,即 /bin/bash ,/bin/csh之类,可以使用 chsh 命令替代
-u 更改用户的UID,对应的是 /etc/passwd 的和3栏数据,此 UID 不能与目前系统中已经存在的UID相同
-L 暂将用户的密码冻结,禁止其登录,即更改 /etc/shadow 的密码栏,在其前面加上 !
-U 暂将用户的密码解冻,即去掉其 /etc/shadow 密码栏前面的 !
7.2 使用Linux组
组权限允许多个用户对系统中的对象共享一组共用的权限。
每个组有唯一的GID。
7.2.1 /etc/group文件
存储了每个组的信息
===
7.2.2 创建新组
# groupadd shared
# tail /etc/group (显示文件的末尾部分)
colord:x:123:
pulse:x:124:
pulse-access:x:125:
rtkit:x:126:
saned:x:127:
lyk:x:1000:
sambashare:x:128:lyk
guest-uzhjy5:x:999:
wireshark:x:129:
shared:x:1001:
创建新组时,默认没有任何用户分配到该组,可以使用usermod命令
===
7.2.3 修改组
groupmod
groupmod 用于修改系统已存在的组账号。格式如下:groupmod [options] GROUP
其中:
GROUP:为要修改的组账户名
常用选项:
-g GID:重新指派 GID
-n NEW_GROUP:更改组名为 NEW_GROUP
举例: 将 shared 组更名为 leaders
# groupmod -n leaders shared
# grep leader /etc/group
leaders:x:504:
将 leaders 组的 GID 改为 3000
# groupmod -g 3000 leaders
# grep leader /etc/group
leaders:x:3000:
※grep命令 print lines matching a pattern
7.3 理解文件权限
在linux中,所有东西都被当成文件。
文件权限前的一个字母用来表示文件类型:
-:一般文件
d:目录文件
b:块设备文件(如,硬盘)
c:字符设备文件(如,键盘、鼠标)
l:链接文件(相当于Window中的快捷方式)
p:人工管道
n:网络设备
$ ls -l
对于每一类用户,权限系统又分别提供他们三种权限
读(r):用户是否有权力读文件的内容
写(w):用户是否有权利改变文件的内容(不含删除)
执行(x):用户是否有权利执行文件
===
7.3.2 默认文件权限
# touch newfile (新建文件)
# ls -l newfile
-rw-r–r– 1 root root 0 6月 21 13:07 newfile
这里有一个默认的文件权限,umask命令可以显示和设置这个默认权限。
umask是个掩码,会屏蔽掉不享授予该安全级别的权限。默认的umask值是0022(第一位是粘着位),所以上述的文件权限是644
具体的数字对应:
r w x
4 2 1
对于文件来说,全权限的值是666;目录全权限的值是777
7.4 改变安全性设置
7.4.1 改变权限
chmod [options] [mode] [file]
-c或–changes 效果类似”-v”参数,但仅回报更改的部分。
-f或–quiet或–silent 不显示错误信息。
-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
===
7.4.2 改变所属关系
改变属主:
chown [options] [owner] [file]
改变所属用户组:
chgrp [group] [file]
7.5 共享文件
以往想要共享文件,要么改变文件其他用户所在组的安全权限,要么就给文件分配一个包含其他用户的新默认属组。
现在还有一种方法。
以SUID为例:
只对二进制程序有效
执行者对于程序需要有x权限
在程序运行过程中,执行者拥有程序拥有者的权限
例如:
普通用户执行passwd命令。
首先查看passwd命令的绝对路径:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 5月 17 07:37 /usr/bin/passwd
因为passwd命令具有SUID权限,所以普通用户执行这个命令时,当系统生成对应的进程后,这个进程就拥有了/usr/bin/passwd文件拥有者root的权限。
SGID位对于文件共享非常重要,启用SGID位后,可以强制在一个共享目录下创建的新文件都属于该目录的属组。
设置和查看SUID/SGID/SBIT权限的方法:
SUID是4 SGID是2 SBIT是1
chmod 4755 filename
第一个4代表的就是这三个特殊命令,后面的755是普通权限。上面的命令把filename这个文件加入了SUID权限。
查看特殊权限的方法就是普通的ls命令:
SUID会在所属用户权限本应是x的地方显示s
SGID会在所属用户组权限本应是x的地方显示s
SBIT在其它用户权限本应是x的地方显示t
※对于一个目录来说(d开头)如果others的权限里有r但没有x,则不能进入此目录,目录的x意味着能否执行cd指令
要开放目录给任何人浏览,至少需要r和x权限