Linux用户文件权限

chmod

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)用户组(Group)其它用户(Other Users)

只有文件所有者和超级用户可以修改文件或目录的权限。

权限的三种表示方法

十进制 权限 rwx 二进制
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r– 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 –x 001
0 000

对应的示意图:

语法

1
chmod [-cfvR] [--help] [--version] mode file...

参数说明

mode : 权限设定字串,格式如下 :

1
[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • + 表示增加权限,- 表示取消权限,= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
  • --help : 显示辅助说明
  • --version : 显示版本

实例

将文件 file1.txt 设为所有人可读取 :
1
chmod ugo+r file1.txt

1
chmod a+r file1.txt
将文件 file1.txtfile2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
1
chmod ug+w,o-w file1.txt file2.txt
ex1.py 设定为只有该文件拥有者可以执行 :
1
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
1
chmod -R a+r *
此外chmod也可以用数字来表示权限如 :
1
chmod 777 file

用户组管理

1
chown -R git.git /var/www/blog/   #授予git.git为/var/www/blog/的管理者

查看当前目录下所有文件的用户组和权限

1
ls -al

Git用户权限控制

赋予Git用户sudo权限

1
chmod 740 /etc/sudoers
1
vim /etc/sudoers

可以看到以下内容:

1
2
# User privilege specification
root    ALL=(ALL:ALL) ALL

root ALL=(ALL:ALL) ALL 这一行下面添加 {Git用户名} ALL=(ALL:ALL) ALL

保存退出后,修改回文件权限:

1
chmod 440 /etc/sudoers

关闭Git用户shell权限

1
vim /etc/passwd

将最后一行的 {git用户名}❌1001:1001:,,,:/home/git:/bin/bash 修改为 {git用户名}❌1001:1001:,,,:/home/git:/usr/bin/git-shell

,也即将/home/git:/bin/bash改为/home/git:/usr/bin/git-shell

使用密钥进行SSH登录(免密码)

1
2
3
4
cd /home/{账户名称}               //切换到需要修改的账户的用户目录
mkdir .ssh                      //创建.ssh目录
cd .ssh
vim authorized_keys

然后将本地的公钥复制到服务器的 authorized_keys 文件里 (本地的公钥即本地执行 cat ~/.ssh/id_rsa.pub 查看的内容,若无法运行则需创建)。

注意:收集所有需要登录的用户的公钥,就是他们自己的 id_rsa.pub 文件,把所有公钥导入到 /home/git/.ssh/authorized_keys 文件里,一行一个。

配置好密钥后,就可以免密码直接用ssh登录账户了。

如果有必要,还应该关闭所有用户的密码登录,选择密钥登录,并使用跳板机,fail2ban等工具来加强安全性,并定期检查账号登录日志,防患于未然。