2019-03-14
基础知识
在同一台服务器上部署多个程序,需要做好权限管理,确保每个程序仅能访问自己需要的目录和文件。Linux的用户权限只需记住3个概念:权限、组和用户。
组
多个用户可能会使用相同的权限,因此有组的概念。创建用户时需要指定属于哪个组,如果没有指定,系统会自动创建一个与用户名同名的组。
查看
[root@localhost ~]#vim /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon ...
每行是一个组,冒号分隔开的依次是组名、密码、ID和组内用户。
密码x仅仅是一个标识,真正的密码存在/etc/gshadow文件中。组内用户如果为初始用户则不会显示,仅展示附加的用户。
新增
不指定id
groupadd groupName
指定id
groupadd -g 1000 groupName
修改
修改组名
groupmod -n newName groupName
添加用户
gpasswd -a userName groupName
删除用户
gpasswd -d userName groupName
删除
groupdel groupName
用户
用户分3种:root、系统用户和一般用户。UID值为0的是root用户,作为超级用户,拥有操作系统一切权限,谨慎使用。系统用户(又称“伪用户”)UID值为1-499,可以配置和普通用户一样的权限,但不能登录系统,给各种服务(如nginx/php/node等)一般就可以设置成系统用户。其余的UID值为500-60000的就是普通用户了,可以正常登录,操作自己有权限的目录。
查看
[root@localhost ~]#vim /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ...
每行是一个用户,冒号分隔开的依次是登录名、密码、ID、组ID、注释、home目录和用户的默认shell。
跟组的密码一样,此处密码x仅仅是一个标识,真正的密码存在/etc/shadow文件中。Home目录是登录进去的默认目录。Shell设置成/usr/sbin/nologin即配置用户不能登录。
新增
指定组(-g)
useradd -g groupName userName
指定id(-u)
useradd -g groupName -u 1000 userName
指定路径(-d)
useradd -g groupName -d /home userName
指定shell不能登录(-s)
useradd -g groupName -s /sbin/nologin userName
加注释(-c)
useradd -g groupName -c Comment userName
修改
修改uid
usermod -u 1001 userName
修改组
usermod -g groupName userName
修改目录
usermod -d /home userName
修改密码
usermod -p password userName
删除
userdel userName
权限
在任意目录下运行“ll”命令,即可查看该目录下的文件的权限:
[root@localhost ~]#ll ---------- 1 root root 0 Mar 01 10:00 000 ---x------ 1 root root 0 Mar 01 10:00 100 --w------- 1 root root 0 Mar 01 10:00 200 -r-------- 1 root root 0 Mar 01 10:00 400 -r-x------ 1 root root 0 Mar 01 10:00 500 -rw------- 1 root root 0 Mar 01 10:00 600 -rwx------ 1 root root 0 Mar 01 10:00 700 d--------- 2 root root 4096 Mar 01 10:00 d000 dr-------- 2 root root 4096 Mar 01 10:00 d400 drw------- 2 root root 4096 Mar 01 10:00 d600 drwx------ 2 root root 4096 Mar 01 10:00 d700 ...
每行最前面的10位即文件权限。第一位字符表示文件类型,可以是d(目录)、b(块设备)、s(socket)、“-”(普通文件)等。2-4位表示属主用户权限,5-7位表示属组成员权限,8-10位表示其他用户权限。权限分为读(r)、写(w)和执行(x),如可读写可执行就是rwx,只读就是r--。
Linux的权限控制使用位计算来实现,储存和修改时需要用到实际的二进制位数据:4(只读),2(可写),1(可执行)。按照属主用户、组成员、其他用户的顺序,用三个数字来表示权限,比如所有用户可读可写可执行的权限是777,组成员和其他用户只读的权限是744等。如果不了解位计算权限控制的实现原理,可以参考我的另一篇博客《位计算实现权限控制》。
修改文件归属
修改用户
chown userName filename
修改文件夹及内部文件
chown -R userName filename
修改组
chgrp groupName filename
同时修改用户和组
chown userName:groupName filename
修改文件权限
修改文件
chmod 777 filename
修改文件夹及内部文件
chmod -R 777 filename
总结
除了使用配置账号密码登录,还可以选择PublicKey等方式登录,可以参考我的另一篇博客《使用Public Key登录Linux》。
合理配置权限是运维安全的基础之一。建议每个程序单独使用一个系统用户,谨慎使用root用户。
本文未经许可禁止转载,如需转载请联系 JAY@oonne.com