許可權: 所謂的許可權是,由用戶啟動的進程,或者由操作系統啟動的進程,可以訪問哪些文件,不可以訪問哪些文件。 進程太多了,不可能為每個進程定義許可權對吧,所以進程的許可權來自於啟動進程的用戶。 用戶有哪些許可權,則由此用戶啟動的進程就有哪些許可權。 操作系統啟動後,會啟動很多後臺進程(daemon進程),這些進 ...
許可權:
- 所謂的許可權是,由用戶啟動的進程,或者由操作系統啟動的進程,可以訪問哪些文件,不可以訪問哪些文件。
- 進程太多了,不可能為每個進程定義許可權對吧,所以進程的許可權來自於啟動進程的用戶。
- 用戶有哪些許可權,則由此用戶啟動的進程就有哪些許可權。
- 操作系統啟動後,會啟動很多後臺進程(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
用戶相關命令:useradd
,userdel
,usermod
,passwd
添加用戶:
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/selinuxSELINUX=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
組相關命令:groupadd
,groupdel
,groupmod
,gpasswd
添加組:
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
八,練習
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