2. Linux中的用户管理

157 阅读11分钟

本系列都是是基于RedHat体系的,所以CentOS也可以用,但是Debian系列的可能会有些命令上的出入。

1. 用户管理

1.1 用户信息相关文件

  1. /etc/passwd:存储用户的基本信息

    root:x:0:0:root:/root:/bin/bash

    用户名:密码占位符:UID:GID:描述:

    • 用户名
    • 密码:都是x,因为密码不会直接存储在这里,而是位于/etc/shadow中密文存储
    • UID: User ID
      • 0:root
      • 1~499:系统用户
      • 1000+:普通用户
    • GID: Group ID,是基本组号,不是附加组号
    • 描述:描述用户的信息,例如manager
    • 家目录:该用户~所代表的目录位置
    • 登录启动项:如果不是shell类基本都会禁止登录的,规范禁止登录是:/sbin/nologin
  2. /etc/shadow:存储用户的密码信息,man 5 shadown

    root:$6$FmCdybiez6x.G9mb$6Ny6JZ9TDEiCxv4NfWRxkTWsQaOAs.4F4JcZo1q15a070QW0PdbPc4knPFXY6DzHfEplm.OEu86WQ6yw0QEZ//:18587:0:99999:7:::

    只需要前两项即可,后续了解即可

    • 用户名
    • 口令:某种算法运算之后的结果
      • 为空则是没有口令
      • *开头代表用户被锁定
      • !!开头代表这个密码已过期,密码前面直接加入!!就会使其过期。
      • $6开头代表是SHA-512加密
      • $1开头MD5加密【Hash】
      • $2开头Blowfish加密
      • $5开头SHA-256加密
      • salt:加盐
    • 最后一次修改时间:从1970年1月1日算起到最后一次修改的天数
    • 最小间隔:就是最小的可以修改密码的时间间隔,默认是0,代表随时可以修改
    • 最大时间间隔:就是最大的必须修改密码的时间间隔,默认是99999,代表可以永远不修改
    • 警告时间:提示修改密码的时间
    • 不活动时间:用户不登录系统的最大时间,超过该时间未登录就禁用用户
    • 失效时间:用户多少天失效,之后就不可用了
    • 保留
  3. /etc/group:存储组信息

    root:x:0:

    • 组名
    • 组密码
    • GID
    • 组成员:默认为空,可有多个

    root组成员和root有类似的权限,但是建议别这样使用,因为超级管理员一个程序只需要有一个。

  4. /etc/gshadow:存储组密码,一般不用

1.2 操作用户

1.2.1 创建用户

$ useradd username # 用户名username不能重名,adduser也是一样的功能
# -u UID:				用户ID
# -g gid:				基本组
# -G gid1[,gid2[,...]]:	附加组
# -c:					注释信息,其实是全名
# -d /path/to/user-home:指定用户家目录
# -s /bin/bash:			指定/etc/shells中的shell,或者/sbin/nologin
# -m:					自动创建家目录,常和-k连用
# -k:					将/etc/skel目录下的文件拷贝到创建的用户家目录,是bash的配置文件,默认是使用的
# -M:					不给用户创建家目录
root@basil-2020:/# useradd username
root@basil-2020:/# useradd username
useradd: user 'username' already exists

1.2.2 查看新建用户信息​​

  1. id USERNAME

    root@basil-2020:/# id username
    uid=1001(username) gid=1002(username) groups=1002(username)
    
  2. /etc/passwd

    $ grep USERNAME /etc/passwd
    root@basil-2020:/# grep username /etc/passwd
    username:x:1001:1002::/home/username:/bin/sh
    
    $ tail -1 /etc/passwd 	# 新建的都在最后
    root@basil-2020:/# tail -1 /etc/passwd
    username:x:1001:1002::/home/username:/bin/sh
    
  3. finger USERNAME

    $ finger USERNAME						# 应该需要安装,查看用户账号信息
    [root@localhost ~]# finger fedora
    Login: fedora                           Name: Fedora Community
    Directory: /home/fedora                 Shell: /bin/sh
    Never logged in.
    No mail.
    No Plan.
    

1.2.3 修改用户密码

# --stdin			从标准输入输入命令
# -l				锁定账号
# -u				解锁账号
# -d				删除用户密码
$ passwd USERNAME 	# 如果直接只使用passwd,就是修改当前用户的密码
root@basil-2020:/# passwd username
New password:
Retype new password:
passwd: password updated successfully

# 修改用户密码过期时间
$ chage [OPTIONS] [USERNAME]

$ pwck 				# 检查用户账号完整性

1.2.4 查看用户

  1. 查看自己

    $ whoami
    root@basil-2020:/# su username
    username@localhost: /$ whoami
    username
    
  2. 查看所有登录用户 -r:打印当前运行级别

    $ who
    # 用户    终端         启动时间
    root     tty1         2021-01-15 19:53
    root     pts/0        2021-01-15 19:56 (192.168.141.1)
    root     pts/1        2021-01-16 00:46 (192.168.141.1)
    
  3. 查看用户并看他们在做什么,类似who,更详细

    $ w
     03:55:11 up  8:01,  3 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1                      19:53    5:43   0.07s  0.07s -bash
    root     pts/0    192.168.141.1    19:56    7.00s  0.73s  0.02s w
    root     pts/1    192.168.141.1    00:46    1:59   0.12s  0.01s bash
    
  4. last 可以查看用户登录历史,其实是显示/var/log/wtmp文件

    -n NUM:只显示最近NUM次的登录信息

    $ last
    root     pts/1        192.168.141.1    Sat Jan 16 00:46   still logged in
    root     pts/0        192.168.141.1    Fri Jan 15 19:56   still logged in
    root     tty1                          Fri Jan 15 19:53   still logged in
    ...
    
  5. lastb:显示/var/log/btmp文件,用户错误登录尝试

    -n NUM:只显示最近NUM次的登录信息

    $ lastb
    root     ssh:notty    192.168.141.1    Sat Jan 16 04:02 - 04:02  (00:00)
    root     ssh:notty    192.168.141.1    Sat Jan 16 04:02 - 04:02  (00:00)
    root     ssh:notty    192.168.141.1    Sat Jan 16 04:02 - 04:02  (00:00)
    
  6. lastlog:显示当前系统每个用户最近一次成功登录信息

    -u USERNAME显示某个具体用户的登录信息

    $ lastlog -u user1
    Username         Port     From             Latest
    user1            pts/1                     Sat Jan 16 03:52:43 -0500 2021
    
  7. basename:取得路径得基名

    $  basename /etc/sysconfig/network-scripts/ifcfg-ens32
    ifcfg-ens32
    

1.2.5 修改用户信息

# -u UID						用户ID
# -g GID						基本组
# -G GID[,GID2[,...]]			附加组,但是之前的就没有了,常和-a连用
# -a							不会删除之前加入的附加组
# -c							注释信息,是用户全名
# -d							新的家目录,常和-m连用
# -m							原家目录文件移动到新的家目录
# -l							修改登陆用户名
# -L							锁定用户账号,类似禁用
# -U							解锁用户账号
# -s							指定用户默认SHELL
# -r							添加系统账户,不登陆系统,没有家目录
$ usermod [OPTIONS] [USERNAME]	# 基本和useradd一致,可以修改的信息,通过usermod --help或man user
root@basil-2020:~# usermod -s /sbin/nologin username	# 不让用户登录
root@basil-2020:~# su - username
su: warning: cannot change directory to /home/username: No such file or directory
This account is currently not available.


# 修改用户账号注释信息,如全名
# 使用finger查看
$ chfn [USERNAME]

1.2.6 删除用户

# -r代表删除家目录HOME_DIR
$ userdel -r username 
# 因为没有/home/username这个家目录,所以删除找不到,不过用户已经删除了
root@basil-2020:~# userdel -r username
userdel: username mail spool (/var/mail/username) not found
userdel: username home directory (/home/username) not found
root@basil-2020:/# id username
id: ‘username’: no such user

1.3 操作组

只用知道用户所处在哪些组,对应有哪些权限即可。

  • 私有组:随用户创建,组名同用户名一致。一个用户只能有一个基本组,而且也是/etc/passwd中那个gid对应的
  • 基本组:用户的默认组
  • 附加组:后面用户加入的组

1.3.1 新建组

# -g				指定GID
# -r				创建系统组
$ groupadd GROUPNAME 

1.3.2 查看组信息

$ grep GROUPNAME /etc/group
root@basil-2020:/# grep groupname /etc/group
groupname:x:1002:

$ tail -1 /etc/group
root@basil-2020:/# tail -1 /etc/group
groupname:x:1002:

1.3.3 组中增删用户及修改密码

$ gpasswd -a username GROUPNAME 						# 添加用户
$ gpasswd -d username GROUPNAME 						# 移除用户
root@basil-2020:/# grep groupname /etc/group
groupname:x:1002:
root@basil-2020:/# gpasswd -a username groupname
Adding user username to group groupname
root@basil-2020:/# grep groupname /etc/group
groupname:x:1002:username
root@basil-2020:/# gpasswd -d username groupname
Removing user username from group groupname
root@basil-2020:/# grep groupname /etc/group
groupname:x:1002:

# 密码需要配合newgrp使用
$ newgrp GROUPNAME										# 临时切换用户基本组为别的组,此时需要设置组的密码,退出即exit

1.3.4 修改组自身信息

# -g GID						指定GID
# -n GROUPNAME					修改组名
$ groupmod -g GID GROUPNAME 	# 修改组id
root@basil-2020:/# groupmod -g 1004 groupname
root@basil-2020:/# grep groupname /etc/group
groupname:x:1004:

1.4 切换用户以及sudo

  • su - root:切换用户到root,root可以不用写明,默认就是切换到root,-也可以不用写明,但是建议一直写,因为带有和不带有-的区别是环境变量等是否可以沿用,带有就是沿用。
  • sudo:临时权限
    • 所有的用户如果可以使用sudo需要位于wheel组中(CentOS,其它版本略有区别,例如lubuntu是admin或者就是sudo组)
    • 这个文件通过vim /etc/sudoers查看,但是修改就需要使用visudo命令来进行了,这个命令打开使用的是nano软件,所以看下面提示,那个^是Ctrl键。
    • %wheel ALL=(ALL) ALL
    • 组名 用户机器=和谁权限一致 权限

2. 权限管理

2.1 基本权限UGO

2.1.1 概述

User、Group、Other

超级管理员决定某个计算机用户是否能够访问某个资源。

2.1.2 设置权限的两个基本元素

  • 权限对象
    • u:属主
    • g:属组
    • o:其他人
    • a:所有人=u+g+o,特殊对象
  • 权限类型
    • r:读=4
    • w:写=2
    • x:执行=1

2.1.3 修改用户权限

# -R								递归修改权限
# --reference=other-file file		根据other-file来修改权限
# a可以不用加,直接+rwx或者-rwx
$ chmod  -R      u+r     1.txt
# 命令       对象符号权限  文件或者目录,对象和权限的类型如上,符号有+、-、=
# -R 代表迭代,针对目录下所有的目录下所有文件都会该表权限
root@basil-2020:/tmp# touch file1
root@basil-2020:/tmp# mkdir dir1
root@basil-2020:/tmp# ll
drwxr-xr-x  2 root  root  4096 1月   4 14:42 dir1/
-rw-r--r--  1 root  root     0 1月   4 14:40 file1
root@basil-2020:/tmp# chmod u=r file1				# 用户权限为r
root@basil-2020:/tmp# ll file1
-r--r--r-- 1 root root 0 1月   4 14:40 file1
root@basil-2020:/tmp# chmod g=rwx file1				# 对于同组用户改其权限为rwx
root@basil-2020:/tmp# ll file1
-r--rwxr-- 1 root root 0 1月   4 14:40 file1*
root@basil-2020:/tmp# chmod o= file1				# 对于other用户去掉所有权限
root@basil-2020:/tmp# ll file1
-r--rwx--- 1 root root 0 1月   4 14:40 file1*
root@basil-2020:/tmp# chmod a-wx file1				# 对于所有用户去掉写和执行权限
root@basil-2020:/tmp# ll file1
-r--r----- 1 root root 0 1月   4 14:40 file1
root@basil-2020:/tmp# chmod ug=rw,o=r file1         # 这里需要注意','后面不能有空格
root@basil-2020:/tmp# ll file1
-rw-rw-r-- 1 root root 66 1月   4 15:06 file1

# 使用数字
root@basil-2020:/tmp# chmod 751 file1
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 root root 66 1月   4 15:06 file1*

目录必须具有执行权限,因为进入目录属于执行,而修改(删除、更新或新建)目录中的内容属于写。

root@basil-2020:/tmp/test# ls -l
$ ls -l /tmp/test									# 切换到basil用户并查看目录
ls: cannot access '/tmp/test/file': Permission denied
-????????? ? ? ? ?             ? file				# 由于有读的权限,所以可以列出文件名,但是具体内容看不到
basil@basil-2020:/tmp$ cd test						# 尝试进入目录
cd: permission denied: test
root@basil-2020:/tmp# chown basil /tmp/test			# 改变目录属主为basil,再次执行上述命令
root@basil-2020:/tmp# ls -ld /tmp/test
drwxr--r-- 2 basil root 4096 1月   5 10:38 /tmp/test
basil@basil-2020:/tmp$ ls -ld /tmp/test
drwxr--r-- 2 basil root 4096 1月   5 10:38 /tmp/test
basil@basil-2020:/tmp$ ls -l /tmp/test
-rw-r--r-- 1 root root 0 1月   4 17:09 file
basil@basil-2020:/tmp$ cd test
basil@basil-2020:/tmp/test$ ls -l
-rw-r--r-- 1 root root 0 1月   4 17:09 file

2.1.4 修改属主和属组

# -R								递归修改
# --reference=otherfile file		修改成和otherfile一样的属主和属组
$ chown USERNAME[.GROUPNAME] FILE/DIRECTORY 			# 可以改变属主和属组,如果用户名中或者群组中有`.`,则可以使用`:`作为替换分割属主和属组符
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 root root 66 1月   4 15:06 file1*
root@basil-2020:/tmp# chown username.groupname file1	# 改变属主和属组
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 username groupname 66 1月   4 15:06 file1*
root@basil-2020:/tmp# chown root file1               	# 改变属主
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 root groupname 66 1月   4 15:06 file1*
root@basil-2020:/tmp# chown .root file1					# 改变属组
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 root root 66 1月   4 15:06 file1*

# -R
# --reference
$ chgroup GROUPNAME FILE/DIRECTORY  					# 只改变属组
root@basil-2020:/tmp# chgrp groupname file1
root@basil-2020:/tmp# ll file1
-rwxr-x--x 1 root groupname 66 1月   4 15:06 file1*

文件的权限、属主不只是取决于其自身的权限和属主,还取决于其目录的拥有者对于目录的权限,例如一个用户basil对于目录path拥有rwx的权限,但是该目录下有一个root.sh的文件,属主是root,但是用户basil仍然对其可以删除。

root@basil-2020:/tmp/path# ls -ld /tmp/path/			# path的详细信息
drwxrwxr-x 2 basil basil 4096 1月   5 10:17 /tmp/path/
root@basil-2020:/tmp/path# chmod 600 root.sh			# 修改权限
root@basil-2020:/tmp/path# ls -l
-rw------- 1 root root 24 1月   5 10:24 root.sh			# root.data的详细信息
basil@basil-2020:/tmp/path$ ./root.sh					# 切回basil用户,尝试执行
zsh: permission denied: ./root.sh
basil@basil-2020:/tmp/path$ cat ./root.sh				# 尝试读取
cat: ./root.sh: Permission denied
basil@basil-2020:/tmp/path$ rm -rf ./root.sh			 # 执行删除
basil@basil-2020:/tmp$ ls -l							# 非basil用户的文件
-rw-r--r-- 1 root root 0 1月   4 17:09 file
basil@basil-2020:/tmp$ rm -f ./file						执行删除
rm: cannot remove './file': Operation not permitted

2.2 FACL

Filesystem Access Control List,文件访问控制列表,限制用户对文件的访问。利用文件的扩展属性,保存额外的访问控制权限。

权限应用次序:Owner→facl,user→Group→facl,group→Other

$ getfacl /path/to/file									# 查看文件的权限
root@basil-2020:/tmp# ll file1							# 查看文件详细信息
-rwxr-x--x 1 root groupname 66 1月   4 15:06 file1*
root@basil-2020:/tmp# getfacl /tmp/file1				# 查看文件权限
getfacl: Removing leading '/' from absolute path names
# file: tmp/file1
# owner: root
# group: groupname
user::rwx
group::r-x
other::--x


# set file acl, 设置文件访问控制 对象:对象名:权限,对象是ugo,对象名则是对应的用户名,组名
# -m [u:UID:permission | g:GID:permission]:设置权限。设置默认的访问控制列表,需要在u|g之前加入`d`,只能给目录设置。
# -x [u:UID | g:GID]:取消权限
# -b:取消所有facl权限
# --mask:指定mask
$ setfacl -m g:groupname:rwx	/tmp/file1
root@basil-2020:/tmp# setfacl -m u:alice:rw /tmp/file1	# 设置用户的权限
root@basil-2020:/tmp# setfacl -m u:bob:r-x /tmp/file1
root@basil-2020:/tmp# setfacl -m o::r /tmp/file1		# 这里有两个':'
root@basil-2020:/tmp# ll /tmp/file1
-rwxrwxr--+ 1 root 1004 66 1月   4 15:06 /tmp/file1*	   # 这里的+号表示的是除了基础权限还有其它权限,即ACL设置的权限
root@basil-2020:/tmp# getfacl /tmp/file1
getfacl: Removing leading '/' from absolute path names
# file: tmp/file1
# owner: root
# group: 1004
user::rwx
user:alice:rw-
user:bob:r-x
group::r-x
mask::rwx												# 设置的facl权限不能超过这个,超过了也没有权限
other::r--											  	

$ setfacl -x g:groupname:rwx /tmp/file1					# 删除组groupname的ACL权限	
root@basil-2020:/tmp# setfacl -x u:alice /tmp/file1		# 删除用户alice的ACL权限
root@basil-2020:/tmp# getfacl /tmp/file1
getfacl: Removing leading '/' from absolute path names
# file: tmp/file1
# owner: root
# group: 1004
user::rwx
user:bob:r-x
group::r-x
mask::r-x
other::r--

$ setfacl -b /tmp/file1								 	# 删除所有ACL权限
root@basil-2020:/tmp# setfacl -b /tmp/file1				# 删除所有ACL权限
root@basil-2020:/tmp# getfacl /tmp/file1
getfacl: Removing leading '/' from absolute path names
# file: tmp/file1
# owner: root
# group: 1004
user::rwx
group::r-x
other::r--

$ watch -n5 'ls -l /tmp/file1'                        	# 新开一个终端,然后输入,这样每隔5秒钟就会执行后续命令

2.3 特殊权限

2.3.1 特殊位

是基本权限之前的那一位,即xxxx四位八进制数的第一位,表示下面三种权限。 SUID/SGID,特殊命令需要超级管理员权限,位于属主的执行位,针对文件/程序时,具备临时提升权限,即调用文件的用户临时具备属主的能力。

SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。如非必要不要给s权限。对应4。 SGID:运行某程序时,相应进程的基本组属组是程序文件自身的属组,而不是启动者的基本组。对应2。 Sticky:在一个公共目录,每个用户都可以创建文件,删除自己的文件,但是不能删除其它用户的文件。对应1

$ chmod u±s FILENAME			# 增加s权限,如果原来有x权限,则显示为`s`, 否则显示为`S`
$ chmod g±s FILENAME			# 同上
$ chmod o±t DIR					# 增加t权限,如果原来有x权限,则显示为`t`, 否则显示为`T`
root@basil-2020:~# vi /root/file.txt						# 在root的家目录创建的文件,除了root自己,谁都看不成
root@basil-2020:~# ls -ld /root								# 注意权限,除了root,剩下用户都没有权限
drwx------ 6 root root 4096 1月   4 16:35 /root
root@basil-2020:~# ls -l
total 4
-rw-r--r-- 1 root root 4 1月   4 16:35 file.txt
root@basil-2020:~# su basil									# 切换到basil用户
basil@basil-2020:/root
$ cat /root/file.txt
cat: /root/file.txt: Permission denied						# 确认无法访问
basil@basil-2020:/root
$ exit														# 退回root用户
root@basil-2020:~# ll /usr/bin/cat							# 查看cat的权限
-rwxr-xr-x 1 root root 43416 9月   5  2019 /usr/bin/cat*
root@basil-2020:~# chmod u+s /usr/bin/cat					# 给cat提权
root@basil-2020:~# ll /usr/bin/cat
-rwsr-xr-x 1 root root 43416 9月   5  2019 /usr/bin/cat*
root@basil-2020:~# su basil									# 切换到basil用户
basil@basil-2020:/root
$ cat /root/file.txt
123
root@basil-2020:~# chmod u-s /usr/bin/cat					# 不要随便提权
root@basil-2020:~# ll /usr/bin/cat
-rwxr-xr-x 1 root root 43416 9月   5  2019 /usr/bin/cat*

2.3.2 文件属性chattr

如果一个文件很重要,那他万一被超管删除了怎么办?使用特殊的i权限,使得超级管理员用户也无法删除。

属性描述
a(append)允许在文件中进行追加操作,通常对于日志文件添加
A这个属性不允许更行文件的访问时间
c(compressed)启用这个属性时,文件在磁盘上会自动压缩
d(dump)不能使用dump命令备份文件
D设置了目录的D属性时,更改会在同步保存在磁盘上
e(extent for mat)它表明,该文件使用磁盘上的块的映射扩展
i(immutable)在文件上启用这个属性时,我们不能更改、重命名或者删除这个文件
j(journaling)在文件上启用这个属性时,不能更改、重命名或者删除这个文件
S(synchronous)设置了这个属性时,变更或更改同步保存到磁盘上,就是volatile。
$ chattr +i /root/file.txt										# chattr [+|-]i /path/to/file
root@basil-2020:/tmp# touch file.txt
root@basil-2020:/tmp# ll file.txt
-rw-r--r-- 1 root root 0 1月   4 16:53 file.txt
root@basil-2020:/tmp# lsattr file.txt							# lsattr /path/to/file
--------------e----- file.txt

# 添加i属性
root@basil-2020:/tmp# chattr +i file.txt
root@basil-2020:/tmp# ll file.txt
-rw-r--r-- 1 root root 0 1月   4 16:53 file.txt
root@basil-2020:/tmp# lsattr file.txt
----i---------e----- file.txt

# 超级管理员权限下
# 尝试删除文件
root@basil-2020:/tmp# rm -rf file.txt
rm: cannot remove 'file.txt': Operation not permitted
# 尝试修改文件
root@basil-2020:/tmp# echo "Hello " >> file.txt
-bash: file.txt: Operation not permitted
# 尝试重命名
root@basil-2020:/tmp# mv file.txt file01.txt
mv: cannot move 'file.txt' to 'file01.txt': Operation not permitted

# 移除i属性
root@basil-2020:/tmp# chattr -i file.txt
root@basil-2020:/tmp# echo "Hello " >> file.txt
root@basil-2020:/tmp# cat file.txt
Hello
root@basil-2020:/tmp# rm -rf file.txt

2.3.3 进程掩码umask

新建文件的默认权限是644,新建目录的默认权限是755。

权限位在设计的时候实质上有4位,最前面一位也是最大是7(8进制数),当文件有执行权限,此时chmod 4777 /path/to/file就是suid,即属主执行位对应的是s

root@basil-2020:/tmp# touch file
root@basil-2020:/tmp# ls -l file
-rw-r--r-- 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# chmod 0777 file
root@basil-2020:/tmp# ls -l file
-rwxrwxrwx 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# chmod 1777 file
root@basil-2020:/tmp# ls -l file
-rwxrwxrwt 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# chmod 2777 file
root@basil-2020:/tmp# ls -l file
-rwxrwsrwx 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# chmod 4777 file
root@basil-2020:/tmp# ls -l file							# 注意此时的属主执行位的s
-rwsrwxrwx 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# chmod 7777 file
root@basil-2020:/tmp# ls -l file
-rwsrwsrwt 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# ls -l file
-rw-r--r-- 1 root root 0 1月   4 17:09 file
root@basil-2020:/tmp# ls -l file 							# 注意此时的属主执行位的S,这是在原来属主没有x权限时的表现
-rwSr--r-- 1 root root 0 1月   4 17:09 file

$ umask														# 系统掩码,
0022

在系统创建目录的时候,权限时0777-0022=0755,即新建目录的默认权限是755,而系统为了保护自己,在创建文件的时候,去掉了所有的执行权限,即0755-0111=0644

修改umask 0000就可以修改默认新建的文件/目录的权限,此时新建目录权限是0777,新建文件的权限是0666