Linux最优秀的地方之一就在于他的多人多任务环境,为了让每个用户都具有比较安全的文件数据,因此文件的权限管理就变得相当重要了。Linux一般将文件可存取的身份划分为三个类别,即属主(owner)、属组(group)和其它(other),并且三种身份都有各自的可读(readable)、可写(writable)和可执行(executable)的权限
首先说用户:
既指实现能够将有限的资源在多个使用者之间进行分配的这么一个组件
多用户:多人同时使用系统资源
多任务:同时进行多个进程
用户的分类
系统用户:管理员账户(root)
普通用户:
系统用户:仅用于运行服务程序
登录用户:系统资源的使用者
用户的标识:UserID 即UID。用户的ID号由16位二进制数字表示,取值范围为:0-65535
管理员账户:ID号为 0
普通用户:
系统用户:
Centos 5和6上:ID号取值为1-499
Centos 7上:ID号取值为1-999
普通用户:
Centos 5和6上:ID号取值为大于等于500
Centos 7上:ID号取值为大于等于1000
用户的名称和ID号是通过名称解析:username <--> UID 即名称转换来实现的,而解析是通过解析库文件;默认情况下,用户的账号存在于/etc/passwd 这一文件中。其存储格式name:password:UID:GID:GECOS(信息注释字段,可选的):directory:shell(默认登录shell),包含了用户名、UID及默认登录shell等信息解析库。
用户组
组可以认为是一种完成快速分配资源的一种机制;或者是完成统一授权的一种容器
组的分类:
管理员组:
普通用户组:
系统组
登录组
组的标识:GroupID,即GID. 同样组的ID号也由16位二进制数字表示,取值范围为:0-65535
管理员组:即root组 ID取值为 0
普通用户组:
系统组:
CentOS 5和6: 组ID取值为 1-499
CentOS 7: 组ID号取值为 1-999
登录组:
CentOS 5和6: 组ID号大于等于500
CentOS 7: 组ID号大于等于1000
同样用户的组名称和组ID也是通过组名称解析方式:groupname <--> gid 来实现转换的;解析也是通过库文件;默认情况下,组的解析库文件存在于:/etc/group 当中。其存储格式为:GRPNAME:x:GID:user1, user2, ... 与之对应得意义为: 组名:密码点位符:GID:以此组为附加组的用户列表,以逗号分隔。
同样组还可以以此种方式进行分类:
以用户为核心:
用户的主组:基本组
用户的附加组:即额外组
根据组内容纳的用户来划分:
私有组:与用户名相同,且只有一个此用户
公共组:组内包含了多个用户
对用户的认证机制:
采用AAA认证机制,即身份认证 (Authentication)授权许可 (Authorization)统计 (Accounting),通过对比事先存储的与登录时所提供的信息是否一致,从而验正用户的确是他所声称的人。用户的认证信息库存在于 /etc/shadow 当中; 组的认证信息库存在于 /etc/gshadow 当中。密码是使用单向加密机制进行加密存放的。
用户和组的管理
对用户和租的管理,通常主要以命令的方式进行,下面介绍常用的命令及对应选项:
组相关的命令:groupadd, groupmod, groupdel
用户相关命令:useradd, usermod, userdel
认证相关的命令:passwd
组相关命令
gruopadd:创建一个组
使用格式:groupadd [选项] group
常用选项:
-g, --gidGID :添加组的时候指明GID号
-o, --non-unique :此选项允许添加一个使用非唯一 GID 的组
-r, --system :创建一个系统组
groupmod:modify a group definition on the system(修改组相关信息)
使用格式:groupmod [选项] GROUP
常用选项:
-g, --gidGID :修改组ID号
-n, --new-nameNEW_GROUP :修改组名
-o, --non-unique :此选项允许修改一个使用非唯一 GID 的组
groupdel:删除组
使用格式:groupdel [选项] GROUP
注意:
不能移除现有用户的主组。在移除此组之前,必须先移除此用户;需要手动检查所有文件系 统,以确保没有遗留的属于此组的文件。
用户相关命令
useradd :创建一个新用户或更新默认新用户信息
使用格式:useradd [选项] 登录名
常用选项:
-c, --comment COMMENT:注释信息,一般为Full Name
-d, --home /PATH/TO/HOME_DIR:家目录路径;目标路径不能事先存在,否则会有警 告,不会得到skel相关的文件给用户
-g, --gid GROUP:用户的基本组组名或GID
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:用户所属的附加组列表,彼此间用逗号 隔开,而且中间没有空格
-m, --create-home:强制创建家目录,此选项一般默认使用
-M:不创建用户主目录,即使系统在 /etc/login.defs 中的设置
(CREATE_HOME) 为 yes
-r, --system:创建一个系统账户(ID号是在一个指定范围内的)
(注:系统用户是不创建用户的家目录的,因为系统用户不会用于登录系统)
-s, --shell SHELL:用户的登录 shell 名称,默认为留空,让系统根据 /etc/default/useradd 中的 SHELL 变量来选择默认的登录shell
注意:创建登录用户时,为其自定义的shell程序必须为可登录shell,
且要位于/etc/shells文件中
-u, --uid UID:用户 ID 的数字值。此值必须为唯一的,除非使用了 -o 选项。此值必须 非负,默认使用大于等于UID_MIN,且大于任何其他用户 ID 最小值
补充:查看添加用户时的默认设置信息的一个命令为:# cat /etc/default/useradd
useradd -D:查看创建用户时的默认设置值的;
useradd -D 选项 加上选项为设置某默认选项;
-e, --expiredate EXPIRE_DATE:用户账号的过期期限;过期后会被锁定(此时需要 管理员进行解锁);日期以 YYYY-MM-DD 格式指定
-f, --inactive INACTIVE:密码过期后,账户被彻底禁用之前的天数。0表示立即禁 用,-1表示禁用这个功能。
注:为用户提供默认配置的配置文件:
/etc/login.defs, /etc/default/useradd
影子口令文件:/etc/shadow
如:# cat /etc/shadow magedu:$6$qA1Ctt/redREhoZG$lmoMrY9Th7cw4Pt7qNm8ZrVJ3KmJ.LTvPbL4FVFkAZiPbJ1lNdfM9g/AOUOTZW ogOb6e66EGwWOPNg2Ic44xh0:16870:0:99999:7:::
格式:登录名:密码:最近一次的修改时间:密码的最短使用期限:密码最长使用期限:提前警告的天 数:非活动期限:账号的禁用日期:保留字段
密码字段表示格式:$加密算法$salt$加密的密码字符串
注:密码:!!$加密算法$salt$加密的密码字符串(若$符前加两个!!号表示此用户已被锁定,禁止 登录了);最近一次的修改时间:其显示的数字意义是从1970年1月1日到上一次修改中间所经 过的完整的天数)
usermod:修改账号信息
使用格式:usermod [选项] 登录名
常用选项:
-c, --comment COMMENT
-d, --home HOME_DIR:修改家目录为新的位置,但一般应该同时使用-m选项以保证原 家目录中的文件会移动到新目录中
-g, --gid GROUP
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改时会覆盖原有的附加组;一同 使用-a选项,表示为用户添加新的附加组
-l, --login NEW_LOGIN:修改当前用户的用户名
-s, --shell SHELL:用户的新登录 shell 的名称。将此字段设置为空会让系统选择 默认的登录 shell
-u, --uid UID:用户 ID 的新数值。这个值必须是唯一的,除非使用了 -o 选项,必 须是非负值
-m, --move-home 将用户的主目录移动到新位置。这个选项只有和 -d (或 --home) 选 项组合使用时才有效。usermod 会改写文件的属主并复制模式、ACL 和扩展属性, 但是稍后也可能需要手动修改
-L, --lock:锁定用户的密码。这会在用户加密的密码之前放置一个“!”
-U, --unlock:解锁用户的密码。这将移除加密的密码之前的“!”
userdel命令:删除用户账号
使用格式: userdel [选项] 登录名
常用选项:
-r, --remove:用户主目录中的文件将随用户主目录和用户邮箱一起删除;如果不使用此 选项不会删除用户家目录和邮箱文件
认证相关命令
passwd:密码管理命令(update user's authentication tokens)
使用格式:passwd [-l][-u[-f]][-d][-e][-n mindays][-x maxdays] [-w warndays]
[-i inactivedays][--stdin] [username]
常用选项:
-l:锁定密码
-u:解锁密码
-d:清除密码
--stdin:从标准输入接收密码(一般在脚本中使用,免得重复)
echo "PASSWORD" | passwd --stdin USERNAME
注:
(1)passwd:不带任何选项,表示修改自己的密码
(2)passwd username:修改其它用户的密码,仅root有此权限
gpasswd命令:为组添加密码
组密码文件放在:/etc/gshadow 文件当中
使用格式:gpasswd [选项] group
常用选项:
-a USERNAME:把用户添加至组中
-d USERNAME:从此组中移除此用户
注意:密码复杂度应符合如下要求:
(1) 不能少于8个字符
(2) 不能使用与过去的密码太相似的密码
(3) 应该使用四类字符中的至少三类
id命令:查看用户相关的id信息
使用格式:id [OPTION]...[USER]
常用选项:
-u:仅查看uid
-g:仅查看gid
-G:查看所属的所有组的ID
-n:显示名称,而非ID
su命令:switch user
切换用户时:
(1)不读取目标用户的配置文件(非登录式切换,半切换)
su USERNAME
(2)读取目标用户的配置文件(登录式切换,完全切换)
su -l USERNAME
su - USERNAME
常用选项:
-c command, --command=command:仅以指定的用户的身份运行此处指定的命令,而不执 行真正的身份切换操作
注意:root切换至任何其它用户无须认证密码;普通用户切换至其它用户,都需要密码
newgrp命令:登录到一个新组;可用于临时切换
主要是将当前登录用户临时加入到已有的组,可以变更目前用户的有效群组, 而且是另外以 一个 shell来提供这个功能。因此用该命令变更当前的有效群组后,就取得了一个新的shell,如 果要回到原先的shell环境中可以输入exit,退出新的shell就又回到原本的环境中
chage命令:(change age)修改用户账号的各种期限
权限管理
一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源
权限模型生效的机制:也即进程的安全上下文的机制
进程的运行者:是否与文件的属主相同,如果是,则以文件属主的身份来访问此文件;
否则是否属于文件的属组;如果是,则以文件属组的身份来访问此文件;
否则以文件的其它用户的身份来访问此文件
安全上下文:
进程:以某个用户的身份运行,进程对资源的操作权限取决于它所代表的用户;
注:在计算机上一般运行的进程最多不能超过1024个
文件系统文件权限
三类用户:
属主:owner, u
属组:group, g
其它:other, o
各自的权限:
r: readable,可读
w: writable, 可写
x:excutable, 可执行
权限管理
文件:
r:可获取文件的数据;
w:可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用ls命令获取其下的所有文件列表;但不可以使用“ls -l”去获取详细
信息,也不可以cd至此目录中
w:可修改此目录下的文件列表, 即可以在此目录下创建或删除文件
x:可以使用"ls -l“命令来获取其下的文件的详细属性信息,也可cd至此目录中
Linux上对三类用户设置的权限:
rwxrwxrwx:每三个字段表示一类用户的权限
owner: rwx
group: rwx
other: rwx
权限组合机制:以owner为例
对应权限 二进制表示 八进制表示
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
权限管理命令
ownership: 仅管理员有权限 ;
改属主:chown
改属组:chgrp
mode(permission):改变文件权限通常仅属主属组有权限,但对管理员来说一切都不是障碍
chmod 改变文件当中属主属组其他用户的权限
chmod:change file mode bits
使用格式:chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...(八位权限模型)
chmod [OPTION]... --reference=RFILE FILE...
把目标文件权限设定为何参考文件权限模型相同
用户的标识符:u,g,o,a
chmod:
(1) chmod [OPTION]... MODE[,MODE]... FILE...
a 赋权表示法:直接操作一类用户的所有权限位rwx
u=
g=
o=
a=
两类用户权限相同:ug=, go=
不同类的用户权限不同:u=,g=,o=
b 授权表示法:操作一类用户一位或多位权限
u+, u-
g+, g-
o+, o-
a+, a-
两类用户权限收授机制相同:ug+, ug-, ...
不同类的用户权限不同(分开写):u+,g+,o+
(2) chmod [OPTION]... OCTAL-MODE FILE...
使用八位数字跟上一个文件即可
如: chmod 770 fstab
注:在写八位数字时,三位数字一定要写全;如77表示:077
(3) chmod [OPTION]... --reference=RFILE FILE...
--reference=RFILE:RFILE:表示参考其它文件其权限模型;把后面
的文件设定为和前面引用权限位模型相同;
常用选项:对以上三种方式都试用
-R, --recursive:递归修改;
注:当使用八位方式修改文件时,使用此选项有很大风险;因为在系统上。默认一般为不允许文
件有执行权限,所以当目录中有文件时一定不要轻易使用八进制修改目录及目录文件权限
chown:
此方式既能改属主又能改属组;仅管理员有权限
使用格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
(冒号前的内容可省,如果省略表示只改属组不改属主;冒号可以换成一个点号)
chown [OPTION]... --reference=RFILE FILE...
常用选项:
-R, --recursive:递归修改; 可以改目录及目录中文件中的属主属组;
chgrp:
更改属组,从属关系只有管理员有权限;
使用格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
umask
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$[HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值
umask:显示或设定文件模式掩码
对于文件:666-umask
对于目录:777-umask
注意:之所以文件用666去减,表示文件默认不能有执行权限;如果减得的结果中,某类
或某位用户的u,g或o有执行权限时,则需要加1,即把写权限改为读权限
查看当前umask值:
使用以下两种方式:
# umask 显示的结果只看后三位数字;如0022 其umask值为022;
# umask -S 如对一个目录显示结果为 u=rwx,g=rx,o=rx
设定方式:
# umask MASK
注意:此设定方式仅对当前shell进程有效