必备知识
在介绍Linux系统的用户、组和权限管理之前,我们先简要说明一些Linux的基础概念:
- Linux是什么
- 自由的含义是什么
- Linux的哲学思想什么
- 常见的发行版都有哪些
Linux是什么
Linux(ˈ[lɪnəks])是一种自由和开放源代码的类UNIX操作系统;严格来讲,术语Linux只表示操作系统内核本身,但通常采用Linux内核来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其他实用工具。同时遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。
自由的含义是什么
GNU/Linux自由和开放源代码的类UNIX操作系统,而自由简单来说包含四种特性:
- 1、自由学习、自由修改源代码
- 2、可以出于任何目的获得源代码
- 3、可以自由分发源代码
- 4、自由创建衍生版
自由软件常常会遵循一些开源协定:General Public License(GPL),Berkeley Software Distribution license(BSD),Apache License(APL),The MIT License(MIT)等
Linux的哲学思想什么
- 1、一切皆文件
- 2、由众多功能单一的程序组成
- 3、尽量避免跟用户交互
- 4、使用文本文件保存配置信息
常见的发行版
由于GNU/Linux:通常以源码(文本格式)方式提供,由Linux内核自由组合多种应用源码包组合编译而成;而编译的过程往往会阻挡一些刚刚接触Linux的初学者,并且一直高手又不屑之;这时候就会有人站出来胆气组合GNU/Linux系统的责任并公布发行,它一般是由一些组织、团体、公司或者个人制作并分发的。分发版为许多不同的目的而制作,因为自由的概念在不同的发现版间又会产生一些衍生版。下面列举几个常见Linux发行版;
Debian:{ubuntu:[mint,],knopix}
Slackware:{S.u.S.E:[ SLES,OpenSUSE]}
RedHat:{Redhat 9.0:{RHEL:[CentOS,],Fedora Core:[,]}
Gentoo
ArchLinux
对以上有的初步了解,我们就可以谈谈为什么需要用户、组和权限管理,什么是用户、组和权限管理,他们之间怎么完成协同操作以及一些常见的用户、组和权限管理命令做扼要的概述;
话不多说先上图^_^.. 点击图片放大~
其实也就是笔记的堆叠而已,后期如果有新感悟会更新内容,高手请略过~~
用户和组基础概念
什么时候有了用户和组的概念
之前的系统又叫多用户多任务操作系统(Multi-tasks,Multi-Users),为让每一个使用计算机的人的权益不损害,必须要完成资源隔离的机制; 为了实现隔离就需要标识每一个使用者,因此每一个使用者就是一个用户; 而现在并非一定要标识每一个使用者,如生物识别技术:指纹、虹膜等
用户、组是什么
用户:
这里的用户是计算机识别个体的专用标识。可以是用户名、密码、或者计算机识别标识的一直机制,而这种机制最终要转换为计算机的唯一使用标志。我们把它称之为用户ID。
识别用户的两组组件:用户标识、密码;
密码是一种认证手段,用来识别用户的资源使用;
为了实现资源的隔离,并且判别使用者身份,就要在操作系统上完成两种机制
- Authentication认证:识别资源与用户的关系
- Authorization授权:创建删除等
- Auditon审计:监督权限关系
故称为3A
组:
用户组 用户的容器,将多用户合并形成一个逻辑概念,逻辑组;
作用:便于权限分配,能够实现授权多个用户对某一个文件使用权限
为什么有用户、组和权限
- 1、授权机制:管理员,普通用户,两极分配,管理机制较弱。
- 2、系统会对每个文件附加属主、属组、其他访问权限,从而完成从用户到资源权限映射
- 3、每一个用户对资源的使用都会记录到日志中,用来用户行为审计。但并不是对用户每一步都审计。
用户类别有2种
管理员; 普通用户
普通用户又分为2种:系统用户, 登录用户
系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统
用户标识:UserID,UID;16bits二进制数字:0-65535组成; 管理员都0,普通用户1-65535之间。而普通用户在不同版本中的UID有所不同;
系统用户:1-499(cento5-6),1-999(cento7)
登录用户:500-60000(centos5-6),1000-60000(cento7)
名称解析:名称转换过程 Username <--> UID; 名称解析都在/etc/passwd库中进行。
组的3种类别
组分为3种类别安装不同角度划分;
组类别1:管理员组 ; 普通用户组:系统组 ,登录组
组类别2:在用户的角度划分 ; 用户的主组或者叫用户的基本组 用户的附加组
组类别3:按组包含几个用户划分 ;私有组:组名同用户名,且包含一个用户 公共组:组内包含了多个用户
组标识:GroupID,GID ;管理员组都为0 ,普通用户组1-65535之间;而普通用户在不同版本中的GID有所不同;
系统用户组:1-499(cento5-6),1-999(cento7)
登录用户组:500-60000(centos5-6),1000-60000(cento7)
名称解析:groupname gid 解析库:/etc/group
认证信息:登录认证
通过比对事先存储的,与登录时候提供的信息是否一致;password存储位置:用户密码/etc/shadow,组密码:/etc/gshadow
密码的使用策略:
- 1、随机密码
- 2、最短长度不要低于8位
- 3、应该使用大写小写字母、数字和标点符号四类字符中至少三类;
- 4、定期更换;
加密算法一般为民用算法,主要分为3种对称加密、非对称加密、单向加密;
对称加密:加密和解密使用同一个密码
plain text(明文)+密码(密钥) --> box(加密) --> cipher text(密文)
cipher text(密文)+密码(密钥) --> box(解密) --> plain text(明文)
非对称加密:加密和解密使用的一对儿密钥;
公钥:pulic key
私钥:private key
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
单向加密:只能加密,不能解密;提取数据特征码;只要数据不同就会有一个不同的特征码;
特性:
定长输出:无论原来的数据有多大,而提取出来的指纹都是一样长度的;
雪崩效应:数据发生微小的改变,而提取出来的指纹完全不一样;
~]# echo "123"|md5sum ba1f2511fc30423bdbb183fe33f3dd0f - ~]# echo "123."|md5sum f1d6660f4abb580b1c855b418026f1ba -
算法:
1、md5:message digest,128bits 2、sha:secure hash algorithm,160bits 3、sha224:secure hash algorithm,256bits 4、sha256:secure hash algorithm,256bits 5、sha384:secure hash algorithm,384bits 6、sha512:secure hash algorithm,512bits
linux系统会在用户登录和创建时会使用到salt方法; 所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。 参考linux标准的passwd.c源文件,在pw_encrypt函数,slat用到了crypt()加密生成密文;crypt密文里是由三部分组成的,即:$id$salt$encrypted 目前常用的是当id为1时,使用md5加密,以此类推,id为6采用SHA512进行加密。 salt只是某个的固定长度的随机的可见的字符串而已。 参考了: linux 用户密码加密分析 http://www.programgo.com/article/90054995856/ 浅谈MD5加密算法中的加盐值(SALT) http://blog.csdn.net/blade2001/article/details/6341078 shell 生成指定范围随机数与随机字符串 http://blog.csdn.net/fdipzone/article/details/24329523 Linux 下产生毫秒级随机数方法 http://www.lxway.com/6181101.htm
相关配置文件
/etc/passwd :用户信息相关
gentoo:x:4001:4001::/home/gentoo/:/bin/csh name:password:UID:GID:GECOS:directory:shell name: 用户名 password:可是加密密码;占位符x表示密码存在/etc/shadow中;如果是“!”说明此用户不能用密码登录;细节man 5 passwd;man pwconv UID:就是用户识别码(ID) GID:用户所属的主组的ID号;与/etc/group文件有关; GECOS:可选;注释信息 directory:用户的家目录; shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码相关;包括用户期限信息 #man shadow
root:$1$HDHf2v4i$LMo.xGHfxQDOf8e043C.g/:16779:0:99999:7::: username:password:last_change:min_change:max_change:warm:failed_expire:expiration:reserved 用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:密码禁用期:过期期限:保留字段 username:用户名 password:加密密码;由三部分组成的,以$分隔,即:$id$salt$encrypted $数字$随机数$加密后的密码 id表示加密算法;当id为1时,使用md5加密,以此类推,id为6采用SHA512进行加密。 last_change:最近一次修改密码的时间,相对想时间;0表示用户下次登录时更改密码;空字段为密码期限禁用; min_change:最短使用期限;密码更完后使用一段时候后才能改密码;0或空表示没有限制; max_change:最长使用期限;从上次更改密码后,最长使用时间;超过后进入密码警告期段; warm:警告期段;参考最长使用期限 failed_expire:密码禁用期;参考以上,密码过了宽限期,密码锁定; expiration:用户过期期限;不同于密码过期;账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登录。 reserved
/etc/group:组的信息库 ;细节 whatis group ;man 5 group
distro:x:5000:gentoo group_name:password:GID:user_list password:占位符x,存放在/etc/gshadow中 user_list:该组的用户成员;以此组为附加组的用户的用户列表; ~]# id gentoo uid=4001(gentoo) gid=4001(gentoo) 组=4001(gentoo),5000(distro),5001(peguin)
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文件中;也可以不指明里面的shell,但是在安全检查时可能会报错。 [root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin 用户不登陆 /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh -r,--system:创建系统用户; -M:不为用户创建主目录 -f,--system:创建系统用户; 注意:创建用户时的诸多默认设定配置文件为/etc/login.defs useradd -D,创建的默认属性信息 useradd -D [选项] 修改默认属性 修改的结果保存于 /etc/default/useradd文件中; [root@localhost ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 非活动期限为禁用 EXPIRE= 过去期限9999 SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes 要不要创建邮件缓存序列,/var/spool/mail/目录创建 useradd
usermod命令:修改用户属性 usermod [选项] 登录 -u, --uid UID:修改新UID号 -g, --gid GROUP:修改用户所属的基本组 -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;*** -a, --append:与-G一同使用,用于用户追加新的附加组;*** usermod -a -G ftp,admins,othergroup <username> -c --comment COMMENT:修改注释信息; -d, --homeHOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置; -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录; -l, --login NEW_LOGIN:修改用户名 -s, --shell SHELL:修改默认SHELL -L,--lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!" -U,--unlock:解锁用户的密码
userdel:删除用户
userdel [选项] 登录
-r:删除用户时一并删除家目录,默认是不删除家目录的;
几个小练习帮你回忆
练习1:创建用户gentoo,UID4001,基本组为gentoo,附加组为distro(GID:5000)和peguin(GID:5001) 练习2:创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh 练习3:修改gentoo用户的家目录为/var/tmp/gentoo;要求其原有文件让能被用户访问; 练习4:为gentoo新增加附加组netadmin;
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
gpasswd命令: 组密码文件: /etc/gshadow gpasswd [选项] group -a USERNAME:向组中添加用户 -d USERNAME:从组中移除用户 注意:给组添加密码,会在临时切换组的时候用到;
newgrp命令: 临时切换指定的组为基本组 newgrp [-] [group] -:会模拟用户重新登录以实现重新初始化其工作环境;
chage:密码失效是通过此命令来管理的。 参数意思: -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M 密码保持有效的最大天数。 -W 用户密码到期前,提前收到警告信息的天数。 -E 帐号到期的日期。过了这天,此帐号将不可用。 -d 上一次更改的日期 -i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 chage -m 7 -M 60 -W 10 -I 30 oldboy Last password change : Aug 09, 2014最近一次密码修改时间 Password expires : never 密码过期时间 Password inactive : never 密码失效时间 Account expires : never 帐户过期时间 Minimum number of days between password change : 0 两次改变密码之间相距的最小天数 Maximum number of days between password change : 99999 两次改变密码之间相距的最大天数 Number of days of warning before password expires : 7 在密码过期之前警告的天数 修改用户密码有限期 chage Chage -E 类似useraddd -e Chage -l 查看用户相关设置
id命令:显示真实的和有效ID id [OPTION]... [USER] -u:仅显示有效的UID; -g:仅显示用户的基本组ID -G:仅显示用户所属的所有组的ID -n:显示名称
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来回去所有文件的详细属性信息;
权限组合机制:
权限位的变化用二进制来表示,正好对应8进制中所有的符号;
--- 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表示法: 赋权表示法:直接操作一类用户的所有权限位 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命令: chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE... 选项: -R:递归修改 owner:group 或者owner.group
chgrp命令: chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... 注意:仅管理员可修改
umask:文件的权限反向掩码,遮罩码;遮罩码也是权限位 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会将创建的临时文件名直接返回,因此,可以直接通过命令引用保存起来;
小结:
了解或者熟悉以上内容对于学习Linux是远远不够的,那么这时就需要自己拥有独立学习的能力或者把它当作兴趣点投身其中,这里仅推荐一些自己知道的辅助学习信息;学习是自己的事,不要攀比,把它当作兴趣养成习惯,只要认真做一件事将来定不会差到哪里去~~
书籍:《穿越计算机的迷雾》、《量子物理史话》、《LINUX内核完全剖析:基于0.12内核》
书籍出版社:O'Reiley Wrox 机械工业、电子工业、人邮、清华大学、水利水电
如何获取使用帮助:help --help,man,info 自带文档(README,CHANGELOG,INSTALL),官方文档 发行版的文档 善用搜索引擎Google
国内网站:鸟哥:http://linux.vbird.org/ 使用最新CentOS7教学
转载请注明出处:http://www.cnblogs.com/jasperhsu/p/5043986.html