今天是学习马哥教育第四天,也是第一个博客作业,写一篇关于用户及权限管理的简介型的博客文章,作文水品有限,所以写出来有可能有病句或者意境有问题,请大家多多包涵。
首先,用户及权限管理,需要从2方面入手来说,首先来说用户管理。
何谓用户,这是马哥一上来就提到的问题,我简单的理解,用户其实就是一个人机交互的接口,人机交互的接口是shell ,但是登录shell的时候都需要有用户名和密码登录,否则系统是不会允许用户登录的,这一点和windows 不太一样,在windows中,是允许空密码登录的,这一点Linux 比 Windows 安全,Linux 是不允许空密码登录的。那么我们怎样去理解用户这个概念呢,在人的角度上来说,我们每一个人都是一个用户,我们去银行办卡,那个账户其实就是用户,人类识别用户很简单,就是用户名,也就是字符串来识别,我们每个人的银行账户都是唯一的,都只代表了你一个人,不能代表其他人,当然,你可以办很多的卡,但是每一个账户都是唯一的。对于计算机来说,它识别的最简单的就是二进制,所以说,计算机识别的用户是用户的ID号,我们叫做UID,那么当我们登录账号和密码的时候,在计算机中这个过程是怎样的呢?首先当我们输入完账号和密码之后,计算机会先找到/etc/passwd 其实这个文件就是一个简单的数据库文件,请看下面截图:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
(图1)
这个文件中的每一行可以看成是一条记录,每一列其实使用:分割开了,就像是一个数据库的二维表一样,可以通过类似的查询语句找到我们登录的用户名是否存在,如果不存在,系统会报出这样一个错误:,意思是登录不正确。
然后我们再看密码验证机制,其实密码验证机制还需要进一步的展开说明。
提到密码,我们先来看一下密码使用策略原则,必须满足以下几点
1、使用随机密码
2、最短长度不要低于8位
3、应该使用大写字母、小写字母、数字和标点符号4类字符中最少3类做为密码
4、密码需要定期更换
然后我们来讲一下加密算法,打个比方来说,如果在计算机上设置好密码之后,就把密码明文存放在计算机的文件中或者是数据库中的话,这样是非常不安全的,因为如果其他的用户登录系统,如果具有高级管理员权限的话,就会造成密码泄露,所以我们需要使用加密算法来加密保存用户设置的密码。现在的加密算法主要分为以下3类
1、对称加密 加密和解密使用同一个密码,速度快,但是不安全
2、非对称加密 加密和解密使用一对密钥,密钥分公钥和私钥,这样比较安全,但是速度太慢,非对称加密所用的时间是对称加密的3个数量级
3、单向加密 只能加密不能解密,提取数据指纹(特征码)
单向加密的特点是定长输出,什么是定长输出呢,就是说8位的密码。20位的密码,都会被当作加密内容定长加密,密文的长度都是一样的
单向加密的特点还有就是雪崩效应或者说是蝴蝶效应,也就是说,你更改了密码或者是文件当中的一小部分内容,那么密文的结果将会是翻天覆地的变化
linux 主要用到的单向加密分以下6种
1、md5 message digest 5是版本号,是128位定长
2、sha secure hash algorithm 安全的哈希加密算法 160位定长
3、sha224
4、sha256
5、sha384
6、sha512
不论是用哪一种加密算法加密出的密文,在加密之前都需要加上随机数(salt)之后再加密,这是因为如果用户能打开/etc/shadow 看到和自己一样的密文,就能猜出其他用户的密码
这里我们提到了用户的密码存放位置 /etc/shadow 这个文件,其实用户登录的时候内核在验证完/etc/passwd 之后,如果用户名存在,那么就需要把你刚刚输入的用户名提取出来,到/etc/shadow 这个文件中去比对,请看下面的截图:
root:$6$r2KRPIf/llqwEcCt$jW8yjiWYaEKqMEGuWctlOeqrM9yb6bSSBU57wcwWcpeMTbJNBrPExBYXFi1fkCWkU8pdOfuh51m/SuP5VFQ4r/::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::
games:*:16659:0:99999:7:::
ftp:*:16659:0:99999:7:::
nobody:*:16659:0:99999:7:::
avahi-autoipd:!!:17036::::::
systemd-bus-proxy:!!:17036::::::
systemd-network:!!:17036::::::
dbus:!!:17036::::::
polkitd:!!:17036::::::
tss:!!:17036::::::
postfix:!!:17036::::::
sshd:!!:17036::::::
test:$6$EgCCFvGO$.DVY878bWmEQdd/arosOmsFy/N1sPHLJ9ALGNxS4.ZLmlQ5bOPgexwEWsz/heVw6BseQJsxNh4oMdNrVu3.p/0:17041:0:99999:7:::
(图2)
从这个文件中先查找出用户名所对应的密码。然后找到这个密码的随机数(salt)然后把随机数和你刚刚输入的密码添加到一起做单项加密,把加密后的结果和这个文件中所对应的记录的密码做比对,如果正确,那么就允许用户登录,如果错误,就报错
说了这么多,其实就是解释了一个用户登录shell或者说使用linux系统的一个简单的过程而已,下面来讲一下linux是怎样对用户进行管理的。
首先,我们明白一个道理 就是linux系统的用户管理有这样一个映射关系
用户——–用户组(角色)———-权限
多对多 多对多
我们每一个用户都是一个独立的个体,所以我们每一个用户都有自己独立的权限,但是有时候有这样或者那样的需求,比如说我们想让tom和jerry具有相同的访问某一个目录的权限,如果不使用用户组(角色)的话,我们需要分别给tom 设置好权限,在给jerry设置好权限,但是如果有用户组的概念的话,我们可以让tom 和jerry所属为同一个用户组,我们给这个用户组某种权限,这样tom和jerry就具有了相同的权限,这样就可以方便的去访问相应的目录了,所以说,用户组(角色)的作用就是方便我们管理不同用户的相同的权限。
我们来单独看用户的管理,linux中把用户分为管理员用户和普通用户,普通用户又可以分为系统用户和登录用户,用一个图这样表示:
-
管理员用户 root UID 0
普通用户 UID 1-60000
系统用户 非登录用户 对于CentOS7 1-999 CentOS6 1-499
登录用户 CentOS7 1000-60000 CentOS6 500-60000
然后我们来说用户组,用户组我们可以理解成程序的角色,也就是用户的容器,用户组如果从静态的角度来分,和上面的用户分类是一样的
组类别划分1
管理员用户组 root UID 0
普通用户组 UID 1-60000
系统用户组 非登录用户 对于CentOS7 1-999 CentOS6 1-499
登录用户组 CentOS7 1000-60000 CentOS6 500-60000
组类别划分2
用户的主组,基本组
用户的附加组
组类别划分3
用户的私有组 组名同用户名且包含一个用户
用户的公共组 组内可以包含多个用户
说完上述2个概念之后,我们来详细说明/etc/passwd 中的内容,我们可以使用man 5 passwd 命令来查询passwd中的详细信息
/etc/passwd:用户的信息库文件(图1)
name:password:UID:GID:GECOS:directory:shell
UID:用户ID
GID:用户所属的主组的ID号
GECOS:用户的注释信息
directory:用户的家目录
shell:用户的默认shell
/etc/shadow:用户密码文件(图2)
用户名:加密的密码:最近一次修改密码的时间:密码的最短使用期限:密码的最长使用期限:密码警告期限:账户过期期限:保留字段
用一幅图来描述一下各个期限的范围
/etc/group 组信息库
group_name:password:GID:user_list
user_list 改组的用户成员:以此组为附加组的用户列表
下面具体的讲解Linux用户和组管理的各种命令
1、groupadd命令 创建组命令
groupadd [选项] group
有2个选项,一个是
-g GID 手动指定GID 默认如果不指定的话,是上一个组的GID号加1
-r 创建系统组
介绍一下安全上下文的概念,任何一个进程,都要以发起者的身份运行
比如说,进程访问文件时,对文件的访问权限,取决于发起此进程的用户的权限。
例如:cat /etc/shadow 如果以管理员的身份运行这个命令的时候,那么访问这个文件的权限就要以管理员的身份进行访问,也就是先要查询这个文件的属主 属组 和其他权限是什么,如果说这个文件的属主和发起进程,(运行命令)的用户一样,那么就执行属主的权限,如果没有,那么就要看文件的属组中有没有进程发起者这个用户,如果有,就执行属组权限,否则最后就执行其他权限。
至于说系统用户,就是为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此任务创建多个普通用户,这类用户不用登陆系统,这类用户就叫做系统用户。
2、删除组命令 groupdel 命令
groupdel [选项] GROUP
3、修改组属性命令 groupmod 命令
groupmod [选项] GROUP
-g GID :修改GID 原组名
-n new_name 原组名
4、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文件中;
5、usermod命令:修改用户属性
usermod [选项] 登录
-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:解锁用户的密码;
6、userdel命令:删除用户
userdel [选项] 登录
-r:删除用户时一并删除其家目录;
7、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
8、gpasswd命令:
组密码文件:/etc/gshadow
gpasswd [选项] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
9、newgrp命令:临时切换指定的组为基本组;
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
10、chage命令:更改用户密码过期信息
chage [选项] 登录名
-d:–lastday 修改最近一次修改密码的时间 是距离1970.1.1的Days天数
-E:–expiredate EXPIRE_DATE 账户过期日期 EXPIRE_DATE 设置为 -1 会移除账户的过期日期。
-W:–warndays WARN_DAYS 警告日期天数
-m:–mindays MIN_DAYS 密码最小使用的天数 在密码更改之间的最小天数设置为 MIN_DAYS。此字段中的 0 值表示用户可以在任何时间更改其密码。
-M:–maxdays MAX_DAYS 密码最大最长使用的天数 MAX_DAYS 设置为 -1 会移除密码有效性检查。
11、id命令:显示用户的真和有效ID;
id [OPTION]… [USER]
-u: 仅显示有效的UID;
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n: 显示名字而非ID;
12、su命令:switch user
登录式切换:会通过读取目标用户的配置文件来重新初始化
su – USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令;
其他需要了解的命令:
其它几个命令:chsh, chfn, finger, whoami, pwck, grpck
权限管理:
ls -l
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限;
右三位:定义other的权限
进程安全上下文:
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用other的权限;
权限:
r:readable, 读
w:writable, 写
x:excutable,执行
文件:
r:可获取文件的数据;
w: 可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用ls命令获取其下的所有文件列表;
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
练习:rw-rw-r–, rwxrwxr-x, rwxr-x—, rw——, rwxr-xr-x
664, 640, 600, 775, 750, 755
权限管理命令:
chmod命令:
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=
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]… OCTAL-MODE FILE…
(3) chmod [OPTION]… –reference=RFILE FILE…
选项:
-R, –recursive:递归修改
注意:用户仅能修改属主为自己的那些文件的权限;
从属关系管理命令:chown, chgrp
chown命令:
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
选项:
-R:递归修改
chgrp命令:
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
注意:仅管理员可修改文件的属主和属组;
思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
模拟之;
umask:文件的权限反向掩码,遮罩码;
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;
umask: 023
666-023=644
777-023=754
umask命令:
umask:查看当前umask
umask MASK: 设置umask
注意:此类设定仅对当前shell进程有效;
练习:完成以下任务
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
2、新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
5、为用户gentoo和fedora新增附加组mageedu;
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;
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…
常用选项:
-m, –mode=MODE:设定目标文件权限,默认为755;
-o, –owner=OWNER:设定目标文件属主;
-g, –group=GROUP:设定目标文件属组;
mktemp命令:
mktemp – create a temporary file or directory
mktemp [OPTION]… [TEMPLATE]
常用选项:
-d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;
原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/41896