独书先生 Menu

如何查看Linux系统架构类型

识别 Linux 操作系统的位数类型是一项常见的任务。下面将介绍几个可用于确定系统架构的命令,无论你是在桌面版还是文本界面的 Linux 环境下,这些方法均适用于各种发行版,如 RHEL、CentOS、Fedora、Debian、Ubuntu、Linux Mint 和 OpenSUSE 等。

1. uname 命令

使用 uname -a 命令,可以直接获取当前 Linux 系统的架构信息。该命令适用于几乎所有的 Linux/Unix 系统。

查看Linux系统是32位还是64位架构

2. dpkg 命令

若你使用的是基于 Debian/Ubuntu 的操作系统,可以使用 dpkg 命令来查看系统的位数。在终端中执行以下命令:

输出结果为 amd64 表示系统为 64 位,输出为 i386 则表示系统为 32 位。

3. getconf 命令

getconf 命令可用于显示系统变量配置信息。你可以使用以下命令查看 Linux 系统架构:

4. arch 命令

使用 arch 命令可以显示操作系统的架构类型,与 uname -m 命令类似。如果输出为 x86_64,则表示系统为 64 位;如果输出为 i686i386,则表示系统为 32 位。

查看Linux系统是32位还是64位架构

5. file 命令

file 命令可以通过检查 /sbin/init 文件(在 Ubuntu 15.10 中链接到 /lib/systemd/systemd)来确定系统的架构类型:

查看Linux系统是32位还是64位架构

这些方法可以帮助你轻松地确定当前 Linux 系统的位数类型,无论你使用的是哪个发行版。

参考

CentOS 创建新用户并赋予 root 权限,禁止 root 登陆

原文:https://lwebapp.com/zh/post/centos-adduser

需求

最近遇到了阿里云 ECS 服务器被 DDoS 攻击的问题,说明我们的服务器安全性有待提高。从 ssh 登陆方面考虑,可以给 linux 系统设置子用户,禁止 root 登陆,能够提升一定的安全性。

本文你将会学习到

  • 如何给 linux 系统、CentOS 系统创建新用户,并设置密码
  • 如何给 CentOS 新用户授予权限控制
  • 如何禁止 root 登陆提升服务器 ssh 远程连接安全
  • 如何重启 sshd 服务
  • 如何查看文件权限及修改文件权限

用户管理

  1. 创建用户,设置密码

    先创建一个用户,起个名字,比如 lwebapp

    adduser lwebapp
    

    为用户 lwebapp 设置密码,会触发交互,输入密码即可

    passwd lwebapp # 触发交互,输入密码 lwebappwd
    
  2. 授予 root 权限
    修改sudoers,为新创建的用户赋予 root 权限,这样每次只需要用新用户lwebapp登录,就能完成所有服务器操作了。

    sudoers文件在/etc目录下,首先修改下这个文件的权限为允许修改

    chmod 777 /etc/sudoers
    

    然后用vim打开

    敲击i进入编辑模式

    vim /etc/sudoers
    

    接着在root ALL=(ALL) ALL这句话后面换行,输入

    lwebapp ALL=(ALL) ALL # 为lwebapp赋予所有权限,和上面的root一样
    

    敲击Esc,输入冒号:进入 vim 命令模式,再输入wq,敲击Enter保存退出

    保存完文件再把文件权限设置回来

    chmod 444 /etc/sudoers
    
  3. 禁止 root 登入
    因为有了新用户,就把 root 用户登陆的权限给禁止掉,这样黑客就没办法通过破解 root 登陆才操作服务器,至少我们的新用户名变了,给黑客攻击增加了一层难度

    找到并编辑sshd_config文件

    vim /etc/ssh/sshd_config
    

    找到PermitRootLogin yes,把yes改成no,意思就是不允许 root 账户登陆

    PermitRootLogin no
    
  4. 重启 sshd
    最后重启 sshd 才能生效

    systemctl restart sshd.service
    

原文:https://lwebapp.com/zh/post/centos-adduser

扩展学习

文件权限

  1. 查看文件权限
    stat -c '%A %a %n' *
    
  2. 让某个文件夹内所有文件都有 777 权限
    chmod 777 -R ./webapps
    

vim 基本操作

  1. 打开一个文件
    vim file.txt
    
  2. 进入编辑模式
    敲击 i,终端界面底部显示-- INSERT --即为编辑模式

  3. 进入命令模式
    输入:,终端界面底部显示:和光标

  4. 退出编辑模式或者命令模式
    敲击Esc

  5. 保存退出
    命令模式下,输入wq,敲击确定Enter即完成保存退出

  6. 强制退出
    命令模式下,输入q!,敲击确定Enter即完成强制退出

sshd 服务

  1. 查看 sshd 服务状态

    systemctl status sshd.service
    

    会显示一系列服务状态,比如running就表示是启动成功的状态

  2. 启动 sshd 服务

    systemctl start sshd.service
    
  3. 重启 sshd 服务
    systemctl restart sshd.service
    
  4. 设置为开机启动
    systemctl enable sshd.service
    

参考

阿里云无法连接FTP服务器

问题

在安装wordpress插件的时候,无法连接FTP服务器,发现阿里云ECS默认是没有安装ftp服务的

解决

参考官网教程安装vsftpd

步骤

1. root登录aliyun ssh

2. yum安装vsftpd

yum install -y vsftpd

3. 设置FTP服务开机自启动

systemctl enable vsftpd.service

4. 启动ftp服务

systemctl start vsftpd.service

5. 设定用户

-d指向目录/home/ftpuser,-g创建用户组ftp,-s /sbin/nologin禁止ftpuser用户登录SSH

useradd -d /home/ftpuser -g ftp -s /sbin/nologin ftpuser

为ftpuser设置密码

passwd ftpuser

更改/var/www目录的拥有者为ftpuser。

chown -R ftpuser:ftp /var/www

6. 修改vsftpd.conf

vim /etc/vsftpd/vsftpd.conf
#除下面提及的参数外,其他参数保持默认值即可。

#修改下列参数的值
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#监听IPv4 sockets
listen=YES
#在行首添加#注释掉以下参数,关闭监听IPv6 sockets
#listen_ipv6=YES

#添加下列参数
#设置本地用户登录后所在目录
local_root=/var/www
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例公网IP
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用的端口范围的最大值
pasv_max_port=60000

7. 添加 root为例外

vim /etc/vsftpd/chroot_list # 

8. 重启

systemctl restart vsftpd.service

9. 添加安全组

自定义TCP, 21/21, 0.0.0.0/0
自定义TCP, 50000/60000, 0.0.0.0/0
  1. 谷歌浏览器访问:ftp://<FTP服务器公网IP地址>:21验证

FAQ

1. 外网无法访问可能为防火墙问题

ftp默认的端口为21,centos默认没有开启,则修改iptables文件

vi /etc/sysconfig/iptables

新增:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

保存和关闭文件,重启防火墙:

service iptables restart

2. 登录后无法返回目录和上传文件,可能要设置selinux

查看selinux状态

getsebool -a | grep ftp

如果出现:

getsebool:  SELinux is disabled

则需要先开启SELinux

出现allow_ftpd_full_access off或者ftp_home_dir off即没有开启外网访问
执行

setsebool -P allow_ftpd_full_access 1   

setsebool -P ftp_home_dir off 1

重启vsftpd

systemctl restart vsftpd.service
  1. 文件开启权限
chmod 777 /var/www
  1. 偶现不成功,请在评论区讨论

参考

https://help.aliyun.com/document_detail/92048.html
https://www.kancloud.cn/chandler/bc-linux/52710

python目录和文件名转换成小写或大写

需求

linux服务器有大小写的区分,如果有静态文件的路径为驼峰命名MainStatic/FeatureJs.js,那么只能通过 MainStatic/FeatureJs.js访问,而无法通过mainstatic/featurejs.js访问,那么如何让这两个地址都可以访问呢?

思路

先使用带lua模块的nginx镜像:nginx-lua来托管我们的静态文件,能够实现大写的请求转发到小写上,然后再使用python脚本把静态文件全部改成小写的形式.

操作步骤

1.环境准备

docker, git, node, python3安装

centos下安装 docker, git, node, python环境

2. nginx-lua安装

docker run --name master_nginx_2 \
-v /etc/localtime:/etc/localtime \
-v /software/nginx/cert:/etc/nginx/cert \
-v /software/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /software/nginx/conf.d:/etc/nginx/conf.d \
-v /software/nginx/html:/usr/share/nginx/html \
-v /software/nginx/logs:/var/log/nginx \
--restart=always \
-p 80:80 -p 443:443 \
-d firesh/nginx-lua

3. nginx.conf配置

user nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 2;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 1k;
    gzip_types text/plain text/css application/octet-stream application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png application/x-httpd-php application/vnd.ms-fontobject application/x-font-ttf font/ttf font/opentype font/x-woff image/svg+xml image/x-icon;
    include /etc/nginx/conf.d/*.conf;
}

FAQ

4. nginx配置转发

conf.d目录下,自己的配置文件增加lua转发规则
比如我的conf.d/01_www.lwebapp.com.conf

server {
    listen 80;
    server_name www.lwebapp.com lwebapp.com;   #域名
    rewrite ^(.*)$  https://$host$1 permanent;  #将所有http请求通过rewrite重定向到https
}
server {
    listen 443 ssl;   #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动
    server_name www.lwebapp.com lwebapp.com;  # 要解析进来的域名

    ssl_certificate       /etc/nginx/cert/3114423_lwebapp.com.pem;
    ssl_certificate_key   /etc/nginx/cert/3114423_lwebapp.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置
    ssl_prefer_server_ciphers on; 

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 2;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 1k;
    gzip_types text/plain text/css application/octet-stream application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png application/x-httpd-php application/vnd.ms-fontobject application/x-font-ttf font/ttf font/opentype font/x-woff image/svg+xml image/x-icon;

    location / {
        root   /usr/share/nginx/html/vue-demo;
        index  index.html index.htm;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

5. python脚本

python目录和文件名转换成小写或大写conver.py,放置在nginx/html下,后续html下会放置各个项目的静态文件,所以使用conver.py统一使用脚本处理

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os, sys


def convert(rootdir, optype='l'):
    """
    目录/文件名转换成小写或大写
    :param rootdir: 要转换的根目录路径
    :param optype: 操作类型(小写/大写)  小写:optype = 'l'  大写:optype = 'u',默认转换成小写
    :return:
    """
    dirlist = os.listdir(rootdir)
    for index, onedir in enumerate(dirlist):
        if optype == 'l':
            cdir = onedir.lower()
        elif optype == 'u':
            cdir = onedir.upper()
        subdir = os.path.join(rootdir, onedir)

        if onedir != cdir:      # 子目录或文件名不全为小写或大写
            subcdir = os.path.join(rootdir, cdir)
            os.rename(subdir, subcdir)          # 把大写的目录或文件名命名成小写或大写
            dirlist[index] = cdir
            subdir = subcdir

        # print(subdir)
        if os.path.isdir(subdir):
            convert(subdir, optype)

def help():
    print("use: python convert.py 'rootDirPath' {optype:'l'/'u'}")

def main():
    if len(sys.argv) == 2:
        convert(sys.argv[1])
    elif len(sys.argv) == 3:
        convert(sys.argv[1], sys.argv[2])
    else:
        help()
        exit(400)


if __name__ == '__main__':
    main()

6. 项目初始化

前置条件,安装node

# 进入/software/vue-demo/repository 目录
cd /
mkdir -p /software/vue-demo/repository
cd /software/vue-demo/repository

# 拉取初始代码
git clone https://github.com/Dushusir/vue-demo.git

# 进入vue-demo目并安装项目依赖
cd vue-demo
npm install
# 打包
npm run build

# 新建vue-demo
cd ../../../nginx/html
mkdir vue-demo

# 复制到托管目录
cd ../../vue-demo
yes | cp -r repository/vue-demo/dist/* ../nginx/html/vue-demo

7. 一键更新脚本

后续github上传代码后,在服务器任意位置使用 cd / && cd software/vue-demo && sh deploy_vue_demo.sh一键更新发布

#!/bin/bash
# 一键更新部署脚本,目录在:/software/vue-demo/下
# pull下来的网站代码仓库目录
input="repository/vue-demo"
# 挂载到容器的代码目录
output="../nginx/html/vue-demo"
cd $input

# 忽略本地,强制从线上更新下来
git fetch --all
git reset --hard origin/master 
git pull

# 打包
npm run build

# 备份
cd ../../$output && yes | cp -r * ../../../back/vue-demo
# 清空发布目录
rm -rf *
# 复制到发布目录
cd / && cd software/vue-demo && yes | cp -r $input/dist/* $output

# 文件名大写转小写
cd / && cd software/nginx/html && python3 conver.py "endoc" "l"

8. 一键回退脚本

cd / && cd software/vue-demo && sh back_deploy_vue_demo.sh

#!/bin/bash
# 一键回退脚本,目录在:/software/vue-demo/下
# 挂载html代码目录
output="../nginx/html/vue-demo"
# 清空发布目录
cd $output && rm -rf *
# 复制备份到发布目录
cd / && cd software/back/vue-demo && yes | cp -r * ../$output

参考

centos下安装 docker, git, node, python环境

1. git

yum install git

2. docker

centos下

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者参考docker-ce安装

3. node

1. install latest nvm

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

if no any response,try curl:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

v0.35.3 is latest version currently i use, change the version if you need.learn more aboutnvm

if you get error

curl: (7) Failed connect to raw.githubusercontent.com:443; Connection reset by peer

just try open the https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh in browser,download install.sh file manually, then upload to your server, tap sudo bash install.sh manually.

2. solve commond not found

source ~/.nvm/nvm.sh

3. install node v12.X latest version

nvm install 12

4. check node version

node -v

4. python 3

udo yum install yum-utils
sudo yum-builddep python
curl -O https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
tar xf Python-3.8.3.tgz
cd Python-3.8.3
./configure
make
sudo make install
alias python='/usr/local/bin/python3.8' #edit python command python3