主頁 > 作業系統 > linux 用戶,組

linux 用戶,組

2020-10-02 01:48:39 作業系統

權限:

  • 所謂的權限是,由用戶啟動的行程,或者由作業系統啟動的行程,可以訪問哪些檔案,不可以訪問哪些檔案,
  • 行程太多了,不可能為每個行程定義權限對吧,所以行程的權限來自于啟動行程的用戶,
  • 用戶有哪些權限,則由此用戶啟動的行程就有哪些權限,
  • 作業系統啟動后,會啟動很多后臺行程(daemon行程),這些行程有的是由管理員(root)身份啟動的,有的是由一般用戶身份啟動的,
  • 有一種需求:不想以root身份啟動行程,若由root啟動的行程被黑客劫持,則黑客就擁有了root權限,
  • 有一種需求:不想以root身份啟動行程,那么就創建一個普通用戶,這個普通用戶的作用只是啟動行程而已,不使用她手動登錄系統,這種普通用戶就叫【系統用戶】,手動登錄系統的普通用戶就叫【登錄用戶

linux使用uid管理用戶;使用gid管理組,uid和gid是16bits的二進制數字,取值范圍從0-65535

一,用戶

用戶分類:

  • 管理員(uid:0)

  • 普通用戶(uid:1-65535)

    • 系統用戶:1-499(CentOS6);1-999(CentOS7)
    • 登錄用戶:500-60000(CentOS6);1000-60000(CentOS7)
  • 用戶名決議檔案:/etc/passwd,使用man 5 passwd查看,各個專案的意義,

    name:password:UID:GID:GECOS:directory:shell

    • name:用戶名
    • password:密碼,或者占位符,如果是【x】,則密碼在/etc/shadow中,
    • UID
    • GID:用戶所屬的主組的ID號,
    • GECOS:用戶的額外資訊,比如全名,是可選的
    • directory:用戶的家目錄
    • shell:用戶使用的shell種類
    $ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    ys:x:1000:1000:ys:/home/ys:/bin/bash
    

用戶相關命令:useradduserdelusermodpasswd

  • 添加用戶:useradd

    • 語法1:創建用戶,

      useradd [options] LOGIN

      例子1:不指定選項,直接創建用戶,

      創建了用戶a1,而且創建了一個私有組a1

      # useradd a1
      # tail -1 /etc/passwd
      a1:x:1001:1001::/home/a1:/bin/bash
      # tail -1 /etc/group
      a1:x:1001:
      
      
    • -u:指定UID.

      指定了UID,創建了用戶a2,而且創建了一個私有組a2

      # useradd -u 3000 a2
      # tail -1 /etc/passwd
      a2:x:3000:3001::/home/a2:/bin/bash
      # tail -1 /etc/group
      a2:x:3001:
      
      
    • -g:指定用戶的主組,這個組必須事先存在,不存在會報錯,

      指定主組zg4,創建用戶a3,沒有自動創建了一個私有組a3,因為已經指定了主組zg4.

      # useradd -g cloud a3
      useradd: group 'cloud' does not exist
      # tail -1 /etc/group
      zg4:x:300:
      # useradd -g zg4 a3
      # tail -1 /etc/passwd
      a3:x:3001:300::/home/a3:/bin/bash
      
    • -G:-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 指定用戶的附加組,可以多個,用逗號分隔,

      創建a5前,組zg4,zg5,a2的附加組串列是空的,使用-G并指定zg4,zg5,a2,創建用戶a5后,組zg4,zg5,a2的附加組串列里就多了用戶a5.而且創建了一個私有組a5.

      # tail /etc/group
      zg4:x:300:
      zg5:x:3000:
      a1:x:1001:
      a2:x:3001:
      # useradd -G zg4,zg5,a2 a5
      # tail /etc/group
      zg4:x:300:a5
      zg5:x:3000:a5
      a1:x:1001:
      a2:x:3001:a5
      
    • -d:指定用戶的家目錄,如果不指定則默認在/home下創建同名目錄,

      如果指定的家目錄不存在,則系統復制/etc/skel/下的所有檔案,到家目錄下,

      如果出現錯誤:useradd: cannot set SELinux context for home directory

      使用setenforce 0即可,但只在當前會話有效,若要永久有效,則編輯/etc/sysconfig/selinux

      SELINUX=disabled 即可,

      # ls -a /etc/skel/
      .  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
      # useradd -d /tmp/aa aa
      useradd: cannot set SELinux context for home directory /tmp/aa
      

      如果指定的家目錄存在,則系統不復制/etc/skel/下的檔案,到家目錄下,并提示家目錄已經存在,所以最好指定不存在的目錄,

      # ls -a /etc/skel/
      .  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
      # mkdir /tmp/abcd
      # userdel abcd
      # useradd -d /tmp/abcd abcd
      useradd: warning: the home directory already exists.
      Not copying any file from skel directory into it
      # ls -a /tmp/abcd
      .  ..
      
    • -c:指定用戶的額外資訊(GECOS)

      指定了GECOS,創建了用戶a4,而且創建了一個私有組a4

      # useradd -c yyass a4
      # tail -1 /etc/passwd
      a4:x:3002:3002:yyass:/home/a4:/bin/bash
      # tail -1 /etc/group
      a4:x:3002:
      
    • -s:指定用戶使用哪種shell,可以選擇的shell記錄在/etc/shells中,不在這個串列里的shell也可以選,但是不太安全,

      # cat /etc/shells
      /bin/sh
      /bin/bash
      /usr/bin/sh
      /usr/bin/bash
      /bin/tcsh
      /bin/csh
      
      
    • -r:創建系統用戶,

      創建了用戶fff,而且創建了一個私有組fff,注意:由于創建的是系統用戶,所以UID和GID都小于1000,

      # useradd -r fff
      # tail -1 /etc/passwd
      fff:x:986:299::/home/fff:/bin/bash
      # tail -1 /etc/group
      fff:x:299:
      
    • -m:如果用戶的家目錄不存在,創建家目錄,這個選項沒太搞懂

      # useradd -m bbb
      [root@localhost ~]# ls /home/bbb/
      [root@localhost ~]# ls -a /home/bbb/
      .  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
      
    • -M:不創建用戶的家目錄,

      # useradd -M bb
      # ls /home/bb
      ls: cannot access /home/bb: No such file or directory
      
    • -f:指定下面介紹的【password inactivity period(⑤)】,如果是0,則過期后馬上不能登錄系統;如果是-1,即使過期后,只要修改了密碼,還是可以登錄系統的,

    • 語法2:在標準輸出顯示創建用戶時,所使用的默認值,更多的默認值,存放在/etc/login.defs里,

      useradd -D

      # useradd -D
      GROUP=100
      HOME=/home
      INACTIVE=-1
      EXPIRE=
      SHELL=/bin/bash
      SKEL=/etc/skel
      CREATE_MAIL_SPOOL=yes
      
      • GROUP:?

      • HOME:家目錄

      • INACTIVE:指定下面介紹的【password inactivity period(⑤)】,如果是0,則過期后馬上不能登錄系統;如果是-1,即使過期后,只要修改了密碼,還是可以登錄系統的,

      • EXPIRE:指定下面介紹的【account expiration date(⑥)】,如果是empty,代表永不過期,

      • SHELL:shell的種類

      • SKEL:指定從哪個目錄下復制下面這些檔案,到家目錄,

        .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
        
      • CREATE_MAIL_SPOOL:是否創建信箱,yes是創建,創建的信箱放到目錄/var/spool/mail/里,

    • 語法3:修改創建用戶時,所使用的默認值,修改后的結果保存在檔案/etc/default/useradd中

      useradd -D [options]

      • -b:修改HOME
      • -e:修改EXPIRE
      • -f:修改INACTIVE
      • -g:修改GROUP
      • -s:修改SHELL
      # useradd -D -s /bin/csh
      # useradd -D
      SHELL=/bin/csh
      # cat /etc/default/useradd
      SHELL=/bin/csh
      # useradd nn
      # tail -1 /etc/passwd
      nn:x:3010:3010::/home/nn:/bin/csh
      
  • 修改用戶:usermod.

    經常使用的給用戶增加附加組,聯合使用-a和-g,

    • 語法:usermod [options] LOGIN_NAME

    • -u:修改用戶的uid為此處的值,

      # tail /etc/passwd
      bn:x:3011:3011::/home/bn:/bin/csh
      # usermod -u 4000 bn
      # tail -1 /etc/passwd
      bn:x:4000:3011::/home/bn:/bin/csh
      
    • -g:修改用戶的主組為此處的值,注意點和useradd一樣,

      # tail -1 /etc/passwd
      bn:x:4000:3011::/home/bn:/bin/csh
      # tail /etc/group
      a5:x:3003:
      # usermod -g a5 bn
      # tail -1 /etc/passwd
      bn:x:4000:3003::/home/bn:/bin/csh
      
    • -G:修改用戶附加組,會覆寫用戶原來有的附加組,不想被覆寫就和-a一起使用,

      # tail -20 /etc/group
      zg4:x:300:a5
      zg5:x:3000:a5
      a1:x:1001:
      a2:x:3001:a5
      a4:x:3002:
      # usermod -G a1,a4 a5
      # tail -20 /etc/group
      zg4:x:300:
      zg5:x:3000:
      a1:x:1001:a5
      a2:x:3001:
      a4:x:3002:a5
      

      原來用戶a5的附加組是zg4,zg5,a2,執行命令后,附加組沒覆寫了,

    • -a:和-G一起使用,給用戶添加附加組,

      # tail -20 /etc/group
      a1:x:1001:a5
      a4:x:3002:a5
      aa:x:3005:
      fff:x:299:
      # usermod -a -G aa,fff a5
      # tail -20 /etc/group
      a1:x:1001:a5
      a4:x:3002:a5
      aa:x:3005:a5
      fff:x:299:a5
      

      沒有被覆寫,是追加,

    • -c:修改用戶的額外資訊為此處的值,

      # tail -1 /etc/passwd
      bn:x:4000:3003::/home/bn:/bin/csh
      # usermod -c hello bn
      # tail -1 /etc/passwd
      bn:x:4000:3003:hello:/home/bn:/bin/csh
      
    • -d:修改用戶的家目錄為此處的值,原來家目錄里的檔案,還是放在原來那里,想把家目錄里的檔案也剪切到新的家目錄里的話,就和-m一次使用,

      # usermod -m -d /home/nn2 nn
      # ls -a /home/nn2/
      .  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
      # ls -a /home/nn/
      ls: cannot access /home/nn/: No such file or directory
      # tail -2 /etc/passwd
      nn:x:3010:3010::/home/nn2:/bin/csh
      

      /home/nn目錄下的檔案都被剪切到了/home/nn2目錄下了,并且/home/nn目錄都被自動洗掉了,

    • -m:只能和-d一起使用,把舊家目錄里的所有檔案,復制到新的家目錄,

    • -l:修改用戶名為此處的值,

      # usermod -l newnn nn
      # tail -2 /etc/passwd
      bn:x:4000:3003:hello:/home/bn2:/bin/csh
      newnn:x:3010:3010::/home/nn2:/bin/csh
      
    • -s:修改用戶的shell種類,

      # tail -2 /etc/passwd
      newnn:x:3010:3010::/home/nn2:/bin/csh
      # usermod -s /bin/bash newnn
      # tail -2 /etc/passwd
      newnn:x:3010:3010::/home/nn2:/bin/bash
      
    • -L:鎖定用戶密碼,即在用戶密碼前加一個!,

      # usermod -L newnn
      # tail -2 /etc/shadow
      newnn:!1:18247:0:99999:7:::
      # usermod -U newnn
      # tail -2 /etc/shadow
      newnn:1:18247:0:99999:7:::
      
    • -U:解鎖用戶密碼,去掉!,

  • 洗掉用戶:userdel [options] LOGIN

    • -r:洗掉用戶的同時,也洗掉用戶的家目錄,不指定此選項則保留用戶的家目錄,

二,組分類:

  • 組分類1

    • 管理員組(gid:0)

    • 普通用戶組(gid:1-65535)

      • 系統用戶組:1-499(CentOS6);1-999(CentOS7)
      • 登錄用戶組:500-60000(CentOS6);1000-60000(CentOS7)
    • 組名決議檔案:/etc/group

      group_name:password:GID:user_list

      • group_name:組名
      • password:密碼,或者占位符,如果是【x】,則密碼在/etc/shadow中,
      • GID:
      • user_list:以此組為附加組的用戶成員串列,
  • 組分類2:站在用戶角度分,一個用戶可以在多個組里,哪個組是用戶的主要組,這個組就叫用戶的主組,

    • 用戶的主組

    • 用戶的附加組

    • 可以使用id命令查看用戶的主組是什么,附加組是什么

      $ whoami
      za1
      $ id
      uid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1)
      

      gid:用戶的主組,

      主組的作用:當創建檔案后,此檔案的所屬組,是這個用戶的主組,

      groups:用戶所屬的組的集合,所以用戶的主組和附加組都在這個集合里,

      用戶自己可以從自己所屬的組里,挑出一個組,作為自己的主組,所以用戶的主組是可以隨時改變的,使用newgrp命令,切換用戶的主組,切換成功后,還可以使用exit命令退出來,主組還會變成切換前的,

  • 組分類3:站在用戶角度分

    • 私有組:組名同用戶名,且組里只有自己一個用戶
    • 公共組:組內包含了多個用戶

單項加密演算法:

  • md5:對應的命令md5sum

    # echo 11 | md5sum
    166d77ac1b46a1ec38aa35ab7e628ab5  -
    
  • sha1:對應的命令sha1sum

    # echo 11 | sha1sum
    dd71038f3463f511ee7403dbcbc87195302d891c  -
    
  • sha224:對應的命令sha224sum

  • sha256:對應的命令sha256sum

  • sha384:對應的命令sha384sum

  • sha512:對應的命令sha512sum

Linux 是如何把密碼加密的呢?

如果2個用戶的密碼恰巧一樣,而且這2個用戶都可以查看/etc/shadow檔案,如果加密后的串也相同的話,那么就能知道另一個用戶的密碼了,為了避免這種情況,linux在執行加密前,會加一些salt(亂數)在密碼里,這樣就避免了上面情況的發生,而且亂數也是放到了/etc/shadow檔案里,

密碼存放到哪里了?密碼是單向加密的,就意味著基本無法反向解密,

  • 用戶的密碼存放在:/etc/shadow,可以使用man 5 shadow查看下面各個專案的意義,

    login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

    • login name:用戶名

    • encrypted password:加密后的密碼

      • 第一個$$間的數字:代表使用的是哪個加密演算法

        1:md5;2:sha1;3:sha224;4:sha256;5:sha384;6:sha512

      • 第二個$$間的串:加的salt(亂數),

      • 第三個$$間的串:加密后,生成的串,

    • date of last password change(①):最近一次修改秘密的時間到1970年1月1號的天數,

      • 0:用于下次登錄時,必須修改密碼:
      • empty:密碼不用修改,且沒有期限,可以一直使用,
    • minimum password age(②):過了多少天后,才可以修改密碼,

      • 0或者empty:不使用minimum password age
    • maximum password age(③):過了多少天后,必須要修改密碼,

      • empty:不使用maximum password age, 不使用password warning period, 不使用password inactivity period
      • 小于minimum password age:用戶不可以修改密碼
    • password warning period(④):修改密碼的截至日期前多少天開始提醒用戶,要修改密碼了,但是在這個提醒期間內,不修改也是可以登錄系統的,

      • 0或者empty:不使用此欄位
    • password inactivity period(⑤):超過了密碼修改的截止期,多少天內,還可以修改密碼,不修改密碼就無法登錄系統,

      • empty:不使用此欄位,
    • account expiration date(⑥):從1970年1月1號開始,經過多少天后,賬戶就無法使用,

      • empty:永遠不會過期,
    • reserved field:保留欄位,目前未使用,

    • 用下圖來說明上面的日期,下圖的圈里的數字對應上面的數字,

      • 黑色?段:不可以修改密碼
      • 藍色?段:可以修改密碼
      • 紫色?段:提醒修改密碼,但不修改也可以登錄系統
      • 綠色?段:提醒修改密碼,不修改不可以登錄系統
      • 紅色?段:如果修改了密碼,則可以繼續登錄系統;如果沒有修改密碼,則無法登錄系統
      • 橙色?段:不可以登錄系統,

    # cat /etc/shadow
    root:$6$n0lH0mnbr28Igon0$KhYX3C0MjrBCP4qf7A6J4jwdP.eviqIhKGPlE4Uy4jaqkL.SzKvN39v860ckYHojGp0d260moqFPU2ugqdO8U.::0:99999:7:::
    ys:$6$XjEoNab85Vhf0ajr$kEqHY3ZiJm7nWG.fDY0mzEvdm8L2Yc4d0FEYYh8aufBrYhiDfgQqdzljNbJnK0NIK3v9gy/iM/cqMUnbhS0D71::0:99999:7:::
    
  • 組的密碼存放在:/etc/gshadow

組相關命令:groupaddgroupdelgroupmodgpasswd

  • 添加組:groupadd 默認創建登錄用戶組,

    • -g:手動指定gid,不指定的話,則由當前最大的gid加1.
    • -r:創建系統用戶組
    # groupadd zg1
    # tail -1 /etc/group
    zg1:x:1001:
    # groupadd -g 1005 zg2
    # tail -2 /etc/group
    zg1:x:1001:
    zg2:x:1005:
    # groupadd -r zg3
    # tail -2 /etc/group
    zg2:x:1005:
    zg3:x:979:
    # groupadd -r -g 300 zg4
    # tail -2 /etc/group
    zg3:x:979:
    zg4:x:300:
    
    
  • 修改組:groupmod

    • -g:修改GID
    • -n:修改組名(groupmod -n new old),修改后,里面組員的所屬組的名字也變了,
  • 洗掉組:groupdel,洗掉后里面的組員就沒有所屬組了,

    groupdel group_name

三,管理用戶(設定用戶密碼,修改用戶密碼的各種時間屬性)

  • 語法:

    passwd [-k][-l] [-u [-f]][-d] [-e][-n mindays] [-x maxdays] [-w warndays] [-i inactivedays][-S] [--stdin][username]

  • 修改自己的密碼:不指定任何選項 passwd

  • 管理員修改用戶密碼:passwd user

  • 讓用戶無法登錄:-l

    # passwd -l za1
    Locking password for user za1.
    passwd: Success
    
  • 解鎖用戶:-u

    # passwd -u za1
    Unlocking password for user za1.
    passwd: Warning: unlocked password would be empty.
    passwd: Unsafe operation (use -f to force)
    # passwd -fu za1
    Unlocking password for user za1.
    passwd: Success
    
  • 洗掉用戶的密碼:-d

    洗掉后,用戶登錄系統時,不需要輸入密碼,

  • 強迫用戶下次登錄必須修改密碼:-e

    把【date of last password change(①)】修改成了0,也就是下次登錄系統時,必須修改密碼,

    -e后面不能輸入數字,

    # tail -1 /etc/shadow
    za1::18247:10:60:7:::
    # passwd -e za1
    Expiring password for user za1.
    passwd: Success
    # tail -1 /etc/shadow
    za1::0:10:60:7:::
    
  • 修改用戶密碼的【minimum password age(②)】:-n

    # tail -1 /etc/shadow
    za1::18247:0:99999:7:::
    # passwd -n 10 za1
    Adjusting aging data for user za1.
    passwd: Success
    # tail -1 /etc/shadow
    za1::18247:10:99999:7:::
    
  • 修改用戶密碼的【maximum password age(③)】:-x

    # tail -1 /etc/shadow
    za1::18247:10:99999:7:::
    # passwd -x 60 za1
    Adjusting aging data for user za1.
    passwd: Success
    # tail -1 /etc/shadow
    za1::18247:10:60:7:::
    
  • 修改用戶密碼的【password warning period(④)】:-w

    # tail -1 /etc/shadow
    za1::0:10:60:7:::
    # passwd -w 5 za1
    Adjusting aging data for user za1.
    passwd: Success
    # tail -1 /etc/shadow
    za1::0:10:60:5:::
    
  • 修改用戶密碼的【password inactivity period】:-i

    # tail -1 /etc/shadow
    za1::0:10:60:5:::
    # passwd -i 8 za1
    Adjusting aging data for user za1.
    passwd: Success
    # tail -1 /etc/shadow
    za1::0:10:60:5:8::
    
  • 重定向修改密碼,在shell腳本編程里使用:--stdin

    # tail -1 /etc/shadow
    za1::0:10:60:5:8::
    # echo "1" | passwd --stdin za1 &> /dev/null
    # echo $?
    0
    # tail -1 /etc/shadow
    za1:$6$LiKVjDZv$7AGTfLBLiqd48.YC0VglXmCyHfJ5mcCBRtFAtexfEljcjmNWjKdoPQSxFdiFoDyj5BdDBkTdFrR3cPTuSA5F50:18247:10:60:5:8::
    
    
  • 備胎命令chage - change user password expiry information,和passwd差不多,

四,管理組(設定組密碼;添加用戶到組;從組洗掉用戶)

  • gpasswd

    • 語法:gpasswd [option] group

    • 修改組的密碼:不使用選項

      # gpasswd zg1
      Changing the password for group zg1
      New Password:
      Re-enter new password:
      # tail -1 /etc/gshadow
      zg1:$6$P1Ks//MQ.8$48kY7GOxXxlegd14K3ssR038lt7O6XVnPP1b7emXk8S0r5y4FRHGR9OJDRTQiClH0qvFaikNBmRDYY5IBwDEO0::za1
      

      為什么要給組設定密碼?防止用戶隨意使用newgrp命令切換自己的主組,

      假設用戶要用newgrp把自己的主組切換成zg1,如果此用戶的附加組里有zg1,則不需要輸入組zg1的密碼;如果此用戶的附加組里沒有zg1,則需要輸入組zg1的密碼,

      下面的例子,用戶za2的所屬組里沒有zg1,所以切換到zg1時,必須輸入zg1的密碼,然后創建檔案t2,檔案t2的所屬組就變成了zg1.使用exit退出后,za2的主組又變回了za2.

      # tail -1 /etc/passwd
      za2:x:1002:1003::/home/za2:/bin/bash
      # su za2
      $ id
      uid=1002(za2) gid=1003(za2) groups=1003(za2)
      $ touch t1
      $ ll
      total 0
      -rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1
      $ newgrp zg1
      Password:
      $ id
      uid=1002(za2) gid=1002(zg1) groups=1002(zg1),1003(za2)
      $ touch t2
      $ ll
      total 0
      -rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1
      -rw-r--r--. 1 za2 zg1 0 Dec 17 14:31 t2
      $ exit
      exit
      $ whoami
      za2
      $ id
      uid=1002(za2) gid=1003(za2) groups=1003(za2)
      

      下面的例子,用戶za1的所屬組里有zg1,所以把自己的主組切換到zg1時,不需要輸入密碼,

      $ whoami
      za1
      $ id
      uid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1) 
      $ newgrp zg1
      $ id
      uid=1001(za1) gid=1002(zg1) groups=1002(zg1),1001(za1)
      
      • 臨時切換用戶的主組:newgrp - group

        加上橫線:模擬用戶重新登錄系統,以事先重新初始化作業環境,

    • 向組里添加用戶:-a username

      # tail -2 /etc/group
      zg1:x:1002:za1
      # gpasswd -a za2 zg1
      Adding user za2 to group zg1
      # tail -2 /etc/group
      zg1:x:1002:za1,za2
      
    • 從組里洗掉用戶:-d username

      # tail -2 /etc/group
      zg1:x:1002:za1,za2
      # gpasswd -d za2 zg1
      Removing user za2 from group zg1
      # tail -2 /etc/group
      zg1:x:1002:za1
      

五,顯示用戶屬于哪些組id

  • 語法:id [OPTION]... [USER]

    不輸入USER就顯示當前用戶屬于哪些組

    • 只顯示UID:-u
    • 只顯示GID:-g
    • 只顯示用戶屬于的所有組:-G
    • 顯示名字而非id,配合-u,-g,-G使用:-n

六,切換用戶su

  • 登錄式切換:模擬用戶登錄,初始化目標用戶的作業環境,比如直接進入目標用戶的家目錄,

    • su - username
    • su -l username
  • 非登錄式切換:模擬用戶登錄,所以導致沒有初始化目標用戶的作業環境,所以就不能直接進入到目標用戶的家目錄,

    • su usernme
  • 管理員可以無密碼切換到其他用戶,

  • 最好使用登錄式切換,

  • 切換用戶后只是執行一個命令,然后再切換回來:su - username -c command

    # whoami
    root
    [root@localhost ~]# su - ys -c "ls -lrt"
    total 0
    drwxr-xr-x. 2 ys ys  6 Nov 29 17:08 Downloads
    # whoami
    root
    
    

七,一些不重要的管理員命令

  • finger和chfn

    finger username:查看user的真名,手機,辦公室等資訊,

    chfn username:修改user的真名,手機,辦公室等資訊,

    # finger za1
    Login: za1                              Name:
    Directory: /home/za1                    Shell: /bin/bash
    Last login Tue Dec 17 15:23 (CST) on pts/1
    No mail.
    No Plan.
    # chfn za1
    Changing finger information for za1.
    Name []: abc
    Office []: off
    Office Phone []: 132
    Home Phone []: 234
    
    Finger information changed.
    # finger za1
    Login: za1                              Name: abc
    Directory: /home/za1                    Shell: /bin/bash
    Office: off, 132                        Home Phone: 234
    Last login Tue Dec 17 15:23 (CST) on pts/1
    No mail.
    No Plan.
    
  • 修改用戶的shell種類chsh -s shell username

    # chsh -s /bin/csh za1
    Changing shell for za1.
    Shell changed.
    
  • 檢查用戶密碼是否健康:pwck

  • 檢查組密碼是否健康:grpck

八,sudo簡介

sudo簡介

背景:root用戶是有所有權限的,所有使用root用戶登錄,去操作時,難免會發生意外,洗掉了重要的檔案,為了避免,一般不使用root用戶登錄,而是使用一般用戶,但是一般用戶又沒有權限使用root用戶的命令,所以有了sudo機制,

目的:讓普通用戶可以執行某些管理員才可以執行的命令,但不是全部,

組態檔:/etc/sudoers

用戶名A      主機串列A=(用戶串列A)       命令串列A
  • 用戶名A:允許用戶A
  • 主機串列A:從哪些ip地址
  • 用戶串列A:以哪些用戶的身份
  • 命令串列A:允許哪些命令

下面的root用戶的設定:

允許root用戶,從任何主機,以任何用戶的身份,運行任何命令,

root    ALL=(ALL)       ALL

例子:允許userA用戶,從192.168.55.2主機,以root用戶的身份,運行/sbin/useradd, /sbin/userdel命令,

userA    192.168.55.2=(root)       /sbin/useradd, /sbin/userdel

例子:允許userB用戶,從任何主機,以任何用戶的身份,運行任何命令,

userB基本和root差不多了,

userB    ALL=(ALL)       ALL

使用方法:

$ sudo COMMAND

注意事項:

使用sudo command后,會提示輸入當前用戶的密碼,為了下次sudo不再讓用戶輸入密碼,密碼保留5分鐘,5分鐘后,再sudo command,還是提示輸入當前用戶的密碼,

常用選項:

-k:強制下次sudo輸入密碼,即使在5分鐘內

-l:顯示當前用戶可以執行哪些管理員的命令

[aa@localhost ~]$ sudo -l
[sudo] password for aa:
Matching Defaults entries for aa on localhost:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User aa may run the following commands on localhost:
    (ALL) /sbin/useradd

九,練習

1,新建系統組mysql,新建系統用戶mysql,屬于mysql組,沒有家目錄,且shell為/sbin/nologin,嘗試切換至用戶,查看其命令提示符,

# groupadd -r mysql
# tail -1 /etc/group
mysql:x:979:
# useradd -g mysql -M -s /sbin/nologin mysql
# tail -1 /etc/passwd
mysql:x:1003:979::/home/mysql:/sbin/nologin
# id mysql
uid=1003(mysql) gid=979(mysql) groups=979(mysql)
# su - mysql
su: warning: cannot change directory to /home/mysql: No such file or directory
This account is currently not available.
# su mysql
This account is currently not available.

2,新建gid為5000的組mageedu,新建用戶gentoo,要求其家目錄為/tmp/gentoo,密碼同用戶名,

# groupadd -g 5000 mageedu
# tail -1 /etc/group
mageedu:x:5000:
# useradd -d /tmp/gentoo gentoo
# tail -1 /etc/passwd
gentoo:x:1004:1004::/tmp/gentoo:/bin/bash
# passwd gentoo
Changing password for user gentoo.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# tail -1 /etc/shadow
gentoo:$6$HuCz01P5$65qUu5ONTZPKkhHWQJbnTR6jtJDeL3KqY.3mgO2BDpqNoSMlaWasoMSYhBhe6i6EBOstgLRAdNChOErp0PUe0/:18248:0:99999:7:::
# ls -a /tmp/gentoo/
.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla

3,新建用戶fedora,其家目錄/tmp/fedora,密碼同用戶

# useradd -d /tmp/fedora fedora
# tail -1 /etc/passwd
fedora:x:1005:1005::/tmp/fedora:/bin/bash
# ls -a /tmp/fedora/
.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
# passwd fedora
Changing password for user fedora.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# tail -1 /etc/shadow
fedora:$6$32gvhWr5$xMk9xO.QUNEC9h7G71DWsD44Bng8TqqcxagzfD4lj6VrcHLFsA6OQppvDTHwHnO2ANfkNtByW4oGFMqmpMo0M1:18248:0:99999:7:::

4,新建用戶www,家目錄/tmp/www;洗掉用戶www,但保留其家目錄,

# useradd -d /tmp/www www
# tail -1 /etc/passwd
www:x:1006:1006::/tmp/www:/bin/bash
# ls -a /tmp/www
.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
# userdel www
# ls -a /tmp/www
.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
# id www
id: www: no such user

5,把用戶gentoo和fedora加到組mageedu里,

# gpasswd -a gentoo mageedu
Adding user gentoo to group mageedu
# gpasswd -a fedora mageedu
Adding user fedora to group mageedu
# id gentoo
uid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),5000(mageedu)
# id fedora
uid=1005(fedora) gid=1005(fedora) groups=1005(fedora),5000(mageedu)

6,復制目錄/var/log到/tmp目錄,修改/tmp/log及其內部的所有檔案及子目錄的屬組為mageedu,并讓屬組有寫權限,

# cp -r /var/log/ /tmp/
# ll -d /tmp/log/
drwxr-xr-x. 21 root root 4096 Dec 18 10:44 /tmp/log/
# ll /tmp/log/
drwxr-xr-x. 2 root root      176 Dec 18 10:44 anaconda
drwx------. 2 root root       80 Dec 18 10:44 audit
-rw-------. 1 root root        0 Dec 18 10:44 boot.log
-rw-------. 1 root root    48266 Dec 18 10:44 boot.log-20191211
# chown -R :mageedu /tmp/log/
# ll -d /tmp/log
drwxr-xr-x. 21 root mageedu 4096 Dec 18 10:44 /tmp/log
# ll /tmp/log
drwxr-xr-x. 2 root mageedu      176 Dec 18 10:44 anaconda
drwx------. 2 root mageedu       80 Dec 18 10:44 audit
-rw-------. 1 root mageedu        0 Dec 18 10:44 boot.log
-rw-------. 1 root mageedu    48266 Dec 18 10:44 boot.log-20191211
# chmod -R g+w /tmp/log/
# ll -d /tmp/log
drwxrwxr-x. 21 root mageedu 4096 Dec 18 10:44 /tmp/log
# ll /tmp/log
drwxrwxr-x. 2 root mageedu      176 Dec 18 10:44 anaconda
drwx-w----. 2 root mageedu       80 Dec 18 10:44 audit
-rw--w----. 1 root mageedu        0 Dec 18 10:44 boot.log
-rw--w----. 1 root mageedu    48266 Dec 18 10:44 boot.log-20191211

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/146881.html

標籤:Linux

上一篇:inux 資源監控分析-pidstat

下一篇:當前互聯網已經分配的埠和服務

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more