用户账户管理和磁盘配额
一、passwd和shadow配置文件
1. /etc/passwd:用户账户配置文件,用来存放用户的基本信息;
【passwd配置文件详解】cat /etc/passwd
rjxy | : | x | : | 508 | : | 508 | : |
| : | /home/rjxy | : | /bin/bash |
用户名 |
| 密码,真实密码存放在/etc/shadow文件中 |
| 用户标识号UID |
| 组群标识号GID |
| 用户名全称,可以不设置 |
| 用户宿主目录 |
| 用户的shell类型,有bash、sh和nologin三种,默认为bash |
【shell】是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
【注意】shell为/sbin/nologin表示该用户在本地没有登录权限,如果用su切换用户,会提示无法登录。一般ftp用户是这种shell,因为ftp用户一般不需要在本地登录。
2. /etc/shadow:影子文件,存放用户的真实密码(加密)和有效期限等信息;
【shadow配置文件详解】cat /etc/shadow
rjxy | : | $jlsflsdfsdjfkjfdsjfd | : | 15636 | : | 0 | : | 99999 | : | 7 | : |
| : |
| : |
用户名 |
| 加密后的真实密码。 【注意】如果密码前面有“!”或者“!!”表示该用户的密码被锁定,不能登录 |
| 上次修改密码的时间,从1970年1月1日开始算的天数 |
| 两次修改密码间隔最少的天数,若为0表示禁用此功能 |
| 两次修改密码间隔最多的天数,若为0表示禁用此功能 |
| 提前多少天警告用户密码将过期 |
| 密码过期之后多少天禁用此用户 |
| 用户过期的日期,依然是从1970年1月1日开始算的天数 |
|
二、字符界面下用户账户的设置
1. 创建用户账户:useradd,创建新账户,然后为新用户分配用户号、用户群组、宿主目录和登录shell等
语法:useradd 【选项】 用户名
-u:指定用户的UID,一般情况下,用户的UID 是唯一值,如果加上“-o”选项,则可以给不同用户设置相同的UID。UID 的数值只能是0 或者正整数。
-d:指定账户登录时所使用的宿主目录
-s:设置用户登录后使用的shell 类型
-g:设置用户的属组,即用户所属的主组群。设置时可以用组群的名称或者组群的GID。属组的组群名和GID 必须是已经存在的名称和GID
u 新用户账号是被锁定的,无法使用,必须使用passwd设置密码后才能用。
① useradd test #创建用户“test”
【查看已经创建的用户】cat /etc/passwd |grep test #可以看到用户在/etc/passwd文件中已经添加了test用户的信息,此时test用户不可登录,因为还没有设置密码。
a) cat /etc/shadow|grep test #shadow为影子文件,存放用户的真实密码
b) passwd test #设置密码
cat /etc/shadow|grep test #对比a)和b)
② useradd –u 510 test2 #创建用户test2,并设其UID为510
cat /etc/passwd|grep test2
③ useradd –d /home/abc xyz #创建用户xyz,并设其宿主目录为/home/abc
cat /etc/passwd|grep xyz
④ useradd –g rjxy abc #把用户abc所属的组群更改为rjxy
cat /etc/passwd
⑤ id abc #查看用户的ID信息
【显示结果】uid=512(abc) gid=500(rjxy) 组=500(rjxy)
uid:用户ID是512;
gid:用户组群ID是500,即rjxy组;
组:用户所属的所有组,即用户不一定只属于一个组,如果有多个组,会在这里显示;
⑥ useradd -g rjxy -u 550 tq #创建用户tq,其uid为550,属于rjxy组群
cat /etc/passwd|grep tq
★ useradd –o –u 0 test3 #创建用户test3,并设其uid为0
【注意】uid是识别用户身份的唯一标识,设置相同的uid,相当于多个账户共用一个uid,但是身份仅仅是第一个使用该uid的那个账户的身份,拥有相同uid的账户对相互的文件具有相同的权限。uid=0表示该用户和root的uid一致,即该用户的身份就是root(只是名字不同,但是身份相同),可用su test3切换用户,结果为root登录。
如果要为多个用户设置相同的UID,需要用“-o”参数
2. 修改用户账户:usermod
语法:useradd 【选项】 用户名
-l:更改用户名;
-s:修改用户登录后所使用的shell类型;
-u:修改用户的UID值;
-c:修改用户的全称;
-d:修改用户登录时的宿主目录,如果加上“-m”选项,用户的旧目录会移动到新目录,如果旧目录不存在,则自动创建新目录;
-e:修改用户的有效期;
-L:锁定用户;
-U:解锁用户。
① usermod -d /home/aaa test2 #把用户test2的宿主目录移至/home/aaa,若目录/home/aaa不存在,需先用mkdir建立,并把启动文件复制进去,否则在登录时会出问题;
② usermod -d /home/bbb –m test2
【注意】用ls /home查看①和②运行的结果,若是①,原test2目录还保存,且/home/aaa目录不会自动建立;若是②,则原/home/aaa目录自动改为/home/bbb
③ useradd test6 #创建用户test6
su test6 #可切换至test6用户
cat /etc/passwd
usermod -l taxi test6 #将test6的名字改为taxi
su test6 #无法切换到test6用户,因为用户名已经改为taxi,只能su taxi
cat /etc/passwd
④ usermod –g test taxi #修改taxi群组为test【test组群必须事先创建】
⑤ usermod –L taxi #锁定账户
usermod –U taxi #解锁
此外,passwd –l taxi和passwd –u taxi也可用于锁定和解锁
passwd –S taxi #查看用户状态
【注意】密码锁定后,不能登录该用户,提示密码错误,但是可以从root账户直接切换到该用户(不需要输入密码)
⑥ usermod –e 01/01/1970 taxi #设置有效期限,该时间已经过期,所以用户taxi无法登录
cat /etc/shadow |grep taxi
su taxi #注意,不要从root中切换用户,可切换到rjxy用户,再切换到taxi用户,即可出现提示,该账户已失效
3. 删除或禁止账户:userdel
语法:useradd 【-r】用户名
-r:在删除用户的同时,把用户的宿主目录以及本地邮件存储目录也一块删除
① userdel taxi #删除账户,但是保留宿主目录
ls /home
userdel –r tq #删除账户,同时删除宿主目录
ls /home
三、一些配置文件
1. /etc/skel目录
存放用户启动文件,由root用户管理,创建用户后自动复制目录下的启动文件到新用户宿主目录下。启动文件都是隐藏文件,需要加“–a ”参数查看。
① ls –la /etc/skel
② ls –la /home/rjxy
【注意】提示“.gvfs文件无法访问,权限不够”(.gvfs文件是GNOME桌面系统的虚拟文件系统,用户可以通过gvfs访问FTP、SMB等远程数据)
【解决方法】umount .gvfs
2. /etc/login.defs #可查看UID和GID的允许范围
① cat /etc/login.defs |grep UID
② cat /etc/login.defs |grep GID
3. /etc/default/useradd #用useradd命令创建用户时的规则文件
四、group和gshadow配置文件
1. /etc/group:用户组群配置文件
【注意】一个用户可以属于一个或多个组群,同一个组群内的用户之间有相似特性。
★ 安全性
a 若某用户属于root组,则其可以浏览root用户的宿主目录(ls –ld /root可以看到,/root目录对于root群组可读);
b 若root用户把某个文件权限对组群放开,则组群所有用户都可修改此文件;
【注意】若某个用户文件非常重要,应让其拥有独立的组群,或把用户的文件权限设为完全私有!
【group配置文件详解】cat /etc/group
root: | x: | 0: | root,bin,daemon |
用户组群名称 | 加密后的密码,真实密码放在/etc/gshadow中 | GID 普通群组GID从500开始 | 组群成员,不包括以这个组作为主组的成员 |
① 查看GID范围:cat/etc/login.defs|grep GID #也可以查UID的范围
② cat /etc/group|grep rjxy #组群成员没有内容,因为不显示以这个组作为主组的成员。
【gshadow配置文件详解】cat /etc/gshadow
root: |
| : |
| : | root |
组群名称 | 密码 |
| 组群的管理者,若为root则省略 |
| 组群成员列表 |
五、字符界面下组群账户的设置
1. 创建组群:groupadd
语法:groupadd 【选项】组群名
-g:指定组群的GID,一般情况下,用户的GID 是唯一值,如果加上“-o”选项,则可以给不同用户设置相同的GID。GID 的数值只能是0 或者正整数。
-r:创建系统组群(GID<500)。
① groupadd abc
cat /etc/group|grep abc
② groupadd -g 800 bcd #创建组群bcd,GID=800
cat /etc/group|grep bcd
③ groupadd –r qqq #创建系统组群qqq(GID < 500)
cat /etc/group|grep qqq
2. 更改组群属性
语法:groupmod 【选项】组群名
-g:设置组群的GID;
-n:设置新组群名称;
① groupmod –g 900 bcd #改GID
② groupmod –n xyz bcd #把组群bcd改名为xyz
cat /etc/group
③ groupmod –g 900 –o cde #设置重复GID
3. 删除组群
语法:groupdel 组群名
① groupdel xyz #若组群中包含用户,需先删除用户
六、创建用户和组群的特殊方法:修改用户和组群配置文件来添加用户和组群
1. 修改配置文件
1) 修改/etc/passwd
① 添加用户记录:vi /etc/passwd
test0:x:508:508 | : |
| : | /home/test0:/bin/bash |
|
| 用户全名 |
|
|
2) 执行pwconv,让/etc/passwd和/etc/shadow同步,然后查看是否同步
① cat /etc/shadow
pwconv
cat /etc/shadow #test0的信息同步到了/etc/shadow中
3) 修改/etc/group,添加私有组群
① vi /etc/group
添加内容“test0:x:508:”
② grpconv同步/etc/group和/etc/gshadow文件
grpconv
cat /etc/gshadow #组群test0的信息同步到了/etc/gshadow中
2. 修改宿主目录
1) 创建用户主目录,并把启动文件复制过去
① mkdir /home/test0
② cp -r /etc/skel /home/test0 ×
ls -a /home/test0
③ cp -r /etc/skel/. /home/test0 √
ls -a /home/test0
2) 改变新增用户宿主目录的属主和权限
① ls -ld /home/test0 #查看/home/test0目录的属主和权限(属于root)
② chown -R test0.test0 /home/test0 #把/home/test0的属主和属组都改为test0(第一个test0为属主,第二个test0为属组),参数R为递归,即对目录和目录下所有的文件和子目录都做修改
③ chmod 700 /home/test0 #改变宿主目录的读写权限,仅test0具有所有权限
④ ls -ld /home/test0
3. 设置新用户的密码
passwd test0
4. 测试用户是否添加成功
① su test0
【注意】此时若命令提示符为“bash -4.1”,表示用户宿主目录有问题
此时ls -a /home/test0查看,如果是如下内容,表示第4)步复制启动文件时出错。
应该为:cp -r /etc/skel/. /home/test0
七、用户和组群维护命令
1. passwd
① passwd #设置当前用户密码
② passwd test0 #设置指定用户密码
③ passwd -l test0 #锁定test0密码,其无法登录
④ passwd -u test0 #解锁test0
⑤ cat /etc/shadow |grep test0
passwd -d test0 #删除密码
cat /etc/shadow |grep test0
2. su:切换用户
3. pwck:检验用户配置文件/etc/passwd和/etc/shadow内容是否合法完整
① pwck
② rm -rf /home/test0
pwck
八、账户信息显示
1. finger
① finger test0 #显示test0的信息
② finger #显示所有登录用户的信息
可在tty2中登录root用户,再回到图形界面用finger查看,然后在tty2中退出root,再用finger查看,比较结果
2. id:显示用户的UID、GID和所属组群
3. w:详细查询当前已登录的用户
4. who:显示已登录用户的简单信息
九、图形界面下用户和组群的配置
系统→管理→用户和组群
十、配置磁盘配额:为新用户“ttt”配置磁盘配额
【磁盘配额】可对指定用户配置磁盘块(Blocks)或者内节点(Inode),以限制用户对磁盘空间使用的大小,前提是系统中必须安装quota软件包,可通过rpm –qa|grep quota查看;
【Inode】内节点,每个文件有1个,保存所有者身份和权限,以及时间信息(不保存文件名,文件名存放在目录项dentry里),可通过“ls -i 文件名”来查看
1. 创建文件系统/dev/sda5
① fdisk /dev/sda #创建扩展分区和逻辑分区
n→e→4;n→l;w
② 重启Redhat
③ mkfs.ext3 /dev/sda5
2. 启用磁盘配额功能:修改/etc/fstab文件,添加要配置的文件系统,并添加上usrquota(用户配额)和grpquota(组群配额)选项;
【例】把/dev/sda5挂载到/mnt/aa,并开启/dev/sda6的用户配额和组群配额
1) vi /etc/fstab,添加如下代码:
/dev/sda5 | /mnt/aa | ext3 | defaults,usrquota,grpquota | 0 | 0 |
【注意】可用mount挂载,但重启后失效,所以需要直接修改/etc/fstab配置文件。
2) mkdir /mnt/aa
3) init 6 #重启Redhat,重新挂载文件系统
4) mount –s #重启Redhat之后,查看/dev/sda5分区的挂载情况
5) quotacheck:重新挂载文件系统后,系统就能够使用磁盘配额了,接着需要用quotacheck 命令检查启用了配额的文件系统,并为文件系统创建配额文件aquota.user和quota.group,最后建立当前磁盘用量表。
① quotacheck –a #在启用了磁盘配额功能的分区生成用户配额文件
【注意】如果运行命令后,可能提示没有权限,这是由于selinux防火墙的问题,需要先把selinux防火墙关闭
【临时关闭selinux防火墙】 setenforce 0
② quotacheck –a #关闭防火墙后再次生成用户配额文件
③ ls -a /mnt/aa #检查用户配额文件是否生成
④ quotacheck–cg /mnt/aa #创建组群配额文件
⑤ ls –a/mnt/aa #检查组群配额文件是否生成
⑥ quotacheck –av #文件系统创建后,生成每个启用了配额的文件系统的当前磁盘用量表
6) 创建用户“ttt”,并未该用户配置配额
① 创建用户并设置密码
useradd ttt
passwd ttt
② 为ttt设置配额
edquota ttt
【设置为】/dev/sda6 0 2000 5000 0 3 5,即软限制为2M,硬限制为5M;创建文件的个数软限制为3个,硬限制为5个
7) 给“ttt”用户设定权限,可以对/media/aa目录进行写操作
① ls -ld /mnt/aa #查看目录/mnt/aa的权限
② chmod 777 /mnt/aa
③ ls -ld /mnt/aa
8) 开启磁盘配额功能,即让aquota.user和aquota.qroup两个文件的限制生效
quotaon -a或者quotaon /mnt/aa
3. 测试磁盘配额是否成功:即测试“ttt”用户在/mnt/aa目录下是否最多只能创建5个文件或目录。
1) su ttt #切换到用户“ttt”
2) cd /mnt/aa
touch file1
touch file2
touch file3
touch file4 #警告,使用量已经超过软限额
touch file5
touch file6 #提示出错,超出磁盘限额,此时mkdir file6同样提示超出磁盘限额,即限额的“5”是文件和目录的总和!
3) quota ttt #查看用户ttt的磁盘配额情况