CentOS--新建用戶並使能密鑰登錄

来源:https://www.cnblogs.com/luizyao/archive/2019/09/18/11544059.html
-Advertisement-
Play Games

CentOS 預設只有一個 root 用戶,但是 root 用戶的許可權過大,而且不利於多人協作,基於許可權管理和安全的原因,我們為系統新建一個用戶,並且使能其 SSH 登錄,同時禁止 root 用戶的登錄; ...


目錄

CentOS 預設只有一個 root 用戶,但是 root 用戶的許可權過大,而且不利於多人協作,基於許可權管理和安全的原因,我們為系統新建一個用戶,並且使能其 SSH 登錄,同時禁止 root 用戶的登錄;

基於CentOS Linux release 7.6.1810 (Core)實踐;

新建用戶

在 CentOS 中,adduseruseradd沒有區別:

[root@centos_7_6_1810 ~]# ll /usr/sbin/ | grep user
lrwxrwxrwx  1 root root           7 Jun 24 10:14 adduser -> useradd
-rwxr-xr-x. 1 root root       33104 Aug  3  2017 fuser
-rwxr-xr-x. 1 root root       15832 Apr 13  2018 lnewusers
-rwxr-xr-x. 1 root root       15752 Apr 13  2018 luseradd
-rwxr-xr-x. 1 root root       11576 Apr 13  2018 luserdel
-rwxr-xr-x. 1 root root       19896 Apr 13  2018 lusermod
-rwxr-xr-x  1 root root       76232 Mar 14  2019 newusers
-rwxr-xr-x  1 root root       33072 Mar 14  2019 runuser
-rwxr-xr-x. 1 root root       19720 Apr 11  2018 sasldblistusers2
-rwxr-x---  1 root root      118224 Mar 14  2019 useradd
-rwxr-x---  1 root root       80400 Mar 14  2019 userdel
-rwxr-x---  1 root root      113856 Mar 14  2019 usermod
-rwsr-xr-x. 1 root root       11376 Oct 31  2018 usernetctl

從上面的命令中可以看出:adduser只不過是useradd命令的一個軟連接;

關於軟連接,你可以暫時把它理解成 Windows 系統中的快捷方式;

使用useradd命令創建新用戶:

[root@centos_7_6_1810 ~]# useradd luizyao
[root@centos_7_6_1810 ~]# ls /home/
luizyao

在大多數 Linux 的發行版本中,useradd命令並不會在/home/下創建對應的用戶目錄,如果想要創建,需要在命令中添加-m (--create-home)選項;但是,CentOS 會為我們自動創建這個用戶目錄;

如果我們想要以這個用戶名登錄系統,必須為其設置一個密碼:

[root@centos_7_6_1810 ~]# passwd luizyao
Changing password for user luizyao.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

然後,我們就可以用這個用戶登錄系統:

[luizyao@centos_7_6_1810 ~]$ whoami
luizyao

為新用戶授權

通常情況下,新用戶在自己的用戶目錄(/home/luizyao/)下擁有完整的許可權,其它目錄需要他人授權;而我們最常用的就是 root 用戶的許可權,這時候sudo命令就可以幫助到我們:它允許信任的用戶以其他用戶的身份去執行命令,預設使用的是 root 用戶;

新用戶並不在信任名單中,所以我們無法借用 root 用戶身份去執行命令:

註意:此時,以新用戶的身份登錄系統的;

[luizyao@centos_7_6_1810 /]$ sudo whoami
[sudo] password for luizyao:
luizyao is not in the sudoers file.  This incident will be reported.

在 CentOS 中,我們有兩種方法把新用戶添加到 Sudoers 列表中:

註意:此時,以 root 的身份登錄系統;

方法一:把新用戶添加到wheel用戶組中

基於 RedHat 分發版本的系統,如 CentOS 和 Fedora,用戶組wheel已經被授予 sudo 的許可權;所以,我們可以通過把新用戶添加到wheel用戶組中,來獲取 sudo 的許可權:

[root@centos_7_6_1810 ~]# groups luizyao
luizyao : luizyao
[root@centos_7_6_1810 ~]# usermod -aG wheel luizyao
[root@centos_7_6_1810 ~]# groups luizyao
luizyao : luizyao wheel

我們通過usermod命令把新用戶添加到wheel用戶組中,可以使用groups命令查看用戶所屬的用戶組;

這個時候,新用戶就可以藉助 root 的許可權執行命令了:

[luizyao@centos_7_6_1810 root]$ sudo whoami
[sudo] password for luizyao:
root

註意:

  • 這種方法下,執行sudo命令需要輸入新用戶的密碼,因為這是wheel用戶組的預設配置,如下所示:

    # /etc/sudoers
    
    106 ## Allows people in group wheel to run all commands
    107 %wheel  ALL=(ALL)       ALL
    108
    109 ## Same thing without a password
    110 # %wheel        ALL=(ALL)       NOPASSWD: ALL
  • 從用戶組中刪除用戶。可以使用如下命令:

    [root@centos_7_6_1810 ~]# gpasswd -d luizyao wheel
    Removing user luizyao from group wheel
    [root@centos_7_6_1810 ~]# groups luizyao
    luizyao : luizyao

方法二:把新用戶添加到sudoers列表中

/etc/sudoers文件中,可以配置用戶和用戶組的 sudo 許可權,這種方式更加靈活一點;並且,有兩種方法為新用戶配置許可權:

  1. 你可以直接在/etc/sudoers文件中配置新用戶的許可權,但是要註意這個文件的預設許可權是只讀的,所以你要先添加寫入許可權,編輯完以後,再恢復為只讀;

    請使用visodu命令修改/etc/sudoers文件,因為它會幫你檢查語法錯誤;

  2. 你也可以在/etc/sudoers.d目錄下,為新用戶添加一個專門的配置文件(推薦):
    bash [root@centos_7_6_1810 ~]# echo "luizyao ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/luizyao luizyao ALL=(ALL) NOPASSWD:ALL [root@centos_7_6_1810 ~]# ll /etc/sudoers.d/luizyao -rw-r--r-- 1 root root 32 Sep 17 17:51 /etc/sudoers.d/luizyao
    上述命令表示:luizyao 可以在任何主機上(第一個ALL)以任何用戶的身份(第二個ALL,預設為 root)執行任何命令(第三個ALL),並且不需要密碼:

    [luizyao@centos_7_6_1810 root]$ sudo whoami
    root

    註意:文件的名字可以是任意的,只是通常我們會配置成用戶名;

新用戶使能 SSH 密鑰登錄

此時,以新用戶的身份登錄系統;

  • 創建密鑰對:

    [luizyao@centos_7_6_1810 ~]$ ssh-keygen -t ecdsa  # 橢圓曲線數字簽名演算法
    Generating public/private ecdsa key pair.
    Enter file in which to save the key (/home/luizyao/.ssh/id_ecdsa):  # 選擇密鑰對存放的文件夾 
    Created directory '/home/luizyao/.ssh'.
    Enter passphrase (empty for no passphrase):  # 私鑰的密碼
    Enter same passphrase again:  # 確認私鑰密碼
    Your identification has been saved in /home/luizyao/.ssh/id_ecdsa.
    Your public key has been saved in /home/luizyao/.ssh/id_ecdsa.pub.
    The key fingerprint is:
    SHA256:FljQN9JFxB/C83Mv7N3rFNLCxXICRxaKzKDb+Tzsgwo luizyao@centos_7_6_1810
    The key's randomart image is:
    +---[ECDSA 256]---+
    |      .+.. B==.  |
    |      .o* = X o  |
    |     .. .* o B = |
    |      o ..  . X .|
    |     . oS    = =.|
    |       .+     = o|
    |   E    .=   . +.|
    |    .  ....   o o|
    |     ..  ..   .o.|
    +----[SHA256]-----+
  • 下載私鑰到本地:

    基於 Mac OS 的實踐;

    使用scp命令下載私鑰:

    yaomengdeMacBook-Air:~ yaomeng$ scp luizyao@<ip 地址>:/home/luizyao/.ssh/id_ecdsa ~/.ssh/

    此時,我們仍然需要密碼登錄:

    yaomengdeMacBook-Air:~ yaomeng$ ssh luizyao@<ip 地址>
    Enter passphrase for key "/Users/yaomeng/.ssh/id_ecdsa":  # 輸入私鑰密碼,登錄失敗
    [email protected] password:  # luizyao 的用戶密碼
    Last login: Tue Sep 17 22:50:22 2019
  • SSH 免密登錄

    重命名公鑰為 authorized_keys:

    [luizyao@centos_7_6_1810 ~]$ mv ~/.ssh/id_ecdsa.pub ~/.ssh/authorized_keys
    [luizyao@centos_7_6_1810 ~]$ ll ~/.ssh/
    total 8
    -rw-r--r-- 1 luizyao luizyao 185 Sep 17 22:58 authorized_keys
    -rw------- 1 luizyao luizyao 314 Sep 17 22:58 id_ecdsa
    註意:
    • 因為我之前並沒有 authorized_keys 文件,所以這裡我直接重命名;如果之前已經有 authorized_keys 文件,可以使用以下命令,把公鑰添加到文件末尾:

      cat >> ~/.ssh/authorized_keys < ~/.ssh/id_ecdsa.pub
    • 註意 authorized_keys 文件、~/.ssh/ 目錄、或者 用戶的 home 目錄(/home/luizyao/)對其他用戶賦予了寫入的許可權,那麼sshd判斷此文件已經不安全,將不會使用這個文件,除非你已經設置 StrictModes 為 no;

      你可以通過man sshd命令查看幫助文檔:

      ~/.ssh/authorized_keys
                Lists the public keys (DSA, ECDSA, Ed25519, RSA) that can be used for logging in as this user.  The format of this file is described above.  The con‐
                tent of the file is not highly sensitive, but the recommended permissions are read/write for the user, and not accessible by others.
      
                If this file, the ~/.ssh directory, or the user's home directory are writable by other users, then the file could be modified or replaced by unautho‐
                rized users.  In this case, sshd will not allow it to be used unless the StrictModes option has been set to “no”.

    此時,我們就可以使用 SSH 免密登錄:

    yaomengdeMacBook-Air:~ yaomeng$ ssh [email protected]
    Enter passphrase for key "/Users/yaomeng/.ssh/id_ecdsa":  # 私鑰密碼 
    Last login: Wed Sep 18 00:00:41 2019 from 49.65.108.161
    
  • 去使能 SSH 密碼登錄

    現在,我們仍然可以使用密碼登錄,這還是不安全的,現在我們就來禁止使用密碼登錄系統;

    對於 CentOS 系統來說,只需要修改 SSH 配置文件/etc/ssh/sshd_config中的PasswordAuthenticationno

    再重啟 SSH 服務:

    [luizyao@centos_7_6_1810 ~]$ sudo systemctl restart sshd

    我們便禁止了 SSH 的密碼登錄,只能使用密鑰登錄;

其它

為了進一步提升系統的安全性,我們還可以做一些事情:

禁止 root 用戶使用 SSH 登錄

只需要修改 SSH 配置文件/etc/ssh/sshd_config中的PermitRootLoginno,再重啟 SSH 服務;

使用非常規的 SSH 埠

預設的 SSH 埠是22,我們可以修改為不常用的埠:修改 SSH 配置文件/etc/ssh/sshd_config中的Port值(例如:10178),再重啟 SSH 服務;

我們還需要修改防火牆中有關 sshd 的配置,CentOS 7 預設使用 firewalld 防火牆,我們對其做如下配置:

  • 將firewalld 關於 ssh 的預設配置文件,複製到系統配置文件夾內:

    [luizyao@centos_7_6_1810 ~]$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
  • 修改配置文件中的埠配置:

    <!-- /etc/firewalld/services/ -->
    
    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>SSH</short>
      <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
      <port protocol="tcp" port="10178"/>
    </service> 
  • 重載 firewalld 配置:

    [luizyao@centos_7_6_1810 ~]$ sudo firewall-cmd --reload
    success

禁 ping

為防火牆添加如下規則,並重載配置:

[luizyao@centos_7_6_1810 ~]$ sudo firewall-cmd --permanent --add-icmp-block=echo-reply
[luizyao@centos_7_6_1810 ~]$ sudo firewall-cmd --permanent --add-icmp-block=echo-request
[luizyao@centos_7_6_1810 ~]$ sudo firewall-cmd --reload

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 定製ubuntu-server鏡像,預置各種資料庫,工具,單機項目,用戶安裝該鏡像即可直接自動化部署項目。 ...
  • [TOC] 1. 概述 System V共用記憶體在概念上類似於Posix共用記憶體,代之以調用shm_Open後調用mmap的是,先調用shmget,再調用shmat。 對於每個System V共用記憶體,內核都維護如下的信息結構,它定義在sys/shm.h頭文件中,其中帶註釋的是我們需要關註的成員。 ...
  • [TOC] 1. 概述 System V消息隊列使用消息隊列標識符標識,和Posix消息隊列一樣,發送消息和接收消息的線程(進程)是相互獨立、互不依賴的。 對於系統中的每個消息隊列,內核維護一個定義在sys/msg.h頭文件中的結構,其中帶註釋的是我們需要關註的成員變數。 2. 消息隊列API ms ...
  • 1.電腦基礎 二進位 由於電腦運行時全補是使用二進位運行的,所以必須要學習二進位的轉換 二進位|十六進位|十進位|2的n次方 | | | 00000001|01|01|2^0 00000010|02|02|2^1 00000100|04|04|2^2 00001000|08|08|2^3 000 ...
  • 鍵入dpkg reconfigure locales ...
  • 我們在linux下配置了tomcat後發現,無法訪問除了linux(如果是虛擬機的話,宿主機子根本無法訪問tomcat),解決下吧 原因是我們的tomcat訪問需要8080埠,但是從外部訪問,我們的防火牆會攔截,而你此時又恰好沒有配置8080埠,也沒有關閉防火牆,那麼就導致這樣咯, 解決步驟: ...
  • linux上古神器thefuck, 裝機必備, 命令行輸入錯誤殺手 ...
  • 更換壁紙 ​ 在kde的桌面右鍵 配置桌面 壁紙里更換壁紙,我不能直接添加圖像並應用。我的系統在這樣操作後重啟就會發現一切都被重置了。剛剛添加的圖片也不見了。 ​ 於是,我就模範原本存在壁紙文件夾里的文件,自己創建了一個壁紙文件夾 ​ 這是原本breath壁紙文件位置 我們在wallpapers文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...