每个用户通过:用户名和密码(管理)
组分为:用户组,用户容器
用户类别分为:
- 管理员和普通用户
系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统;
普通用户分为:
- 系统用户登录用户
用户通过: UserID, UID 进行标识(以数字进行标识)
- 管理员:0
- 普通用户:1-65635
- 系统用户:1-499(CentOS6), 1-999(CentOS7)
- 登录用户:500-60000(CentOS6), 1000-60000(CentOS7)
用户登录的时候根据名称进行解析:名称转换成 UID
名称解析库:/etc/passwd
组:
管理员组
普通用户组:系统组 和 登录组
组标识:GroupID, GID
管理员组:0
普通用户组:1-65635
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:groupname <--> gid
解析库:/etc/group
组类别2:
- 用户的基本组
- 用户的附加组
- 私有组:组名同用户名,且只包含一个用户;
- 公共组:组内包含了多个用户;
通过比对事先存储的,与登录时提供的信息是否一致;
password:
- /etc/shadow
- /etc/gshadow
- 1、使用随机密码;
- 2、最短长度不要低于8位;
- 3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
- 4、定期更换;
- 对称加密:加密和解密使用同一个密码;
- 非对称加密:加密和解密使用的一对儿密钥;
- 公钥:public key
- 私钥: private key
单向加密:只能加密,不能解密;提取数据特征码;
- md5: message digest, 128bits
- sha:secure hash algorithm, 160bits
- sha224
- sha256
- sha384
- sha512
在计算之时加salt,添加的随机数;
/etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
- name: 用户名
- password:可以是加密的密码,也可是占位符x;
- UID:用户 ID
- GID:用户所属的主组的ID号;
- GECOS:注释信息
- directory:用户的家目录;
- shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
/etc/group:组的信息库
group_name:password:GID:user_list
user_list:该组的用户成员;以此组为附加组的用户的用户列表
- 进程以其发起者的身份运行;
- 进程对文件的访问权限,取决于发起此进程的用户的权限
用户和组管路命令
groupadd [选项] group_name (添加组)
- -g GID:指定GID;默认是上一个组的GID+1;
- -r: 创建系统组;
groupadd zhangbiao
查看添加的组
1 |
|
- -g GID:修改GID;
- -n new_name:修改组名;
groupmod zhangbiao -n zhangtao
groupdel [选项] GROUP (删除组)
groupdel zhangtao
- -u, --uid UID:指定UID
- -g, --gid GROUP:指定基本组ID,此组得事先存在;
- -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
- -c, --comment COMMENT:指明注释信息;
- -d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
- -s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
- -r, --system:创建系统用户;
- -M, --no-create-home 不创建家目录
- -u, --uid UID:修改用户的ID为此处指定的新UID;
- -g, --gid GROUP:修改用户所属的基本组;
- -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
- -a, --append:与-G一同使用,用于为用户追加新的附加组;
- -c, --comment COMMENT:修改注释信息;
- -d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
- -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
- -l, --login NEW_LOGIN:修改用户名;
- -s, --shell SHELL:修改用户的默认shell;
- -L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
- -U, --unlock:解锁用户的密码;
- -r:删除用户时一并删除其家目录;
- (1) passwd:修改用户自己的密码;
- (2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
- -l, -u:锁定和解锁用户;
- -d:清除用户密码串;
- -e DATE: 过期期限,日期;
- -i DAYS:非活动期限;
- -n DAYS:密码的最短使用期限;
- -x DAYS:密码的最长使用期限;
- -w DAYS:警告期限;
echo "2" | passwd --stdin zhangbiao
- -a USERNAME:向组中添加用户
- -d USERNAME:从组中移除用户
组密码文件位于:/etc/gshadow
newgrp命令:临时切换指定的组为基本组(这样执行的操作都是以临时组的名义如:创建文件)
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其
newgrp mysql
touch txt.txt
可以看到新创建的组名是 mysql
exit
- -d
- -E
- -W
- -m
- -M
id [OPTION]... [USER] (显示用户用户的真是ID)
- -u: 仅显示有效的UID;
- -g: 仅显示用户的基本组ID;
- -G:仅显示用户所属的所有组的ID;
- -n: 显示名字而非ID;
# 显示当前用户
id
# 显示指定用户
id roo
登录式切换:会通过读取目标用户的配置文件来重新初始化(会切换到目标用户的家目录)
- su - USERNAME
- su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化(在当前目录下)
- su USERNAME
注意:管理员可无密码切换至其它任何用户
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令
用户权限
进程安全上下文:
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用other的权限;
可以使用 ls -l 查看一个文件或者目录的权限
- 左三位:定义user(owner)的权限
- 中三位:定义group的权限;
- 右三位:定义other的权限
- mode:rwxrwxrwx
- ownership:user, group
- r:可获取文件的数据;
- w: 可修改文件的数据;
- x:可将此文件运行为进程;
- r:可使用ls命令获取其下的所有文件列表;
- w: 可修改此目录下的文件列表;即创建或删除文件;
- x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;
- chmod [OPTION]... MODE[,MODE]... FILE...
- chmod [OPTION]... OCTAL-MODE FILE...
- chmod [OPTION]... --reference=RFILE FILE...
注意:用户仅能修改属主为自己的那些文件的权限;
- u:属主
- g:属组
- o:其它
- a: 所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
- 赋权表示法:直接操作一类用户的所有权限位rwx;
- u=
- g=
- o=
- a=
让一个文件所属用户用户 rwx 的权限
chmod u=wrx test.txt
授权表示法:直接操作一类用户的一个权限位r,w,x;
- u+, u-
- g+, g-
- o+, o-
- a+, a-
把一个文件的可执行权限拿掉
chmod u-x test.txt
(2) chmod [OPTION]... OCTAL-MODE FILE... (以8进制的方式修改权限)
chmod 777 test.txt
(3) chmod [OPTION]... --reference=RFILE FILE... (按照一个参考文件赋予权限)
# 文件 text1.txt 的权限最终和 test.txt 的权限相同
chmod --reference test.txt text1.txt
从属关系管理命令
chown命令
- chown [OPTION]... OWNER] FILE...
- chown [OPTION]... --reference=RFILE FILE...
选项:
- -R:递归修改
注意:仅管理员可修改文件的属主和属组
把文件的用户和属组修改为 roo roo
chown roo:roo test.txt
把文件 test.txt 的属组修改成 root
chgrp root test.txt
install命令
install - copy files and set attributes
常用选项:
- -m, --mode=MODE:设定目标文件权限,默认为755;
- -o, --owner=OWNER:设定目标文件属主;
- -g, --group=GROUP:设定目标文件属组;
单源复制:
- install [OPTION]... [-T] SOURCE DEST
install test.txt zhang/
多源复制:
- install [OPTION]... SOURCE... DIRECTORY
- install [OPTION]... -t DIRECTORY SOURCE...
把 zhang 目录下的所有文件复制到当前目录下
install zhang/* ./
创建目录:
install [OPTION]... -d DIRECTORY...
创建 一个 test 的目录
install -d test
mktemp命令:
- mktemp - create a temporary file or directory
mktemp [OPTION]... [TEMPLATE]
常用选项:
- -d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;
Linux系统有特殊的目录,专供临时文件使用。Linux使用/tmp目录来存放不需要永久保留的文件。mktemp命令专门用来创建临时文件,并且其创建的临时文件是唯一的。shell会根据mktemp命令创建临时文件,但不会
使用默认的umask值(管理权限的)。它会将文件的读写权限分配给文件属主,一旦创建了文件,在shell脚本中就拥有了完整的读写权限,其他人不可访问(除了root)。mktemp命令用法如下:
默认情况下,mktemp会在本地当前目录创建一个临时文件,创建临时文件时只需要创建模板文件,模板可以包含任意的文件名,文件末尾可以根据需要添加n
个X
。Demo如下:
mktemp test.XXX
作业练习
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
useradd -M -r -s /sbin/nologin mariadb
2、新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
groupadd -g 5000 mageedu
useradd -d /users/gentoo gentoo
echo gentoo | passwd --stdin gentoo
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
useradd -d /users/www www
userdel www
5、为用户gentoo和fedora新增附加组mageedu;
usermod -aG 5000 gentoo
usermod -aG 5000 fedora
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;
cp -r /var/log /tmp
chown -R :mageedu /tmp/log
chmod g+w /tmp/log