1. 用户
1.1 /etc/passwd 文件结构
/etc/passwd
文件保存着所有的用户信息,其文件结构是这样的:
每一行代表一个账号,有几行即表示有几个账号在你的系统中,以冒号为分隔符,分为七段。里面有很多账号是系统运行所必须的,不能杀掉,可以称之为系统账号,如(bin、daemon、adm、nobody等)
root:x:0:0: root: /root: /bin/bash
- root:用户名
- x:用户密码(x 表示占位,不在这里显示,为了安全)
- uid(user id):为 0 则表示有 root 用户的权限,即第一个用户
- gid(group id):
- root:用户描述信息
- /root:(root 用户的)家目录
- /bin/bash:登录后的可执行文件(只要是 /bin/bash 表示可以登录操作系统,sbin/nologin 表示不能登录操作系统)
- uid、gid:500 以前的是系统占用,500以后的是新创建的用户使用
其中 tom、lucy 为新创建的用户,描述信息为空,都可以登录
1.2 /etc/shadow 文件结构
用来存放用户的密码口令
程序的运行需要权限,而权限和 UID/GID 有关,因此就需要读取不同账号的权限。/etc/passwd 的权限配置为 -rw-r--r--
,早起将口令放在 /etc/passwd 的第二个字段上,容易被窃取,因此移到 /etc/shadow 上,并加密处理。
[root@www ~]# head -n 4 /etc/shadow
root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: <==底下说明用
bin:*:14126:0:99999:7:::
daemon:*:14126:0:99999:7:::
adm:*:14126:0:99999:7:::
以 【:】为分隔符,总共为九段,每段的用途是这样的:
root(账户名称):
与 /etc/passwd 相同
口令:
密码,默认权限为 【-rw------】或 【-r-------】,只有 root 才能读写,【!】表示没有设置密码
最近更改口令的日期:
14216,是从 1970 年 1 月 1 日作为 1 累加的日期,要知道某个日期的累积日数, 可使用如下的程序计算:
[root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1)) 14126
上述命令中,2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。
口令不可更改的天数:
表示最近一次更改后要再过多少天才能被更改,若 为 0,表示随时可以改动
口令需要重新变更的天数:
即口令的过期时间,9999 (273年)
口令需要变更期限前的警告天数:
在口令过期前,提醒你,7 表示还有 7天过期
口令过期后的账户宽限时间(口令失效日):
口令失效后,能够宽限几日,即该账户几日后再也无法登陆
账户的失效日期:
可以规定一个日期使账户不能再使用,通常用在 【收费服务中】
保留:
最后一个字段是保留,看以后是否有新功能加入。
1.3 用户账号管理
1.3.1 useradd 命令
创建一个新的用户
语法:
useradd 账户名
常用选项:
- -u:指定用户 uid
- -g:指定用户所属群组
- -d:指定用户的家目录
- -c:指定用户的备注信息
- -s:指定用户的 shell
示例:
useradd -u 666 -g police -s /bin/bash user01
sudo useradd rose # 创建新用户 rose
sudo passwd rose # 设置密码
# 要使新用户有 root 权限
sudo vim /etc/sudoers
# 修改文件如下:
# User privilege specification
root ALL=(ALL:ALL) ALL
rose ALL=(ALL:ALL) ALL
cat /etc/passwd # 查看用户列表
sudo userdel -r rose # 删除新用户
su rose # 切换用户
su root # 切换到 root
1.3.2 id 命令
查看用户,结果包含 uid、gid、以及组成员(默认包含自己)
语法:
id 用户名
示例:
id lucy # 用户名
uid=501(lucy) gid=501(lucy) 组=501(lucy) # 后面的组,为组员
# 将用户 tom 添加到 组lucy 中,查看lucy,显示的组员还是只有 lucy,没有 tom,因为 lucy 只属于 lucy 组
id lucy
uid=501(lucy) gid=501(lucy) 组=501(lucy)
id tom
uid=502(tom) gid=502(tom) 组=502(tom),501(lucy)
注意:创建用户时,影响的有六个文件分别为:家目录(/home/)、用户信息(/etc/passwd)、用户密码(/etc/shadow)、群组(/etc/group)、群组密码(/etc/gshadow)、邮箱(/var/spool/mail/用户名)
1.3.3 userdel 命令
删除用户
语法:
userdel 用户名
userdel -r 用户名 # 加上能 -r 能删除干净(推荐使用)
1.3.4 usermod 命令
修改用户(user modify)
语法:
usermod [选项] 用户名 # 选项与 useradd 一致
示例:
# 修改用户的家目录
usermod -d /home/test alex # 将 alex 的家目录修改为 test
mkdir /home/test # 创建一个家目录 test
cp -r /home/alex/.[!.]* /home/test/ # 将alex 中的隐藏文件全部复制到 text 中
注意:在使用 usermod 命令修改用户的家目录时,修改的只是 /etc/passwd 中的配置文件。但是在家目录下并没有一个修改后的家目录,需要重新创建一个家目录(test),否则无法切换用户。
添加组员:
# 覆盖形式
usermod -G group2 group1 # 将 group1 添加到 group2 中
# 追加形式
usermod -aG group2 group1
锁住、解锁用户:
usermod -L # 锁住
usermod -U # 解锁
2. 群组
2.1 /etc/group 文件结构
记录 GID 与 组名的对应,以【:】为分隔符,分为四组:
root:x:0:
tom:x:500:
组名:组名与用户名一致,在创建用户的时候也创建了一个相同名字的群组
密码:用 x 占用,移动到 /etc/gshadow中
GID:群组 ID
此群组支持的账户名称:一个账户可以加入多个群组,要想加入某个群组,直接在最后面追加即可,如:
root:x:0:tom
2.2 群组管理
2.2.1 groupadd 命令
创建一个新的群组账户
语法:
groupadd [选项] 群组用户名
groupadd -g # 指定群组 gid
2.2.2 groupmod 命令
修改一个群组的账户信息
语法:
groupmod [选项] 群组用户名
groupmod -g 520 tom # 修改群组 tom 的 gid 为 520
groupmod -n # 修改群组的名称
2.2.3 groupdel 命令
删除一个群组账户
语法:
groupdel 群组账号
groupdel test
3. 权限管理
3.1 文件权限管理
3.1.1 查看文件权限
[root@localhost ~]# ls -l 或 ll
drwxr-xr-x. 2 root root 4096 10月 14 20::15 aaa
# 【.】 表示在安全状态下创建的文件(由selinux管理安全)
总共分为七组,分别为:“权限信息、硬链接数、属主、属组、文件大小、文件创建日期和文件名”
3.1.2 权限信息
除开 【.】,总共 10 位,分为四组
drwxr-xr-x # 表示这是一个目录文件,属主有可读、写、执行权限,属组和其他用户有可读、执行权限,但没有写权限
-rw-------
- 第1位:文件类型
不同字符表示文件类型不一样,常见的字符如下:
字符 | - | d | l | b | c | p |
---|---|---|---|---|---|---|
说明 | 普通文件 | 目录文件 | 软链接 | 块设备文件(如硬盘) | 字符设备文件 | 管道文件 |
- 第2 - 4位:属主的权限(文件所有者)
- 第5 - 7位:属组权限(文件所属组)
- 第8 - 10位:其他用户权限
注意:上面例子中,文件 aaa 属于 root(属主,即是它的主人),root 对其有一定的权限
在 Linux 中,每个文件都有所属的所有者和所有组,并规定了文件的所有者、所有组以及其他人对文件的可读(r)、可写(w)、可执行(x)等权限,也可以用数字表示,如下表:
权限分配 | 文件所有者 | 文件所属组 | 其他用户 | ||||||
---|---|---|---|---|---|---|---|---|---|
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
数字为简化权限的表示,若某个文件的权限为 7,表示有可读、写、执行权限(4+2+1),权限为 6,表示有可读、写,没有执行权限(4 +2)。rwxrw-r--
用数字表示为 764
注意:root 用户和用户本身对权限没有限制,即使是可读文件,也能编辑并强制保存,其他用户不可以
3.1.3 chmod 命令
用于修改文件权限,【u】表示属主、【g】表示属组、【o】表示其他用户
语法:
chmod u-rwx # 减法(表示去掉读、写、执行权限)
chmod u+rwx # 加法(表示设置为有读、写、执行权限)
chmod u=rwx # 赋值
chmod u=--- # 赋值
chmod g=- # 赋值简写,表示三个 -
注意:只有属主和 root 才有修改文件权限,其他人和数组都没有修改权限
将组员添加到别的组中,将会拥有那个组的权限,需要重新登录用户
3.1.4 执行文件方法
当一个文件中有命令时,可以用命令执行这个文件,文件中的命令也将被执行,前提是这个用户对这个文件有可执行权限。
sh 文件路径
bash 文件路径
. 文件路径
./ 文件路径
示例:
# a.txt 中的命令
echo 'hello world'
pwd
./a.txt # 执行文件
注意:对文件具有 w 权限,不可以删除文件,删除文件是目录的权限范围,文件权限仅对文件内容本身起作用
3.2 目录权限管理
3.2.1 查看目录文件权限
ll -d /tmp
drwxr-xr-x. 2 root root 4096 10月 14 20::15 /tmp/
- r:可以查看该目录下的子文件名,子目录名
- w:可以在该目录下创建、删除、迁移、重命名(修改文件内容,是文件权限)
- x:可以 cd 到该目录下
去掉可执行权限:
[root@hj tmp]# ll -d test
drwxr-xr-x. 2 root root 4096 10月 15 19:07 test
[root@hj tmp]# chmod o-x test # 去掉 test 可执行权限
[root@hj tmp]# ll -d test
drwxr-xr--. 2 root root 4096 10月 15 19:07 test
[root@hj tmp]# su - tom # 切换为用户 tom
[tom@hj ~]$ cd /tmp/test
-bash: cd: /tmp/test: 权限不够
注意:开放目录给其他人,至少需要赋予 r 或 x 权限,读取目录内容需要开启 r 和 x 权限,新建、删除需要 x 和 w 权限
3.3 属主及属组
3.3.1 chown 命令
修改属主、属组,(change owner)
语法:
chown [参数] 属主:属组 文件或目录
chown 属主.属组 文件或目录 # 属主属组都修改
chown 属主 文件或目录 # 只修改属主
chown .属组 文件或目录 # 只修改属组
chown -R 属主.属组 文件或目录 # 递归修改权限,即对目录下的所有目录和文件进行整体修改
注意:修改属主和属组的时候,需要在 root 用户下才能修改,普通用户会提示:“chown: 正在更改"xxx" 的所有者: 不允许的操作”