Linux 用户&权限 学习笔记

作者:JAY 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


TOP