linux账户、组、文件权限

账户与群组

每个系统用户都至少有两个ID:使用者ID(User ID,简称UID)、群组ID(Group ID,简称GID)。

显示文件属性时,系统会依据UID从/etc/passwd中找出账户名,根据GID从/etc/group中找出组名,然后再把账户名和组名显示出来。

账号文件/etc/passwd组成:

每行表示一个用户,每个字段用:分隔,共有7个字段:账户名称:密码:UID:GID:用户信息说明:家目录:登录shell

UID为0表示是系统管理员;1 - 499是保留给系统账号的;500 - 65535是可登入账号的,给一般使用者使用。

系统账号主要用于运行服务,一般不会建立家目录。

密码文件/etc/shadow组成:

实际保存用户的密码,以:分隔,有9个字段:
账户名称:密码:最近更改密码的日期:密码不可被更改的天数:密码需要重新变更的天数:密码需要变更期限前的警告天数:密码过期后的账号宽限时间:账号失效日期:保留

说明:

  • 最近更改密码的日期:记录了密码上次被修改的日期,日期是以1970年1月1日作为1而累加的日期,每过一天加1。
  • 密码不可被更改的天数:(与第3个字段相比)记录了这个账号的密码在上次被更改后需要经过几天才可以再被更改。如果是0表示密码随时可以更改。
  • 密码需要重新变更的天数:(与第3个字段相比)指定上次更改密码之后,在多少天内需要再次更改密码才行。
  • 密码需要变更期限前的警告天数:当账号的密码有效期限快要到的时候(第5个字段),系统会依据这个字段的设定,发出“警告”言论给这个账号。
  • 密码过期后的账号宽限时间:(与第5个字段相比),密码的有效日期为更新日期(第3个字段) + 重新变更日期(第5个字段),过了这个期限后用户依旧没有更新密码,那该密码就算过期。密码过期后,账户登入系统时,系统会强制要求重新设定密码才能登入继续使用。
  • 账号失效日期:用1970年以来的总天数设定。表示这个账号在此字段规定的日期后将无法再使用,不管密码是否过期。

root密码忘记后,可以用LiveCD挂载根目录修改/etc/shadow,将root的密码字段清空,再重新启动后root将不用密码即可登入。

群组文件/etc/group组成:

每行代表一个群组,用冒号:分隔:组名:群组密码:GID:群组支持的账号名称

群组支持的账号名称用逗号分隔多个账号。

群组分为有效群组(effective group)与初始群组(initial group)。
/etc/passwd里的第4栏GID就是初始群组,当用户登入系统,立刻就拥有这个群组相关的权限。
初始群组不需要在/etc/group的第4个字段写入账号,有效群组才需要。

有效群组的作用是在新建文件时,新文件所属的群组就是用户当前的有效群组。

账户与群组管理命令

groups

查看用户所属的群组,输出的第一个为有效群组。

newgrp

newgrp groupName:有效群组切换,只能在自己所属的群组里切换。

useradd

添加用户。

选项:

  • -u uid:直接指定uid给这个账号。
  • -g initGroup:直接指定初始群组。
  • -G groups:用户加入的其他群组(有效群组)。
  • -d homePath:指定家目录,必须是绝对路径。
  • -s:指定登录shell,默认是/bin/bash
  • -e YYYY-MM-DD:指定账号的失效日期。
  • -f:shadow的第7个字段,指定密码是否会失效。0为立即失效,-1为永不失效(密码只会过期于登入时强制重新设定)。
  • -r:建立系统账号。
  • -M
  • -m

usermod

修改用户账户 。

选项:

  • -a, –append :将用户添加到额外的组(一次可以多个),必须和-G选项一起使用。
  • -d, –home :用户新的家目录。与-m选项一起使用时,当前家目录的内容将被移到新的家目录。
  • -e, –expiredate :账号过期时间。 YYYY-MM-DD
  • -g, –gid :用户新的初始化登录组,组必须存在。
  • -G, –groups :用户额外的组列表。
  • -l, –login :用户新的登录名。
  • -L, –lock :锁定用户的密码。不能喝 -p, -U选项一起使用。
  • -U, –unlock :解锁用户密码。不能喝-p, -L选项一起使用。
  • -m, –move-home :移动家目录到新的位置。
  • -p, –password :指定用户的密码。不推荐,应该通过passwd user命令来设置。
  • -u, –uid :指定用户新的ID。

举例

  • 给用户添加额外的组: usermod -a -G appgroup maintainer
  • 修改用户的登录shell: usermod -s /bin/bash maintainer

su

switch user,用户切换命令。带上-表示切换到指定用户的系统环境,不带用户名默认是切换到root用户。

passwd

设定密码,如果要设定其他用户的密码,需要指定账户:passwd username

选项

  • -l:lock,会在/etc/shadow第二栏最前面加上!,使密码失效。
  • -u:与-l相对,unlock。
  • -S:列出密码相关参数,亦即shadow文件的大部分信息。
  • -n:后接天数,shadow的第4个字段,多久不可修改密码天数。
  • -x:后接天数,shadow的第5个字段,多久必须修改密码天数。
  • -w:后接天数,shadow的第6个字段,密码过期前的警告天数。
  • -i:后接日期,shadow的第7个字段,密码失效日期。

chage

显示账户的详细的密码参数。使用格式:chage [-ldEimMW] username

选项

  • -l:列出该账户的详细密码参数。
  • -d:后面接日期,修改shadow第3字段(最近一次更改密码的日期),格式:YYYY-MM-DD
  • -E:后面接日期,修改shadow第8个字段(账户失效日),格式:YYYY-MM-DD
  • -I:后面接天数,修改shadow第7个字段(密码失效日期)。
  • -m:后面接天数,修改shadow第4个字段(密码最短保留天数)。
  • -M:后面接天数,修改shadow第5个字段(密码多久需要进行变更)。
  • -W:后面接天数,修改shadow第6个字段(密码过期前警告日期)。

举例:使用者第一次登入时,强制一定要更改密码后才能使用系统资源:chage -d 0 username

userdel

删除用户的账户及相关数据。使用格式:userdel [-r] username

-r选项表示连同家目录一起删除。

finger

指纹,查看用户信息。

选项

  • -s:仅列出用户的账号、全名、终端机代号与登入时间等等。
  • -m:列出与后接账号相同者,而不是利用部分匹配(包括全名部分)。

chsh

change shell的简写。

-s shell:设定新的shell。

id

查看自己或某人的相关UID、GID等等信息。

groupadd

创建群组。

常用选项

  • -f, --force:如果群组已存在则成功退出。
  • -g, --gid GID:直接指定GID。
  • -r, --system:创建系统群组。
  • -o, --non-unique:运行创建GID重复的群组。

groupdel

删除群组。

文件权限

权限类型有3种:读(r)、写(w)、执行(w)。

在文件的权限设置上,从用户角度上可以分别给:属主、群组、其他人 设置不同的权限。

权限对文件的重要性

  • r:可读取文件的实际内容。
  • w:可编辑、新增或者修改文件的内容(不含删除文件)。
  • x:文件具有可被系统执行的权限。

权限对目录的重要性

  • r:表示具有读取目录结构列表的权限。(可用ls命令)。
  • w:表示可以在这个目录下:建立新的文件与目录、删除已经存在的文件或目录(不论文件的权限为何)、对文件或目录重命名、移动目录内的文件与目录的位置。
  • x:表示用户能否进入该目录(能否用cd到此目录)。

符号类型权限:

u表示属主,g表示群组,o表示其他人,a表示所有人。+表示加入指定权限,-除去指定权限,=表示设置为指定权限。

举例:chmod u=rwx,go=rx filename

数字类型权限:

rwx用十进制数字表示分别为 4、2、1,权限可以相加,如7=4+2+1,7表示有读写执行的权限。

举例:chmod 755 filename。其中的755分别表示赋予 属主、群组、其他人的权限,分别是 rwxr-xr-x

chgrp

改变文件所属的群组,命令格式:chgrp [-R] group filename

-R选项在修改目录的群组时使用,表示递归修改,即目录的文件、目录所属的组也被修改为指定的组。

chown

改变文件所属的属主,命令格式:chown [-R] user filename

-R选项在修改目录的属主时使用,表示递归修改,即目录的文件、目录所属的用户也被修改为指定的用户。

chmod

改变文件的权限。-R选项表示递归修改目录下的所有内容的权限。

举例: chmod u=rwx,go=rx filenamechmod -R 755 dirname


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据