Ubuntu all in one

| 分类 PIECE  | 标签 linux  ubuntu 

Environment

Item Description
OS Ubuntu 22.04.3 LTS
kernel 5.15.0-91-generic
   

SSH

延长 ssh 超时时间

编辑 /etc/ssh/sshd_config,加入如下两行:

ClientAliveInterval 540		# 消息的时间间隔,单位是秒
ClientAliveCountMax 10		# 如果发现客户端没有相应,则判断一次超时,这个参数设置允许超时的次数。

设置通过密钥登陆

切换到需要使用密钥登陆的账户,输入命令:

ssh-keygen		# 生成秘钥,默认位置在 /home/{user}/.ssh/ 目录下,其中 id_rsa 为私钥,id_rsa.pub 为公钥。
cd ~/.ssh
cat id_rsa.pub >> authorized_keys		# 安装公钥
chmod 600 authorized_keys		# 设置文件权限
chmod 700 ~/.ssh		# 一般不用设置,就是700

配置 ssh 服务

sudo vim /etc/ssh/sshd_config		# 编辑 /etc/ssh/sshd_config 文件
# 将如下两行的 no 改成 yes
RSAAuthentication yes
PubkeyAuthentication yes
# 注意如下两个的设置
PermitRootLogin yes		# 是否允许 root 用户登录
PasswordAuthentication no		# 禁用密码登录
# 重启 ssh 服务
service sshd restart

下载私钥 id_rsa 到本地。

在 ~/.ssh 目录下创建 config 文件,并进行如下配置

Host abc
  HostName 192.168.31.1
  User timer
  Port 5320
  IdentityFile ~\.ssh\def

使用如下命令连接服务器:ssh abc

Google Authenticator 两步验证

  1. 安装 Google Authenticator

    $ sudo apt install libpam-google-authenticator
    
  2. 安装完成之后修改文件 /etc/pam.d/sshd,在此文件末尾添加

    auth required pam_google_authenticator.so
    

    如果你希望没有开启两部验证的账号还可以登录,则在此文件后面添加

    auth required pam_google_authenticator.so nullok
    
  3. 修改 ssh 配置文件 /etc/ssh/sshd

    # 修改这一行:
    ChallengeResponseAuthentication no
    # 为:
    ChallengeResponseAuthentication yes
    
  4. 重启 sshd 服务

    sudo systemctl restart sshd.service
    
  5. 接下来我们就可以通过

    $ google-authenticator
    

    来生成一个二维码和密匙,全部选择:yes。

用户与权限

创建与查看用户、修改密码、指定主目录与 shell

创建用户有两种方式:(adduser、useradd)

  • adduser:默认情况下 adduser 在创建用户时会主动调用 /etc/adduser.conf;在创建用户主目录时默认在 /home 下,而且创建为 /home/用户名。为用户指定 shell 版本为:/bin/bash。常用参数如下:
    • -home: 指定创建主目录的路径,默认是在 /home 目录下创建用户名同名的目录,这里可以指定;如果主目录同名目录存在,则不再创建,仅在登录时进入主目录。
    • -conf: 在创建用户时使用指定的 configuration 文件。
    • -force-badname: 默认在创建用户时会进行 /etc/adduser.conf 中的正则表达式检查用户名是否合法,如果想使用弱检查,则使用这个选项,如果不想检查,可以将 /etc/adduser.conf 中相关选项屏蔽。
  • useradd:需要使用参数选项指定主目录、系统shell版本、密码等,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。常用参数如下:
    • -d: 指定用户的主目录
    • -m: 如果存在不再创建,但是此目录并不属于新创建用户;如果主目录不存在,则强制创建;-m 和 -d 一块使用。
    • -s: 指定用户登录时的 shell 版本
    • -M: 不创建主目录
################## adduser 命令创建用户 ##################
# 使用 adduser 创建用户
$ adduser vincen

################## useradd 命令创建用户 ##################
# 使用 useradd 创建用户
$ useradd -d "/home/vincen" -m -s "/bin/bash" vincen
# 为用户指定用户主目录
$ usermod -d /home/vincen vincen
# 为用户指定命令解释程序
$ usermod -s /bin/bash vincen
# 修改用户密码
$ passwd vincen
# 查看系统有哪些用户
$ cat /etc/passwd

删除用户

################## deluser 命令删除用户 ##################
# 只删除用户
$ sudo deluser vincen
# 连同用户的主目录和邮箱一起删除
$ sudo deluser --remove-home vincen
#连同用户拥有的所有文件删除
$ sudo deluser --remove-all-files vincen
################## userdel 命令删除用户 ##################
# 只删除用户
$ sudo userdel vincen
# 连同用户主目录一起删除
$ sudo derlser -r vincen 

赋予用户 root 权限

赋予用户 root 权限,即用户可以使用 sudo 命令。sudo 命令的执行流程是:当前用户转换到 root, 然后以 root 身份执行命令,执行完成后,直接退回到当前用户。

  1. 先给 sudoers 文件添加修改的权限,chmod u+w /etc/sudoers
  2. 编辑 sudoers 文件,在 root ALL=(ALL) ALL 下面,添加 username ALL=(ALL) ALL

/etc/sudoers 文件的格式

通过 cat /etc/sudoers 指令来查看该文件,会看到如下几行代码:

root   ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo  ALL=(ALL:ALL) ALL

/etc/sudoers 文件进行编辑的代码公式可以概括为:

# 凡是 [ ] 中的内容, 都能省略,命令和命令之间用 , 号分隔。
授权用户/组 主机=[(切换到哪些用户:组)] [是否需要输入密码验证] 命令1,命令2,...
字段1      字段2=[(字段3)]           [字段4]             字段5

说明:

  1. 字段1 不以 % 开头的表示“将要授权的用户”,比如例子中的 root 。以 % 开头的表示“将要授权的组”,比如例子中的 %admin%sudo

  2. 字段2 表示允许登录的主机,ALL 表示所有。如果该字段不为 ALL,表示授权用户只能在某些机器上登录本服务器来执行 sudo 命令。比如:

    jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown
    

    表示:普通用户 jack 在主机 mycomputer 上,可以通过 sudo 执行 reboot 和 shutdown 两个命令。

  3. 字段3 如果省略,表示切换到 root 用户,如果为ALL,表示能够切换到任何用户。例子中的 (ALL:ALL) 是允许任何 (用户:组) 的意思。请注意,字段3 如果没省略,必须使用 ( ) 双括号包含起来。

  4. 字段4 的可能取值是 NOPASSWD:请注意有双引号。表示执行 sudo 时可以不需要输入密码。比如:

    lucy ALL=(ALL) NOPASSWD: /bin/chown,/usr/sbin/useradd
    

    表示: 用户 lucy 在任何主机上,通过 sudo 命令执行 /bin/chown,并且不需要输入密码。但运行 /usr/sbin/useradd 命令时需要密码。

    这是因为 NOPASSWD: 只影响了其后的第一个命令。

  5. 字段5 是使用逗号分开一系列命令,这些命令就是授权给用户的操作,ALL 表示允许所有操作。

    1. 命令都是使用绝对路径。这是为了避免目录下有同名命令被执行,从而造成安全隐患。

      # 错误示例
      lucy ALL=(ALL) chown,chmod,useradd
      

      如上,那么用户就有可能创建一个他自己的脚本,也命名为 userad,然后放在它的本地路径中,如此一来他就能够使用 root 来执行这个名为 “useradd” 的本地脚本。这是相当危险的!

    2. 通配符和取消命令。

      # 用户 papi 能够运行所有程序,但是不能运行 passwd。
      # 注意:一旦赋权 passwd,用户可以修改 root 密码。
      papi ALL=ALL,!/usr/bin/passwd
      # 用户 jack 能够运行所有程序,也能修改所有人的密码,但是不能修改 root 账户的密码。
      jack ALL=ALL,!/usr/bin/passwd root
      # 用户 lucy 能够运行目录 /usr/sbin 和 /sbin 下所有的程序,但 fdisk 除外。
      lucy ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
      

其他

  1. 在具有 sudo 操作的用户下, 执行 sudo -l 可以查看到该用户允许和禁止运行的命令。
  2. sudo -u 用户名 command 允许使用特定用户来执行后面 command,只是大多数时候都是以 root 身份来执行,所以使用 sudo command 即可,省略 -u 选项。

推荐做法

不是直接修改 /etc/sudoers 文件,而是将修改写在 /etc/sudoers.d/ 目录下的文件中。

任何在 /etc/sudoers.d/ 目录下,不以 ~ 结尾的文件和不包含 . 的文件,都会被解析成 /etc/sudoers 的内容。

如果使用这种方式修改 sudoers,需要在 /etc/sudoers 文件的最后行,加上如下语句(默认已有):

#includedir /etc/sudoers.d

注意,这里的指令 #includedir 是一个整体,前面的 # 不能丢,也不能在 # 后有空格。

并且,尽可能使用 visudo 来编辑 sudoers,因为有相关的错误识别机制。

apt

# 更新源
$ sudo apt update
# 查看可以更新的软件包
$ sudo apt list --upgradable
# 更新软件包
$ sudo apt upgrade
# 搜索软件包
$ apt search 包名
# 安装软件包
$ sudo apt install 包名

系统信息

版本信息

# Linux 内核版本
$ uname -a
# Linux 内核版本,gcc 版本,和发行版版本
$ cat /proc/version
# 发行版版本,代号
$ lsb_release -a
# 发行版版本
$ cat /etc/issue

修改主机名

主机名存放在 /etc/hostname 文件中,在文件中输入新的主机名并保存该文件即可。重启系统后生效。


上一篇     下一篇