Linux的用户体系
概述
简单来讲,Linux的用户体系包括用户(使用UID进行标识)和用户组(使用GID进行标识)两部分,用户可以属于多个用户组(一个主组,零或多个附属组)。
Linux有以下三种用户类型:
- root用户:系统超级管理员,可以操作任何文件和指令,拥有最高权限,UID为0;
- 虚拟用户:这类用户不具有登录系统的能力,但却是系统运行必不可少的用户,例如bin,daemon等等,这些用户是系统或者一些应用创建的,UID为1~499;
- 普通用户:这类用户可以登录系统,但是权限不如root用户大。用户可以自行添加,UID为500~60000。
用户信息相关文件
用户信息保存在/etc/passwd
中,密码信息保存在/etc/shadow
中。
用户名 | 密码(固定显示为x) | UID | 主组GID | 用户描述(默认为用户名) | 用户家目录路径 | 用户默认shell路径 |
---|---|---|---|---|---|---|
root | x | 0 | 0 | root | /root | /bin/bash |
daemon | x | 1 | 1 | daemon | /usr/sbin | /user/sbin/nologin |
admin | x | 1000 | 1000 | /home/admin | /bin/bash |
用户组信息保存在/etc/group
中。
组名称 | 组密码(固定显示为x) | GID | 以该组作为附属组的用户名称 |
---|---|---|---|
root | x | 0 | |
daemon | x | 1 | |
adm | x | 4 | syslog |
admin | x | 1000 |
用户相关指令
-
useradd
创建用户 -
passwd
为用户设置密码 -
usermod
修改用户 -
userdel
删除用户 -
id
显示用户信息 -
su
switch user,切换用户
useradd
-c
用户描述
-d
指定用户家目录
-g
指定主组,可以用ID或组名(组必须事先创建),如果没有指定,则创建和用户名相同的组
-G
指定附属组,可以用ID或组名(组必须事先创建)
-s
指定默认shell,可用的shell列表在/etc/shells
-u
指定UID
-m
如果家目录不存在则自动生成
更多参数和默认配置查看man useradd
例如:useradd -c "this is a test user" -m -d /test/testuser -g testgroup -G admin,root -s /bin/bash -u 999 testuser
passwd
passwd
修改用户自己的密码。
passwd
修改指定用户的密码,仅root用户有此权限。
usermod
-c
-d
-g
-G
-s
-u
参数作用和useradd
命令一致。
-L
锁定用户,锁定后用户无法登录。
-U
解锁用户。
userdel
-r
删除用户的同时删除用户家目录。
su
su -
登录式切换,会读取目标用户的配置文件。
su
非登录式切换,仅切换用户,不读取目标用户的配置文件。
用户组相关指令
-
groupadd
创建组 -
groupmod
修改组 -
groupdel
删除组
Linux的文件权限
Linux的用户体系和文件权限息息相关。
通过ls -l
可以查看当前目录下的文件和子目录的权限。(常用ll
命令,是ls -alF
的缩写,会额外显示隐藏文件。该缩写定义在用户家目录的shell配置文件.bashrc
中。)
drwxr-xr-x
这10个字符的第一位表示当前文件或目录的类型,d
表示目录,l
表示连结,-
表示文件。后面9位,每三位为一组,分别代表属主用户、属组用户、其他用户的权限。
r
代表可读,w
代表可写,x
代表可执行(除此之外还有s
和t
,不展开)。体现在文件和目录上,作用分别为:
对于文件
-
r
代表文件可以被读取、查看; -
w
代表可修改,但不代表可删除,删除文件的权限受该文件所属目录的写权限控制; -
x
代表可执行。
对于目录
-
r
代表目录内容可被ls
等指令查看; -
w
代表目录可被修改,包括在目录内创建、删除文件,重命名目录等; -
x
代表可以进入该目录。
常用指令
-
chmod
修改权限 -
chown
修改属主/属组
chmod
参考 https://www.runoob.com/linux/linux-comm-chmod.html。
常用的方式是chmod u+w file
、chmod -R g=rx directory
等等。
u+w
、g-x
、o=rx
、a=rwx
等表示给属主用户user
、属组用户group
、其他用户other
、或所有用户all
增加、移除或指定r
w
x
权限。
递归操作时使用-R
参数。
chown
参考 https://www.runoob.com/linux/linux-comm-chown.html。
修改属主:chown user file
修改属组:chown :group file
同时修改属主和属组:chown user:group file
递归操作时使用-R
参数。
Ubuntu 16.04 LNMP + WordPress 服务器初始化配置
修改主机名
通过修改/etc/hostname
文件来修改命令行@符号后面那一长串看不懂的主机名,重启后生效。
把主机名设定为localhost
可以同时解决使用sudo
命令时出现的sudo: unable to resolve host
错误。(也可以通过修改/etc/hosts
实现,例如将第一行改为127.0.0.1 localhost
。)
创建用户组和用户
使用groupadd
和useradd
命令完成用户组和用户的创建。可以考虑给同类型的用户分配同一个主要用户组,而不是每个用户都创建一个和用户名相同的用户组,方便按照用户组管控权限。
例如:useradd -m -g 100 -s /bin/bash
,-g 100
将用户主组设定为系统自带的users
用户组。
使用passwd
为用户设定密码。
赋予用户使用sudo
命令的权限
以root用户修改/etc/sudoers
文件,添加一行
来让用户有权执行sudo
命令。
使用ssh登录
客户端在用户目录下新建.ssh
文件夹,在文件夹下新建config
文件:
Host
Hostname
User <要登录的用户>
IdentityFile ~/.ssh/id_rsa
使用ssh-keygen
生成密钥对。使用scp id_rsa.pub
将公钥复制到服务器要登录用户的家目录中。
ssh
登录服务器,在家目录下新建.ssh
目录,然后将公钥加入authorized_keys
文件:cat id_rsa.pub >> .ssh/authorized_keys
。确保authorized_keys
的权限为600
。
设置/etc/ssh/sshd_config
中的PubkeyAuthentication
为yes
。
解决ssh连接服务器后一段时间不操作自动断线的问题
ssh连接服务器后,一段时间不操作,服务器就会自动断开连接,可以通过修改服务器设置,由服务器定期向客户端发送“心跳”来使连接得以保持。
修改/etc/ssh/sshd_config
文件,加入以下内容后重启ssh服务。
ClientAliveInterval 30
ClientAliveCountMax 10
ClientAliveInterval 60
表示每隔60秒服务器会向客户端发送一个空数据包,ClientAliveCountMax 10
表示服务器会自动重试10次,如果10次客户端都没有响应则会断开连接。
安装nginx
参考官方文档
安装MySQL 5.7
参考官方文档
安装PHP 7.3
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.3 php7.3-common php7.3-fpm php7.3-mysql php7.3-curl php7.3-xml php7.3-mbstring php7.3-zip php7.3-gd
配置nginx
备份/etc/nginx/conf.d/default.conf
,修改其内容为:
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /phpinfo {
root /var/www;
index index.php index.html index.htm;
}
location ~ /phpinfo/.+\.php$ {
root /var/www;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ /phpinfo/.+\.php$
中,location
后的~
代表后面的表达式为正则表达式。该正则表达式/phpinfo/.+\.php$
匹配以/phpinfo/
开头,后跟一个或一个以上的任意字符,最后以.php
结尾的地址。
在/var/www/phpinfo
目录下新建一个index.php
文件,写入以下内容:
重启nginx后通过浏览器访问,会发现浏览器提示错误。查看nginx的错误日志/var/log/nginx/error.log
,发现nginx没有权限访问php-fpm.sock
。
查看/run/php/php7.3-fpm.sock
文件权限:
srw-rw---- 1 www-data www-data 0 Jun 13 21:57 php7.3-fpm.sock
使用ps aux | grep nginx
查看nginx工作进程的用户:
nginx 10590 0.0 0.1 24852 2332 ? S 22:22 0:00 nginx: worker process
由于nginx用户不属于www-data用户组,所以没有php7.3-fpm.sock
的读权限。将nginx用户加入www-data用户组来使其获得权限:usermod -G www-data nginx
,重启nginx后刷新浏览器,phpinfo页面即可正常显示。
安装WordPress
创建一个wp-user用户:useradd -m -s /bin/bash wp-user
。设置密码、配置ssh登录。
参考官方文档将WordPress文件下载、解压到wp-user的家目录下。
配置数据库
创建一个WordPress专用的数据库:create database wordpress default character set utf8mb4 collate utf8mb4_unicode_ci;
创建一个供WordPress应用使用的数据库用户:create user wordpress identified by 'password';
赋予用户操作WordPress数据库的权限:grant all privileges on wordpress.* to 'wordpress'@'localhost' identified by 'password';
配置WordPress
复制/home/wp-user/wordpress/wp-config-sample.php
生成wp-config.php
文件,修改其内容,添加数据库配置:
配置nginx
修改配置文件/etc/nginx/conf.d/default.conf
,在server
块中加入两个location
:
server {
# ...
location / {
root /home/wp-user/wordpress;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /home/wp-user/wordpress;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启nginx后通过浏览器访问,完成WordPress的安装。
配置WordPress文件权限
为了能在WordPress的管理后台直接下载主题、插件而无需借助FTP,需要让php-fpm的运行用户www-data拥有修改wp-content
目录的权限:chown -R www-data:www-data wp-content
。
同时在wp-config.php
中加入define( 'FS_METHOD', 'direct' );
来让php-fpm直接进行下载、创建修改文件和目录等操作。
Linux 常用指令备忘
开机自动启动服务
使用systemctl enable $SERVICE$
可配置服务开机自启动,例如:systemctl enable redis-server
。
使用systemctl list-unit-files
可列出所有的服务(unit),例如:systemctl list-unit-files | grep redis
。