用户、组和权限管理
Multi-tasks #多任务
Multi-Users #多用户
每个使用者:
用户标识、密码;
Authentication #认证机制
Authorization #授权机制
Audition #审计机制
3A机制
组:用户组,用户容器
用户类别:
管理员
普通用户
系统用户
登录用户
用户标识:UserID, UID
16bits二进制数字:0-65535
[root@192 ~]# id #查看当前登录用户信息
uid=0(root) gid=0(root)……
管理员:0
普通用户:1-65635
系统用户:1-499(CentOS6), 1-999(CentOS7)
登录用户:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:名称转换
Username <--> UID
根据名称解析库进行:/etc/passwd
组:
组类别1:
管理员组
普通用户组
系统组
登录组
组标识:GroupID, GID
管理员组:0
普通用户组:1-65635
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:groupname <--> gid
解析库:/etc/group
组类别2:
用户的基本组
用户的附加组
组类别3:
私有组:组名同用户名,且只包含一个用户;
公共组:组内包含了多个用户;
认证信息:
通过比对事先存储的,与登录时提供的信息是否一致;
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
[root@192 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
name: 用户名
password:可以是加密的密码,也可是占位符x;
UID:用户ID
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
[root@192 ~]# cat /etc/shadow
root:$6$iqQhDZXm4ZfjGBZ1$fWvDc9bZBmU30SdK2he/KW1MSoPxy1yZ7nsMyVy9y3Ab4.IKERvh7ZJiSc0TyWy3umKytNkiveoL/PshuWZ9n/::0:99999:7:::
用户名:salt随机数:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
/etc/group:组的信息库
group_name:password:GID:user_list
[root@192 ~]# cat /etc/group
root:x:0: #x代表密码被另存在/etc/gshadow中
bin:x:1:
user_list:该组的用户成员;以此组为附加组的用户的用户列表;
Linux用户和组管理
安装上下文:
进程以其发起者的身份运行;
进程对文件的访问权限,取决于发起此进程的用户的权限;
系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建 多个普通用户;这类用户从不用登录系统;只是为了让命令在执行时可以以此身份运行。
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID;默认是上一个组的GID+1;
-r: 创建系统组;
groupmod命令:修改组属性
groupmod [选项] GROUP
-g GID:修改GID;
-n new_name:修改组名;
groupdel命令:删除组
groupdel [选项] GROUP
useradd命令:创建用户
useradd [选项] 登录名
-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:创建系统用户;
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认配置;
useradd -D 选项: 修改默认选项的值;
修改的结果保存于/etc/default/useradd文件中;
usermod命令:修改用户属性
usermod [选项] 登录
-u, --uid UID:修改用户的ID为此处指定的新UID;
-g, --gid GROUP:修改用户所属的基本组;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
-a, --append:与-G一同使用,用于为用户追加新的附加组;#useradd -aG
-c, --comment COMMENT:修改注释信息;
-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l, --login NEW_LOGIN:修改用户名;
-s, --shell SHELL:修改用户的默认shell;
-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
-U, --unlock:解锁用户的密码;
userdel命令:删除用户
userdel [选项] 用户
-r:删除用户时一并删除其家目录;
密码:
passwd命令:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用户自己的密码;
(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE: 过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
--stdin:
echo "PASSWORD" | passwd --stdin USERNAME
[root@192 ~]# echo 'centos' | passwd --stdin Centos #修改Centos密码
更改用户 Centos 的密码 。
passwd:所有的身份验证令牌已经成功更新。
gpasswd命令:
组密码文件:/etc/gshadow
gpasswd [选项] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
newgrp命令:临时切换指定的组为基本组;
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
chage命令:更改用户密码过期信息
chage [选项] 登录名
-d
-E
-W
-m
-M
id命令:显示用户的真和有效ID;
id [OPTION]... [USER]
-u: 仅显示有效的UID;
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n: 显示名字而非ID;
su命令:switch user
登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令;
例:[root@192 ~]# su - gentoo -c 'whoami'
gentoo
权限管理:
ls -l
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限;
右三位:定义other的权限
进程安全上下文:
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用other的权限;
权限:
r:readable, 读
w:writable, 写
x:excutable,执行
文件:
r:可获取文件的数据;
w: 可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用ls命令获取其下的所有文件列表;但无法使用ls -l 查看详细信息
w: 可修改此目录下的文件列表;即创建或删除文件;
x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;
mode:rwxrwxrwx
ownership:user, group
权限组合机制:
--- 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命令:修改文件权限
chmod [OPTION]... MODE[,MODE]... FILE... #赋权法
chmod [OPTION]... OCTAL-MODE FILE... #8进制权限
chmod [OPTION]... --reference=RFILE FILE... #引用修改
三类用户:
u:属主
g:属组
o:其它
a: 所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
#例:[root@192 ~]# chmod u=rwx,g=rwx,o=rw fstab #各部分之间用 逗号 隔开 没有权限可以为空
[root@192 ~]# ll fstab
-rwxrwxrw-. 1 root root 541 12月 29 22:30 fstab
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
#例:[root@192 ~]# chmod u-w fstab # 两种同样操作时可以合并 ~]#chmod ug+w fstab
[root@192 ~]# ll fstab
-r--rwx---. 1 root root 541 12月 29 22:30 fstab
(2) chmod [OPTION]... OCTAL-MODE FILE...
~]#chmod 660 fstab
(3) chmod [OPTION]... --reference=RFILE FILE...
#例:[root@192 ~]# chmod --reference=/var/log/messages fstab #参照messages权限赋予fstab同样的权限
[root@192 ~]# ll fstab
-rw-------. 1 root root 541 12月 29 22:30 fstab
选项:
-R, --recursive:递归修改
注意:用户仅能修改属主为自己的那些文件的权限;
从属关系管理命令:chown, chgrp
chown命令:修改属主属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
例:[root@192 tmp]# ll -d skel/ #查看skel 目录的详细信息
drwxr-xr-x. 3 root root 74 12月 29 23:02 skel/
[root@192 tmp]# chown -R gentoo:cc skel/ #修改属主和属组信息 “ :” 可用“ . ” 代替
[root@192 tmp]# ll -d skel/ # ~~~
drwxr-xr-x. 3 gentoo cc 74 12月 29 23:02 skel/
另:[root@192 tmp]# chown :root skel/ #命令可以只跟 :GROUPNAME
[root@192 tmp]# ll -d skel/
drwxrwxr-x. 3 root root 60 12月useradd 29 23:45 skel/
chown [OPTION]... --reference=RFILE FILE...
例:[root@192 tmp]# chown --reference=/tmp/haha/ /tmp/skel/ #同chmod 同样的用法
选项:
-R:递归修改
chgrp命令:#修改文件属主或者属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可修改文件的属主和属组;
思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
思路:一个目录当前用户组没有写权限--修改用户组 并将另个用户加入其中并赋予该用户组写权限。 登录另一个用户则该用户对该目录有写权限,对其下文件却没有写权限
[root@192 tmp]# ll -d ./skel/ #查看改目录权限
drwxr-xr-x. 3 root root 74 12月 29 23:02 ./skel/
[root@192 tmp]# usermod -a -G cc gentoo #将一个用户追加一个附加组
[root@192 tmp]# chown -R root:cc skel/ #将目录所属组递归 修改
[root@192 tmp]# chmod g+w skel/ #对用户组附加W权限
[root@192 tmp]# su gentoo #切换用户
[gentoo@192 tmp]$ echo "hello" >> /tmp/skel/.bashrc #向文件写入数据 (修改内部文件)
bash: /tmp/skel/.bashrc: 权限不够
[gentoo@192 tmp]$ rm /tmp/skel/.bashrc #删除该文件
rm:是否删除有写保护的普通文件 "/tmp/skel/.bashrc"?y
所以不能修改该文件内容,可以删除该文件。
umask:文件的权限反向掩码,遮罩码;
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的 结果中有执行权限,则需要将其加1;
umask: 023
666-023=644
777-023=754
umask命令:
umask:查看当前umask
umask MASK: 设置umask
注意:此类设定仅对当前shell进程有效;
install命令:
install - copy files and set attributes
单源复制:
install [OPTION]... [-T] SOURCE DEST
多源复制:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
创建目录:
install [OPTION]... -d DIRECTORY...
例:
[root@192 ~]# install -d hello #直接创建目录
anaconda-ks.cfg Desktop Documents Downloads hello
常用选项:
-m, --mode=MODE:设定目标文件权限,默认为755;
例:
[root@192 ~]# ll -a /tmp/inittab
-rwxr-xr-x. 1 root root 511 12月 30 01:21 /tmp/inittab # 权限755
[root@192 ~]# ll -a /etc/inittab
-rw-r--r--. 1 root root 511 11月 20 2015 /etc/inittab #实际权限 644
-o, --owner=OWNER:设定目标文件属主;
-g, --group=GROUP:设定目标文件属组;
例:
[root@192 ~]# install -o gentoo -g megeedu -m 666 /etc/inittab /tmp/inittab #直接修改属主,属组,权限
[root@192 ~]# ll -a /tmp/inittab
-rw-rw-rw-. 1 gentoo megeedu 511 12月 30 01:31 /tmp/inittab
mktemp命令:
mktemp - create a temporary file or directory
mktemp [OPTION]... [TEMPLATE]
例:
[root@192 ~]# a=$(mktemp /tmp/mytmp.XXXXX) #利用引用将生成的临时文件目录赋值给a 模板。XXX最少三位 切为大写!!!!
[root@192 ~]# echo $a #显示a的值
/tmp/mytmp.16vTk
常用选项:
-d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;