Linux shell 整理之 用戶權限篇(三)

前置參考文章

Linux shell 整理之 基本概念篇(一)

Linux shell 整理之 基本概念篇(二)

Linux shell 整理之 用戶權限篇(三)

用戶管理

核心文件 /etc/passwd

homewell:~/shell1$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

以冒號(:)分割,看起來不太方便,我們以\t作爲分隔符來查看

  1. 方式一
homewell:~/shell1$ cat /etc/passwd | sed  's/\:/\t/g'
root	x	0	0	root	/root	/bin/bash
daemon	x	1	1	daemon	/usr/sbin	/usr/sbin/nologin
bin	x	2	2	bin	/bin	/usr/sbin/nologin
sys	x	3	3	sys	/dev	/usr/sbin/nologin
sync	x	4	65534	sync	/bin	/bin/sync
games	x	5	60	games	/usr/games	/usr/sbin/nologin
man	x	6	12	man	/var/cache/man	/usr/sbin/nologin
lp	x	7	7	lp	/var/spool/lpd	/usr/sbin/nologin
mail	x	8	8	mail	/var/mail	/usr/sbin/nologin
news	x	9	9	news	/var/spool/news	/usr/sbin/nologin
uucp	x	10	10	uucp	/var/spool/uucp	/usr/sbin/nologin

  1. 方式二
homewell:~/shell1$ sudo awk -v FS=':'  '{print "1)"$1,"\t","2)"$2,"\t","3)"$3,"\t","4)"$4,"\t","5)"$5,"\t","6)"$6,"\t","7)"$7}' /etc/passwd
1)root 	 2)x 	 3)0 	 4)0 	 5)root 	 6)/root 	 7)/bin/bash
1)daemon 	 2)x 	 3)1 	 4)1 	 5)daemon 	 6)/usr/sbin 	 7)/usr/sbin/nologin
1)bin 	 2)x 	 3)2 	 4)2 	 5)bin 	 6)/bin 	 7)/usr/sbin/nologin
1)sys 	 2)x 	 3)3 	 4)3 	 5)sys 	 6)/dev 	 7)/usr/sbin/nologin
1)sync 	 2)x 	 3)4 	 4)65534 	 5)sync 	 6)/bin 	 7)/bin/sync
1)games 	 2)x 	 3)5 	 4)60 	 5)games 	 6)/usr/games 	 7)/usr/sbin/nologin
1)man 	 2)x 	 3)6 	 4)12 	 5)man 	 6)/var/cache/man 	 7)/usr/sbin/nologin
1)lp 	 2)x 	 3)7 	 4)7 	 5)lp 	 6)/var/spool/lpd 	 7)/usr/sbin/nologin
1)mail 	 2)x 	 3)8 	 4)8 	 5)mail 	 6)/var/mail 	 7)/usr/sbin/nologin

可以看到共有7列

  1. 用戶名
  2. 密碼 用 x來標記,在很老的版本中是以明文方式存儲的,此時只是一個標記,真正的密碼存儲在 /etc/shadow ,裏面的密碼是以加密的方式存儲,加密算法有興趣可以看 淺談常見的七種加密算法及實現 。同時/etc/shadow還包括,設置用戶密碼有效期,比如 用戶創建起多少天之內可以修改密碼多少天之後必須修改密碼多少天之後失效在失效前多少天通知用戶失效用戶多少天之後禁用用戶
  3. 用戶的UID,系統分配給用戶的唯一標誌
  4. 用戶所屬的組GID
  5. 備註字段,一般與用戶名相同
  6. 用戶的HOME目錄
  7. 以當前用戶登陸的shell模式下,默認啓動的shell,比如root用戶默認啓動/bin/bash , mail 用戶是以 /usr/sbin/nologin方式登陸的

useradd 發生了什麼

其中會默認在創建用戶的時候
把/etc/skel/中的目錄作爲新用戶的起始文件

如果useradd某個設置經常被改動
useradd -D 

表7-2 useradd更改默認值的參數 參 數 描 述

-b default_home 更改默認的創建用戶HOME目錄的位置

-e expiration_date 更改默認的新賬戶的過期日期

-f inactive 更改默認的新用戶從密碼過期到賬戶被禁用的天數

-g group 更改默認的組名稱或GID

-s shell 更改默認的登錄shell

孿生兄弟adduser

adduser 類似於useradd,它會自動給用戶添加用戶目錄(home),分離用戶操作,只在自己的工作空間工作
當出現在有些系統沒有useradd命令,但是隻有adduser命令的時候又想要自動化創建用戶,如下兩個方法非常不錯,可以推薦使用

1使用命令方式創建用戶
# adduser user01 << EOF
userpassword
userpassword
EOF
2使用重定向符定號創建用戶
查看password文件
# cat password
userpassword
userpassword
文件內容設置用戶賬戶和密碼
# adduser user01 < password

重定向內容可以看[Linux shell 整理之 複合命令行篇(四)][4]

userdel

默認會刪除/etc/passwd中的用戶信息
但是不會刪除home目錄

userdel -r $user
可以刪除home目錄

usermod

會修改/etc/passwd中絕大多數參數

- l 修改用戶名
- p 修改密碼
-LU -L LOCK -U --UNLOCK

批量修改密碼

$ cat user.txt
user1:password1
user2:password2
$ chpasswd <- user.txt

用戶組

組的出現是爲了共享數據使用,也就是給屬於同一組的用戶提供共享數據的基礎

核心文件/etc/group

$ cat /etc/group

mongodb:x:131:mongodb
docker:x:132:homewell
zhangll:x:1002:
admin:x:1003:
jupyterhub:x:1006:homewell,zhangll03,zhangll09,zhangll009,a524631266,user1,user2,user3,newhomewell,homewell22

y組名 組密碼 GID 用戶列表

冷門知識 沒有用戶組列表並不是表示沒有用戶了,而是在第一次生成用戶的時候(/etc/passwd文件中指定某個組作爲默認組),並不會把用戶放入指定的組內(/ect/group)

同用戶(UID)一樣,每個組都有一個GID

GID值

  1. 低於500 爲系統用戶
  2. 高於500 爲普通用戶

####修改/ect/group文件
不要直接修改!!!!

  1. 通過 usermod修改
# usermod --help
Usage: usermod [options](選擇項) LOGIN(用戶名)
 

# usermod -G groupname username


  1. groupmod 無法修改用戶組列表

只能改前三相 用戶組名 密碼 GID

\# groupmod -n abc zhangll
\# groupmod -g 111 zhangll
  1. 給用戶組添加用戶表
sudo gpasswd -a $USER docker     #將登陸用戶加入到docker用戶組中
# 在當前用戶中更新用戶組
newgrp docker

UMASK 水印

在ubuntu中 /etc/login.defs

$ cat /etc/login.defs | grep UMASK
#	UMASK		Default "umask" value.
# UMASK is the default umask value for pam_umask and is used by
# 022 is the "historical" value in Debian for UMASK
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
UMASK		022

有些是在 /etc/profile 中

水印的意思是
在把umask值設成026後,文件類型的默認權限-umask則爲生成的文件類型的默認權限

  1. 默認的新創建的文件(-)權限變成了 666 - 026 = 640

  2. 默認文件目錄(d)爲 777 - 026 = 751

文件目錄的x權限代表用戶是否可進入文件夾(相當於文件的執行)的意思,而文件是沒有進入的說法,只有可讀可寫可執行的說法

hadoop:~$ umask 026
hadoop:~$ umask
0026
hadoop:~$ mkdir abc
hadoop:~$ touch abc.txt
hadoop:~$ ll | grep abc
drwxr-x--x  2 hadoop hadoop      4096 9月  27 10:39 abc/
-rw-r-----  1 hadoop hadoop         0 9月  27 10:39 abc.txt

修改文件類型權限

# chmod 777 abc
# chmod
    [gou] [+-=] [wrxs]

S 共享權限(!!!!)


homewell:~$ sudo groupadd share
homewell:~$ sudo usermod -aG share $USER
homewell:~$ sudo usermod -aG share hadoop


hadoop:~$ mkdir shareh
hadoop:~$ ll | grep shareh
drwxr-x--x  2 hadoop hadoop      4096 9月  27 11:15 shareh/
hadoop:~$ chown hadoop.share shareh/
chown: changing ownership of 'shareh/': Operation not permitted
hadoop:~$ ll | grep shareh
drwxr-x--x  2 hadoop share       4096 9月  27 11:15 shareh/
hadoop:~/shareh$ mkdir abc
hadoop:~/shareh$ ll
total 12
drwxr-x--x  3 hadoop share  4096 9月  27 11:18 ./
drwxrwxr-x 39 hadoop hadoop 4096 9月  27 11:15 ../
drwxr-x--x  2 hadoop hadoop 4096 9月  27 11:18 abc/
 用戶默認的組還是hadoop 強制改成同父目錄一致的

hadoop:~/shareh$ chmod g+s shareh

hadoop:~$ ll | grep shareh/
drwxr-s--x  3 hadoop share       4096 9月  27 11:18 shareh/
hadoop:~$ cd shareh/
hadoop:~/shareh$ mkdir abcd
hadoop:~/shareh$ ll
total 16
drwxr-s--x  4 hadoop share  4096 9月  27 11:20 ./
drwxrwxr-x 39 hadoop hadoop 4096 9月  27 11:15 ../
drwxr-x--x  2 hadoop hadoop 4096 9月  27 11:18 abc/
drwxr-s--x  2 hadoop share  4096 9月  27 11:20 abcd/

suid 設置跨越權限的執行命令

當你遇到 su: must be suid to work properly 這樣的提示的時候,其實表明了,當前用戶在使用指定命令(這裏是su命令,用來切換用戶),但是發現沒有suid這樣的設置
suid 是什麼? set owner user id up on exection,也就是設置用戶的id,以保證能獲取執行權,(也可翻譯爲建立在執行權之上的用戶)

su的命令位置
# which su
/bin/su
發現/bin/su被軟連接到/bin/busybox,真正執行的是/bin/busybox
# ls -l /bin/su 
lrwxrwxrwx    1 root     root            12 May  9  2019 /bin/su -> /bin/busybox
# ls -l /bin/busybox
-rwxr-xr-x    1 root     root        796240 Jan 24  2019 /bin/busybox


對/bin/su的root用戶設置suid,使得其他用戶在能夠執行的情況下被上升到root用戶的權限
所以other必須擁有x的權限
# chmod u+s /bin/su
# ls -l /bin/su
lrwxrwxrwx    1 root     root            12 May  9  2019 /bin/su -> /bin/busybox
然而發現這樣的設置並不奏效,rwx仍然是rwx
但是真正執行的/bin/busybox
# ls -l /bin/busybox 
-rwsr-xr-x    1 root     root        796240 Jan 24  2019 /bin/busybox
ke可以到 user的rwx ==》 rws
這裏代表的意思就是 other 用戶在使用su命令的時候會臨時提升權限爲root的權限,並進行相關的操作

XXX is not in the sudoers file

在用戶輸入sudo命令的時候無法執行root相關的命令 說明用戶不再sudoers文件中,因此要找到sudoers文件,並寫入相關的

# chmod a+w /etc/sudoers
# vi /etc/sudoers
添加如下代碼
XXX ALL=(ALL) ALL
# chmod a-w /etc/sudoers

用戶能夠使用sudo方式暫時獲取root用戶的權限執行命令
[4]:https://blog.csdn.net/u012491646/article/details/102463463 “Linux shell 整理之 複合命令行篇(四)”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章