文件属性、权限、用户、用户组

文件目录属性

Linux中的文件或目录,都有一个 所有者owner 和 所属组group;

所有者是指文件的拥有者,所属组是指这个文件属于哪一个用户组(一个用户组下面会有若干个用户);

假设:t0文件的所有者为owner0,t1的所有者为owner1,owner1有可能不能查看t0,owner0也有可能不能查看t1(之所以说可能,是因为owner0和owner1有可能属于同一个用户组,而恰好这个用户组对这两个文件都有查看权限)

需求:使一个文件能同时被owner0和owner1查看时;“所属组”就派上用场了。

先创建一个组owners,让owner0和owner1同属于这个组,然后建立一个文件test2,且其所属组为owners,这样owner0和owner1就都可以访问test2文件。

上图中,一共9列(用空格划分列)

第1列

  第1位:文件的类型,d 表示目录,- 表示普通文件,l 表示链接

  第2~位:每3位为一组,每组按顺序表示:所有者、所属组、其他非本用户组的权限,其中,r读、w写、x执行、-无权限;

  最后一位:“.”,老版本CentOS 5是没有这个点的,这主要是因为新版本的ls命令添加了SELinux或者acl的属性。如果文件或者目录使用了SELinux context的属性,这里会是一个点“.”;如果使用了acl的属性,这里会是一个加号“+”。

第2列

  文件占用的节点(inode),如果是目录,这个数值与该目录下得子目录数量有关

第3列

  文件所有者

第4列

  文件所属组

 第5列

  文件的大小

第6、7、8列

  文件最后修改事件(mtime),按月、日以及具体时间

第9列

  文件名

 

命令chgrp

change group 的缩写,更改 文件或目录 的 所属组

格式:

  chgrp [组名] [文件名]

groupadd newgroup1    添加一个newgroup1用户组
touch test1
ls -l test1
-rw-r--r-- 1 root root 0 12月 30 07:43 test1         新建的文件所属组为root
chgrp newgroup1 test1        修改test1的所属组为 newgroup1
ls -l test1
-rw-r--r-- 1 root newgroup1 0 12月 30 07:43 test1

更改目录本身且目录中的子级目录和文件:加 -R 即可;

 

命令 chown

change owner的简写,更改 文件或目录 的 所有者

格式

  chown [-R] 账号名 文件名或目录

  chown [-R] 账户名:组名 文件名或目录

-R 用于目录,作用是 联级更改;

mkdir dir1
useradd user1    // 创建用户user1
touch dir1/test3   // 在dir1目录下创建test3文件
chown user1 dir1
ls -ld dir1    // dir1目录的所有者已经由root改为user1
drwxr-xr-x 2 user1 root 19 12月 30 07:46 dir1
ls -l dir1    // 但是dir1目录下的test3文件的所有者依旧是root
-rw-r--r-- 1 root root 0 12月 30 07:46 test3
chown -R user1:testgroup dir1      // 把dir1目录和里面的文件和目录的所有人user1所属组testgroup
ls -l dir1
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 test1

 

命令 chmod(重要)

change mode的简写,改变用户对文件/目录的读、写和执行权限

格式为

  chmod [-R] xyz 文件名(这里的xyz表示数字)

-R选项,表示级联更改

为了方便更改文件的权限,Linux使用数字代替rwx,具体规则为:用4表示r,用2表示w,用1表示x,用0表示-。

例如,rwxrwx---用数字表示就是770,其具体算法为:rwx=4+2+1=7,rwx=4+2+1=7,---=0+0+0=0。

在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644。

假设你创建了一个目录,但你不想让其他人看到该目录的内容,则只需将其权限设置成rwxr-----(即740)即可。

 

chmod命令还支持使用rwx的方式来设置权限,即使用u、g和o来分别表示所有者、所属组和其他用户的属性,用a代表all(即全部):

chmod u=rwx,og=rx dir3/test3
ls -l dir3/test3
-rwxr-xr-x 1 user1 testgroup 0 12月 30 07:46 dir3/test3

 

还可以针对u、g、o和a,增加或者减少它们的某个权限(读、写或执行):

chmod u-x dir3/test3
ls -l dir3
-rw-r-xr-x 1 user1 testgroup 0 12月 30 07:46 test3
chmod a-x dir3/test3
ls -l dir3/test3
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3
chmod u+x dir3/test3
ls -l dir3/test3
-rwxr--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3

 

/etc/passwd 文件

上图中head前面的符号|,我们称之为管道符,它的作用是把前面命令的输出结果再输入给后面的命令。

/etc/passwd可以分割成7个字段:

第1个字段

  用户名,用户账号的字符串。

第2个字段

   账号的口令。这里为什么是x呢?早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。

第3个字段

  代表用户标识号,也称为uid。系统就是通过这个数字识别用户身份的。这里的0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0~65 535(但实际上已经可以支持到4 294 967 294)。0是超级用户(root)的标识号,CentOS 7和CentOS 8的普通用户标识号从1000开始。如果我们自定义建立一个普通用户,那么会看到该账户的标识号是大于或等于1000的。

第4个字段

  表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。

第5个字段

  注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。我们可以使用chfn命令来更改这些信息。

第6个字段

  用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。比如,建立一个普通用户test1,要想让test1的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。

第7个字段

  用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Hat、CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,这表示不允许该账号登录。如果想建立一个不允许登录的账号,可以把该字段改成/sbin/nologin,默认是 /bin/bash。

 

/etc/shadow 文件

# cat /etc/shadow |head -n 3
root:$6$Wu/W4eryssf9B3xQ$jgNuM24oQ9boSTUPaeJ/79GFjLUX912bSDu3ak40qJIxNj4/SpaK.JXguDYowM00mt3/
  5tvNIoBJ7RNcpH2K.1:18257:0:99999:7::: bin:*:18078:0:99999:7::: daemon:*:18078:0:99999:7:::

/etc/passwd 分割成9个字段

第1个字段

  用户名,与/etc/passwd对应

第2个字段

  用户密码,是该账号的真正密码。虽然这个密码已经加密,但是有些黑客还是能够解密的。所以将该文件属性设置为000,但root账户还是可以访问或更改的。

第3个字段

  上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来。例如,上次更改密码的日期为2020年1月1日,则这个值就是365×(2020-1970)+(2020-1970)/4+1=18263。如果是闰年,则有366天。

第4个字段

  要过多少天才可以更改密码,默认是0,即不受限制。

第5个字段

  密码多少天后到期,即在多少天内必须更改密码。例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永远不需要改。

第6个字段

   密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。

第7个字段

   账号失效期限。如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。

第8个字段

  账号的生命周期。跟第3个字段一样,这个周期是按距离1970年1月1日多少天算的。它表示的含义是账号在这个日期前可以使用,到期后将作废。

第9个字段

  保留用的,没有什么意义。

 

命令 groupadd

新增用户组

格式

  groupadd [-g GID] groupname

# groupadd grptest1
# tail -n1 /etc/group
grptest1:x:1002:

如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的,如下操作自定义gid:

# groupadd -g 1008 grptest2
# tail -n2 /etc/group
grptest1:x:1002:
grptest2:x:1008:

 删除组 groupdel

# groupdel grptest2
# tail -n2 /etc/group
slocate:x:21:
grptest1:x:1002:

注意:当组里面有一个或以上账户,那么就无法删除该组;

 

命令 useradd

新增用户

格式为

  useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

  • -u:表示自定义UID。
  • -g:表示使新增用户属于某个已经存在的组,后面可以跟组id,也可以跟组名。
  • -d:表示自定义用户的家目录。
  • -M:表示不建立家目录。
  • -s:表示自定义shell。

新建一个用户 test10:

# useradd test10
# tail -n1 /etc/passwd
test10:x:1001:1001::/home/test10:/bin/bash
# tail -n1 /etc/group
test10:x:1001:

如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。

那么,如何自定义uid、gid或者所属的组呢?

# useradd -u1005 -g 1006 -M -s /sbin/nologin user11

 

删除用户 userdel

格式

  userdel [-r] username

-r选项:当删除用户时,一并删除该用户的家目录。

posted @ 2022-04-11 18:03  醉马踏千秋  阅读(1179)  评论(0编辑  收藏  举报