序言
作为一个多用户、多服务的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份、文件权限两方面对资源访问进行限制。
Linux最优秀的地方之一就在于它的多人多任务环境,如果你首次接触Linux的话,那么在Linux下面这么多的目录和文件,到底每个目录和文件代表什么意义呢?下面我就来就此做个总结。
Linux账号和权限
一.管理用户账号和组账号
1.概述
①用户账号
- 超级用户
- 普通用户
- 程序用户
②组账号 - 基本组(私有组)
- 附加组(公共组)
③UID和GID - UID(用户标识符)
- GID(组标识符)
2.用户账号文件/etc/passwd
功能
:保存用户名称、宿主目录、登录Shell等基本信息
- 文件位置: /etc/passwd
- 每一行对应一个用户的账号记录👇
例:
[root@localhost ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
第二行: root用户账号
x密码占位符
0用户账号ID
0组账号ID
root用户说明
/root宿主目录
/bin/bash登录shell
3.用户账号文件/etc/shadow
功能
:保存用户的密码、账号有效期等信息
- 文件位置: /etc/shadow
- 每一行对应一个用户的密码记录👇
例:
[root@localhost ~]# head -2 /etc/shadow
root:$6$OuUbuwimLtddNnJx$H2ZqO4izXjefcWNo6gFYjW/60AXG6qqgJcCSDRXU2ra/SB0IkjtNMJkawW5Ha89ogVFVMbZomjJ74pmA3fqTC/:14374:0:99999:7:::
bin:*:17110:0:99999:7:::
第二行:一字段root用户账号
二字段$6$OuUbuwimLtddNnJx$H2ZqO4izXjefcWNo6gFYjW/60AXG6qqgJcCSDRXU2ra/SB0IkjtNMJkawW5Ha89ogVFVMbZomjJ74pmA3fqTC密文密码
三字段:14374:上次修改的时间(从Linux诞生时间点开始计算)
四字段:0:密码的最短有效天数(也就是定义多少天之后可以再次修改密码)
五字段:99999:密码最长有效天数(也就是密码可以存在多少天)
六字段:7:提前多少天警告用户密码过期时间
七字段密码过期后多少天内禁用此用户
八字段账号时间(空的代表账号永久可用)
九字段保留字段(没有特殊用途)
扩展 :*!!:
表示此用户不能登录到系统
这里如果是空的::
表示用户无需密码登录
4.添加用户账号useradd
常用选项:
- -u:指定用户的UID号,要求该UID号码未被其他用户使用。
-d:指定用户的宿主目录位置(当与-M一起使用时,不生效)
-e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
-g:指定用户的基本组名(或使用GID号)
-G:指定用户的附加组名(或使用GID号)
- -M:不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录。
-s:指定用户的登录Shell (-s /sbin/nologin禁止用户登录)
附加1:
/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs
#REQUIRED required
#Directory where mailboxes reside, or name of file, relative to the
#home directory. If you do define both, MAIL_DIR takes precedence.
#QMAIL_DIR is for Qmail
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
#MAIL_FILE .mail
#Password aging controls:
#PASS_MAX_DAYS Maximum number of days a password may be used.
#PASS_MIN_DAYS Minimum number of days allowed between password changes.
#PASS_MIN_LEN Minimum acceptable password length.
#PASS_WARN_AGE Number of days warning given before a password expires.
PASS_MAX_DAYS 99999
#密码最大有效期
PASS_MIN_DAYS 0
#两次修改密码的最小间隔时间
PASS_MIN_LEN 5
#密码最小长度,对于root无效
PASS_WARN_AGE 7
#密码过期前多少天开始提示
#Min/max values for automatic uid selection in useradd
#创建用户时不指定UID的话自动UID的范围
UID_MIN 500
#用户ID的最小值
UID_MAX 60000
#用户ID的最大值
#Min/max values for automatic gid selection in groupadd
#自动组ID的范围
GID_MIN 500
#组ID的最小值
GID_MAX 60000
#组ID的最大值
#If defined, this command is run when removing a user.
#It should remove any at/cron/print jobs etc. owned by
#the user to be removed (passed as the first argument).
#USERDEL_CMD /usr/sbin/userdel_local
#当删除用户的时候执行的脚本
#If useradd should create home directories for users by default
#On RH systems, we do. This option is overridden with the -m flag on
#useradd command line.
CREATE_HOME yes
#使用useradd的时候是够创建用户目录
#The permission mask is initialized to this value. If not specified,
#the permission mask will be initialized to 022.
UMASK 077
#This enables userdel to remove user groups if no members exist.
USERGROUPS_ENAB yes
#用MD5加密密码
附加2:
chage命令:用来修改帐号和密码的有效期限,针对目前系统已经存在的用户
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。chage -M 60 root
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
例:chage -E 2019-04-29 test //其中,test为用户,用户将在2019年4月29日失效(不可登录)
chage -d 2019-06-30 test //设置test用户最后一次修改密码的日期为2019年6月30日
chage -d 0 test //则代表该test用户需立即修改密码
date -d “+45 days” -u //如果不知道时间可以用date查看
-u:UTC时间
[root@localhost ~]# chage -l root
最近一次密码修改时间 :从不
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
总结:
第三个字段为:密码最后一次修改的时间 (chage -d)
第四个字段为:密码最小修改间隔时间 (chage -m)
第五个字段为:密码的有效期 (chage -M)
第六个字段为:密码需要变更前的警告天数 (chage -W)
第七个字段为:密码过期后的宽限天数 (chage -I)
第八个字段为:账号失效时间 (chage -E)
5.设置/更改用户口令passwd
常用选项:
- -d 清空指定目录密码
- -l(passwd -l 用户名)
锁定
用户账号 (即登录不了账号) - -S 查看用户的状态(有无被锁定)
- -u
解锁
用户账号
6.修改用户账号的属性usermod
常用选项:
-l 更改用户的登录名称(Login Name)
-L 锁定用户账号
-U 解锁用户账号
-u、-d、-e、-g、-G、-s与useradd命令中的含义相同
7.删除用户账号userdel
- userdel -r 表示连用户的宿主目录一并删除
[root@localhost-#useradd stu01
[root@localhost-#Is -d /home/stu01/
drwx-----2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost-#userdel-r stu01
[root@localhost-#Is-ld /home/stu01/
Is: /home/stu01/:没有那个文件或目录
8.用户账号的初始配置文件
文件来源
- 新建用户账号时,从
/etc/skel
目录中复制而来
主要的用户配置文件
~/.bash_profile
(文件中命令,启动文件)~/.bashrc
(文件中命令,启动文件)~/.bash_logout
(每次用户退出exit时执行这个文件)
9.组账号文件
与用户账号文件相类似
- /etc/group:保存组账号基本信息
- /etc/gshadow:保存组账号的密码信息
①.添加组账号groupadd
命令:groupadd【-g GID号】 组账号名
②.添加/删除组成员gpasswd
gpasswd:设置组账号密码(极少用)、添加/删除组成员
命令:gpasswd 【选项】… 组账号名
常用选项:
-a:向组内添加一个用户
groupadd -g 1200 market
useradd mike
gpasswd -a mike market 将mike加入到market组中
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分开
③.删除组账号groupdel
命令:groupdel 组账号名
二.管理目录和文件的属性
1.查询账号信息
- group 用户名 查询用户所属的组
- id 用户名 查询用户身份标识
- finger 用户名 查询用户账号的详细信息
- w、who、users 查询已登录到主机的用户信息
2.文件/目录的权限和归属
■访问权限
- 读取r:允许查看文件内容、显示目录列表
- 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行x:允许运行程序、切换目录
■归属(所有权) - 属主:拥有该文件或目录的用户帐号
- 属组:拥有该文件或目录的组帐号
3.设置文件/目录的权限chmod
命令:chmod 【ugoa
】 【+ - =
】【rwx
】文件或目录
u、g、o、a分别表示属主、属组、其他用户、所有用户
+、-、=分别表示增加、去除、设置权限
r. w, x分别表示读、写、运行权限
或
chmod nnn 文件或目录
nnn 三位八进制数
常用选项:
-R:递归修改指定目录下所有子项的权限
4.设置文件/目录的归属chown
■命令:
chown 属主 文件或目录
chown :属组 文件或目录
chown属主:属组 文件或目录
■常用选项:
-R:递归修改指定目录下所有文件、子目录的归属
5.权限掩码umask
■umask作用
- 控制新建的文件或者目录的权限
- 默认权限
去除umask的权限
为新建的文件或者目录的权限
■umask设置: umask 022 =chmod 755
■umask查看: umask
■示例 - 将umask设为000, 新建目录或者文件,查看权限
- 将umask设为022,新建目录或者文件,再查看权限
总结
- Linux操作系统资源可以被不同用户使用,每个用户对自己的资源有特定的权限,互不影响。
- 我们在使用命令的时候,其实有很多地方是相通的,比如查找命令ls 的选项-R 和设置权限命令 chmod 的选项-R ,都是表示以递归的方式去执行某种操作。所以说,在Linux系统中,没有绝对的方法,解决一个问题是有很多种方案的。
- 希望能给正在学习Linux的朋友带来帮助