一. 基本概念
1. 用户与用户组
文件所有者:user
用户组概念:group
-
其他人的概念:others
注意:在Linux里面,任何一个文件都具有“user,group及others”3种身份的个别权限
2. Linux用户和组相关配置文件(不要随意删除以下3个文件)
(1) /etc/passwd:该文件记录用户及其属性信息(名称、UID、基本组ID等等)
root用户:root:x:0:0:root:/root:/bin/bash
普通用户:gentoo:x:4001:4001::/home/gentoo:/bin/bash
字段含义:name:passwd:UID:GID:GECOS:directory:shell
name:用户名
password:可以是加密的密码,也可以是占位符x
UID:用户ID号
GID:用户所属的主组的ID号
GECOS:注释信息
directory:用户的家目录
shell:用户的默认shell,登录时默认shell程序;
(2) /etc/group:组及属性信息
root组:root:x:0: (只有root一个用户)
普通用户组:distro:x:5000:gentoo,gentoo2,gentoo3 (包含gentoo/2/3)
(3) /etc/shadow:用户密码及其相关属性
3. Linux用户和组的分类
(1) Linux上的用户UID分类:
管理员:root,0
普通用户:1-65635
普通用户又分为系统用户和登录用户;
系统用户:1-499(CentOS6),1-999(CentOS7)
登录用户:500-60000(CentOS6),1000-60000(CentOS7)
(2) Linux组GID分类:
- 管理员组:root,0
- 普通组:1-65635
普通组又分为系统组和非系统组(普通组)
系统组:1-499(CentOS6),1-999(CentOS7)
非系统组:500-60000(CentOS6),1000-60000(CentOS7)
二. 用户管理的相关命令
1. 用户管理命令
(1) Useradd:创建用户
命令格式
Useradd [选项] user_name
常用选项
-u UID:指定UID;
-g GROUP:指定基本组ID,此组得事先存在;
-G GROUP1,GROUP2,...,GROUPN:指明用户所属的附加组,多个组
之间用逗号分隔;
-c “”:指明注释信息
-s SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件;
-d /path/to/dir:以指定的路径为用户的家目录;
通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户创建环境配置文件;
-r:创建系统用户;创建用户时的诸多默认设置配置文件为/etc/login.defs
-D:表示修改用户默认的选项;修改的是/etc/default/useradd文件中;
实例
//指定用户UID
[root@localhost ~]# useradd -u 4000 user_u
user_u:x:4000:5002::/home/user_u:/bin/bash
//指定用户GID
[root@localhost ~]# useradd -g 4001 user_g
useradd: group '4001' does not exist
[root@localhost ~]# useradd -g 5002 user_g
user_g:x:4016:5002::/home/user_g:/bin/bash
注意:如果不指定基本组,基本组默认与用户名相同(ID),如上;
[root@localhost ~]# useradd -g 2018 distro
distro:x:4017:2018::/home/distro:/bin/bash
[root@localhost ~]# useradd -u 1005 -g 2018 mandriva
mandriva:x:1005:2018::/home/mandriva:/bin/bash
//指明用户所属的附加组
[root@localhost ~]# useradd -u 2002 -g 2018 -G 5001 slackware
slackware:x:2002:2018::/home/slackware:/bin/bash
peguin:x:5001:slackware
//指定用户的家目录
[root@localhost ~]# useradd -u 1100 -d /home/linux mageia
mageia:x:1100:1100::/home/linux:/bin/bash
(2) usermod命令:修改用户属性
命令格式
usermod [选项] 登录
常用选项:
-u UID:修改用户的ID为此处指定的新UID;
-g GROUP:修改用户所属的基本组
-G GROUP1,...,GROUPN:修改用户所属的附加组;原来的附加组会被覆盖;
-a:与-G一同使用,用于为用户追加新的附加组;
-c COMMENT:修改注释信息;
-d HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
-m:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l NEW_LOGIN:修改用户名;
-s SHELL:修改用户的默认shell;
-L:锁定用户密码;即在用户原来的密码字符串之前添加一个“!”;
-U:解锁用户的密码;
实例
//修改用户的默认shell
[root@localhost ~]# usermod -s /bin/tcsh slackware
slackware:x:2002:2018::/home/slackware:/bin/tcsh
//新增用户附加组
[root@localhost ~]# usermod -aG 5003 slackware
peguin:x:5001:slackware
admins:x:5003:slackware
(3) userdel命令:删除用户
命令格式
userdel [选项] 登录
常用选项
-r:删除用户时一并删除其家目录;
实例
//删除用户,但是保留其家目录
[root@localhost ~]# userdel mandriva
[root@localhost ~]# cd /home
[root@localhost home]# ls
distro gentoo linux mandriva user_G user_g slackware
//删除用户,连同其家目录一起删除
[root@localhost ~]# ls
[root@localhost ~]# userdel -r user_G
[root@localhost home]# ls
distro gentoo linux mandriva user_g slackware
(4) passwd:修改用户自己的密码;
命令格式
Passwd [选项] USERNAME:修改指定用户的密码,但仅root有此权限;
常用选项
-l,-u:分别是用来锁定和解锁用户;
-d:清除用户密码串;
-e DATE:过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
--stdin:从标准输入接受用户密码;
实例
[root@localhost ~]# echo "dlutedu" |passwd --stdin mageia
更改用户 mageia 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
(5) id命令:显示用户的真实和有效ID;
命令格式
id [OPTION]... [USERNAME]
命令选项
-u:仅显示有效的UID;
-g:仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n:显示名字而非ID;
(6) su命令:switch user
- 登录式切换:会通过重新读取用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND' :仅以指定用户的身份运行此处指定的命令;
(7) gpasswd命令:
命令格式
gpasswd [选项] group
常用选项
-a USERNAME:向组中添加用户;
-d USERNAME:从组中删除用户;
(8) newgrp命令:临时切换指定的组为基本组;
命令格式
newgrp [-] [group]
常用选项
-:会模拟用户重新登录以实现重新初始化其工作环境;
2. 用户组管理命令
(1) groupadd命令:添加组
命令格式
groupadd [选项] group_name
常用选项
-g GID:指定GID:默认是上一个组的GID+1;
-r:创建系统组;
实例
[root@localhost ~]# groupadd -g 1000 test1
test1:x:1000:
(2) groupmod命令:修改组属性
命令格式
groupmod [选项] GROUP
常用选项
-g GID:修改GID;
-n new_name:修改组名;
实例
[root@localhost ~]# groupmod -g 10001 -n lucky test1
lucky:x:10001:
(3) groupdel命令:删除组
命令格式
groupdel [选项] GROUP
三. 权限管理
1. ls –l
rwx rwx rwx:
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限
进程安全上下文:
进程对文件的访问权限应用模型:
- 进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
- 否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
- 否则,就只能应用other的权限;
实例
-rwxr-xr-x. 1 root root 884 5月 2 04:27 inittab
User权限:rwx group权限:-xr other权限:--x
2. 权限:
- r:read,读
- w:write,写
- x:excute,执行
(1) 文件:
- r:可获取文件的数据;
- w:可修改文件的数据;
- x:可将此文件运行为进程
(2) 目录:
- r:可使用ls命令获取其下的所有文件列表;
- w:可修改此目录下的文件列表;即创建或删除文件
- x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;
mode:rwx rwx rwx
ownership:user:group
3. 权限组合机制:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
四. 文件权限管理命令
- chmod:改变文件的权限;
- chown:改变文件所有者;
- chgrp:改变文件所属用户组;
1. chmod命令:
命令格式
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
三类用户:
u:属主(user) + 加入
g:属组(group) - 除去
o:其它(others) = 设置
a:所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法
- 赋权表示法:直接操作一类用户的所有权限位;
u=
g=
o=
a=
- 授权表示法:直接操作一类用户的一个权限位:r,w,x;
u+,u-
g+,g-
o+,o-
a+,a-
(2) chmod [OPTION]... OCTAL-MODE FILE...
(3) chmod [OPTION]... --reference=RFILE FILE...
常用 选项:
-R:递归修改,即连同子目录下的所有文件都会更改;
注意:用户仅能够修改属主为自己的那些文件的权限;
实例
//第二种格式修改文件权限
[root@localhost ~]# ls -al myfirst.sh
-rw-r--r--. 1 root root 28 5月 3 03:17 myfirst.sh
[root@localhost ~]# chmod 777 myfirst.sh
[root@localhost ~]# ls -al myfirst.sh
-rwxrwxrwx. 1 root root 28 5月 3 03:17 myfirst.sh
//赋权表示法
[root@localhost ~]# chmod u=rwx,go=rx myfirst.sh
[root@localhost ~]# ls -al myfirst.sh
-rwxr-xr-x. 1 root root 28 5月 3 03:17 myfirst.sh
//授权表示法
[root@localhost ~]# chmod a+w myfirst.sh
[root@localhost ~]# ls -al myfirst.sh
-rwxrwxrwx. 1 root root 28 5月 3 03:17 myfirst.sh
[root@localhost ~]# chmod a-x myfirst.sh
[root@localhost ~]# ls -al myfirst.sh
-rw-rw-rw-. 1 root root 28 5月 3 03:17 myfirst.sh
2. chown命令:
命令格式
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
常用选项:
-R:递归
实例
//将install.log的所有者改为bin
[root@localhost ~]# chown bin install.log
[root@localhost ~]# ls -al install.log
-rw-r--r--. 1 bin test 24772 7月 2 2017 install.log
//将install.log的所有者与用户组改回为root
[root@localhost ~]# chown root:root install.log
[root@localhost ~]# ls -al install.log
-rw-r--r--. 1 root root 24772 7月 2 2017 install.log
3. chgrp命令:
命令格式
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
- 注意:仅管理员可修改文件的属主和属组
实例
[root@localhost ~]# chgrp users install.log
[root@localhost ~]# ls -al install.log
-rw-r--r--. 1 root users 24772 7月 2 2017 install.log
[root@localhost ~]# chgrp testing install.log
chgrp: 无效的组:"testing"