用户和组账号概述
Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户
代码语言:javascript复制超级用户,即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统
普通用户帐号一般只在用户自己的宿主目录中有完全权限
程序用户:用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等
组帐号: 基本组(私有组) 一个用户一个 只是标识 附加组(公共组)一个用户可以有一个或多个附加组 可以设置权限 UID和GID: UID(User Identity,用户标识号) 0—root;1-200:“系统用户”,静态分配给红帽的系统程序;
201-999:当装软件时,才会动态分配;1000-60000:普通用户分配的范围
GID(Group Identify,组标识号)
用户账号文件——password
用于保存用户的帐号基本信息
文件位置:/etc/passwd
每一行对应一个用户的帐号记录
代码语言:javascript复制[root@localhost ~]# tail -2 /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
student:x:500:500:Student User:/home/student:/bin/bash
代码语言:javascript复制字段1:用户帐号的名称
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息
用户账号文件——shadow
用于保存密码字串、密码有效期等信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录
代码语言:javascript复制[root@localhost ~]# tail -2 /etc/shadow
sabayon:!!:15495:0:99999:7:::
student:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:15495:0:99999:7:::
代码语言:javascript复制字段1:用户帐号的名称
字段2:加密的密码字串信息
字段3:上次修改密码的时间(距离1970.1.1)
字段4:密码的最短有效天数,默认值为0
字段5:密码的最长有效天数,默认值为99999
字段6:提前多少天警告用户口令将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
组账号文件—group、gshadow
与用户账号文件类似
/etc/group:保存组帐号基本信息 /etc/gshadow:保存组帐号的密码信息
代码语言:javascript复制[root@localhost ~]# grep "adm" /etc/group
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
添加用户账号
useradd命令 格式:useradd [选项]... 用户名 常用命令选项 -u:指定 UID 标记号 -g:指定用户的基本组名(或UID号) -G:指定用户的附加组名(或GID号) -s:指定用户的登录Shell
代码语言:javascript复制不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号
演示添加用户的操作:
—创建名为st02的用户帐号,并将其UID号指定为504
[root@localhost ~]# useradd -u 504 st02
[root@localhost ~]# tail -1 /etc/passwd
st02:x:504:504::/home/st02:/bin/bash
——创建一个考试测试用的帐号exam01,指定属于users组 ,该帐号于2009-07-30失效
[root@localhost ~]# useradd -g users -e 2009-07-30 exam01
展示/etc/passwd、/etc/shadow文件中的变化
说明:使用adduser命令也可以添加用户帐号,在RHEL5系统中adduser命令实际上是useradd命令的符号链接
useradd -s /sbin/nologin strlt
设置/更改用户口令
passwd命令 格式:passwd [选项]... 用户名 常用命令选项 -d:清空用户的密码,使之无需密码即可登录 -l:锁定用户帐号 -S:查看用户帐号的状态(是否被锁定) -u:解锁用户帐号
修改用户账号的属性
usermod命令 格式:usermod [选项]... 用户名 常用命令选项 -L:锁定用户账户 -U:解锁用户账户 以下选项与useradd命令中的含义相同 -u、-g、-G、-s
删除用户账号
userdel命令 格式:userdel [-r] 用户名 添加 -r 选项时,表示连用户的宿主目录一并删除
代码语言:javascript复制[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: 没有那个文件或目录
改变用户密码期限
chage命令 格式:chage [选项]... 用户帐号名 常用命令选项 -M:密码的最长有效天数 -m:密码的最短有效天数 -W:密码的警告天数 -I:密码的有效天数 -E:账号的过期时间
代码语言:javascript复制查看密码的有效天数:chage -l root
chage -M 60 root 密码的最长有效天数
chage -m 60 root 密码的最短有效天数
组管理命令
groupadd命令 格式:groupadd [-g GID] 组帐号名 组成员管理: 格式:gpasswd [选项]... 组帐号名 删除组帐号: 格式:groupdel 组帐号名
用户和组账号查询
id命令 用途:查询用户身份标识 格式:id [用户名] groups命令 用途:查询用户所属的组 格式:groups [用户名] users、w 、who命令 用途:查询已登录到主机的用户信息
代码语言:javascript复制主要有哪两个用户帐号文件,各有什么作用?
如何锁定、解锁用户帐号?
在添加用户帐号时,如何设置其失效时间?
如何设置一个组的多个用户成员?
部分答案提示:
【1】/etc/passwd、/etc/shadow
【2】锁定帐号:usermod -L 用户名、passwd -l 用户名 ; 解锁帐号: usermod -U 用户名、passwd -u 用户名
【3】useradd -e YYYY-mm-dd 用户名 或者 usermod -e YYYY-mm-dd 用户名
【4】~/.bash_profile、~/.bashrc、~/.bash_logout
【5】gpasswd -M 用户1,用户2,用户3 组名
实验案例
需求描述
代码语言:javascript复制现雇用一组顾问从事某一项目。为每位顾问创建用户帐户,并将这些帐户掭加到作为补充组,名为consultants、组id为40000的组中。
这些帐户应在91天后终止时过期。
以下是顾问姓名及其相应用户名的列表,帐户的初始密码均应为default):
sspade, bboop, dtracy
代码语言:javascript复制先建manager组,创建两个用户natasha,harry附属组为manager,创建第三个用户strlt不允许login 。
建一个用户susa,指定UID号为4000
帐户的初始密码均应为default
文件/目录的权限和归属
访问权限 读取:允许查看文件内容、显示目录列表 写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录 可执行:允许运行程序、切换目录 归属(所有权) 属主:拥有该文件或目录的用户帐号 属组:拥有该文件或目录的组帐号
查看文件/目录的权限和归属
代码语言:javascript复制“-rw-r—r--”部分的第一个字符表示文件类型,可以是d(目录)、b(块设备文件)、c(字符设备文件),减号“-”(普通文件)、字母“l”(链接文件)等
其余部分指定了文件的访问权限
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了四种不同的权限字符: r 可读 ;w 可写 ;x 可执行 ;- 无权限
r、w、x、- 权限字符还可分别表示为8进制数字4、2、1、0
设置文件/目录的权限
chmod命令
格式1:chomd [ugoa] [ -=] [rwx] 文件或目录
格式2:chmod nnn 文件或目录
常用命令选项
-R:递归修改指定目录下所有文件/子目录的权限
代码语言:javascript复制详细讲解两种设置文件访问权限的格式,并以实例进行演示,例如:
—— 重新设置mymkdir文件的权限,为属主用户添加执行权限,去除其他用户的读取权限
[root@localhost ~]# chmod u x,o-r mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr----- 1 root root 29588 05-12 06:19 mymkdir
—— 重新设置mymkdir文件的访问权限,恢复为“rwxr-xr-x”
[root@localhost ~]# chmod 755 mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr-xr-x 1 root root 29588 05-12 06:19 mymkdir
—— 使用递归的方式将“/usr/src/”目录中所有子目录、文件的权限都设置为“rw-r--r--”
[root@localhost ~]# chmod -R 644 /usr/src/
“nnn”为需要设置的具体权限值,如“755”、“644”等
文件权限设置实例
使用chmod命令设置文件权限 查看文件权限 ls -l 增加文件属主st01的执行权限(x) chmod u x 文件名 去除文件属组class1的写权限(w) chmod g-w 文件名 设置属主权限为读写,属组其他用户的文件权限为读 chmod u=rw,g=r,o=r 文件名
设置文件/目录的归属
chown命令 格式:chown 属主 文件或目录 chown :属组 文件或目录 chown 属主:属组 文件或目录 常用命令选项 -R:递归修改指定目录下所有文件、子目录的归属
设置文件属主和属组
代码语言:javascript复制chown命令用于设置文件的属主和属组
命令格式
chown OWNER[:[GROUP]] FILE...
设置文件afile的属主为用户st01
# chown st01 afile
设置文件afile的属组为用户组class1
# chown :class1 afile
设置文件afile的属主为st03,并设置文件的属组为class2
# chown st03:class2 afile
实验:文件/目录权限设置
代码语言:javascript复制根据以下要求完成对文件/目录权限的设置
1、添加组group,添加用户aa、bb并加入group组
2、新建文件/abc.txt
3、设置用户aa对文件拥有读、写和执行权限
4、设置组group内成员对文件拥有读和写权限
5、设置除属主和属组外其他人对文件没有任何权限
6、新建目录/abc
7、设置用户bb对目录拥有读、写执行权限
8、设置组group内成员对目录拥有读和执行权限
9、设置除属主和属组外其他人对目录没有任何权限
文件ACL权限
ACL是 Access Control List 的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的细部权限设定。
ACL可以针对单一使用者,单一文件或目录来进行r,w,x的权限规范,对于需要特殊权限的使用状况非常有帮助。
ACL 主要可以针对以下方面来控制权限: 使用者 (user):可以针对使用者来设定权限; 组群 (group):针对用户组为对象来设定其权限; 预设属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的预设权限
管理文件系统访问控制列表
查看: $ getfacl filename 修改 : $ setfacl -m u:username:rw filename 命令 选项 u:用户名:权限 目录名称 $ setfacl -m g:groupname:rw filename 命令 选项 u:组账号:权限 目录名称 删除 : $ setfacl -x u:username filename 命令 选项 u:用户名 目录名称
代码语言:javascript复制tune2fs是linux下面重要的文件系统调整工具,其中的几个选项解释如下:
-c:表示文件系统在mount次数达到设定后,需要运行fsck检查文件系统。
-i:文件系统的检查间隔时间。系统在达到时间间隔时,自动检查文件系统。
-l:显示文件系统的很多参数。
-j:转换为ext3文件系统。
-m: Set the percentage of reserved filesystem blocks。 设置保留的空间百分比
-o: Set or clear the indicated default mount options in the filesystem.设置默认加载参数
通常如果使用ext3文件系统的话,使用-c 0关掉mount次数达到后的文件系统检查
tune2fs -m 10 /dev/sda1
tune2fs -o acl,user_xattr /dev/sda1
tune2fs -i 0 -c0 /dev/sda1
显示当前的磁盘状态(dumpe2fs)
[root@tonykorn97 /]# dumpe2fs /dev/sda1
使用附加权限
SET位权限 主要用途: 为可执行(有 x 权限的)文件设置,权限字符为“s” 其他用户执行该文件时,将拥有属主或属组用户的权限 SET位权限类型: SUID:表示对属主用户增加SET位权限 SGID:表示对属组内的用户增加SET位权限 如果SGID是设定在目录上面,则在该目录内所建立的文件或目录的所属组,将会自动成为此目录的所属组。
粘滞位权限(Sticky)
主要用途: 为公共目录(例如,权限为777的)设置,权限字符为“t” 用户不能删除该目录中其他用户的文件 应用示例:/tmp、/var/tmp
代码语言:javascript复制由于系统及服务程序运行的需要, Linux提供了/tmp、/var/tmp等临时目录,允许任意用户、程序写入数据
然而试想一下,若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么后果?
设置粘滞位以后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据
实验
SUID
第一步切换普通用户qq
第二步vim /etc/shadow
第三步查看vim的位置 which vim
第四步:chmod u s /usr/bin/vim
第五步:ls -l /usr/bin/vim
第六步:su - qq
第七步:vim /etc/shadow
SGID
groupadd aa
useradd -G aa bb
mkdir /cc
chown :aa /cc
chmod 777 /cc
su - bb
cd /cc
touch a.txt
su - root
chmod g s /cc
su - bb
cd /cc
touch aa.txt
ls -l
设置SET位、粘滞位权限 使用权限字符 chmod ug±s 可执行文件... chmod o±t 目录名... 使用权限数字: chmod mnnn 可执行文件... m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
代码语言:javascript复制SET位标记字符为“s”,若使用8进制数字形式,则SUID对应为“4”、SGID对应为“2”
在权限模式中可采用“nnnn”的形式时,如“4755”表示设置SUID权限、“6755”表示同时设置SUID、SGID权限
以为 /bin/touch 命令设置SUID权限为例进行演示,普通用户使用该命令创建测试文件,比较新建文件的属主变化
注意:为普通文件(无执行权限的)设置SET位权限从语法上虽然也可行,但没有实际意义(标记字符将变为大写字母“S”)
通过实例操作演示,展示粘滞位的作用,例如:由普通用户1在 /tmp 目录中尝试删除 普通用户2的文件,对比是否设置粘滞位的区别
注意:为普通文件或者用户本没有写入权限的目录设置粘滞位语法上也是可行的,但没有实际意义(标记字符将变为大写字母“T”)
which vim
chmod u s /usr/bin/vim
实验案例:用户和文件权限管理
需求描述 将/etc/fstab 复制到/var/tmp/fstab ,设置harry可以读写,natasha不能做任何操作,其他用户可读,设置manager组为fstab 所属组 设置用户natasha对目录/home/cnrts(创建)有完全控制权限,在目录中创建的文件自动继承组的权限,设置manager组用户对目录有读写执行权行,其他人没有权限,(root除外)
代码语言:javascript复制cp /etc/fstab /var/tmp/fstab
ls -l /var/tmp/fstab (查看一下目录的信息)
chown:manager /var/tmp/fstab