歡迎您光臨本站 註冊首頁

linux03-用戶與組

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

linux 目錄結構介紹

[root@station221 ~]# ls /
bin etc lost found mnt opt sbin srv tmp
boot home media net proc selinux sys usr
dev lib misc notes root share tftpboot var

/bin 存放的是系統可執行的二進位文件,簡單理解為命令
/sbin 系統管理員可執行的二進位文件
/etc 存放的是配置文件
lost found 分區下才會有這個目錄,存放系統出錯時遺失的碎片文件
/mnt 默認的掛載目錄(mount)
/media 默認掛載media的目錄
/misc 默認掛載目錄
/opt 擴展軟體包
/tmp 存放臨時文件的目錄
/boot 存放引導鏡象的目錄
initrd-2.6.18-164.el5.img vmlinuz-2.6.18-164.el5
/home 用戶家目錄
管理員的家目錄為/root
/proc 虛擬目錄(偽文件系統) ,它記錄的是當前系統的各種動態信息和狀態
/selinux 高級安全管理
vim /etc/selinux/config
SELINUX=disabled
保存后,需要重啟系統才可以生效的
/usr 用戶軟體目錄,用戶裝軟體一般存放在此;類似根目錄里普通用戶的根
/dev 一切設備都是文件 device
/dev/sda scsi SATA U盤
/dev/hda IDE
/dev/cdrom 光碟
/dev/fd0 軟碟機
/dev/lp 印表機
/dev/mouse 滑鼠

# echo > /dev/sda1 --可以當成文件來重定向,但這樣會崩潰系統,可以使用虛擬機來嘗試

/lib 系統使用的函數庫目錄,程序運行過程中,會調用一些這裡的庫文件
/var 主要存放執行過程中經常變化的文件,比如說:日誌,郵件
/var/lib 程序執行過程中,使用的數據文件放置的目錄:比如:rpm包的資料庫, 的locate查找的資料庫等


/var/log 系統日誌和各種服務日誌存放的目錄
/var/run 一般用來存放程序運行的pid
/var/spool/mail 每個用戶收郵件的目錄


關於lib 庫的小實驗:

[root@li ~]# ldd /bin/ls --查看ls調用哪些庫文件
linux-gate.so.1 => (0x00fca000)
librt.so.1 => /lib/librt.so.1 (0x00685000)
libacl.so.1 => /lib/libacl.so.1 (0x004b9000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00690000)
libc.so.6 => /lib/libc.so.6 (0x004e0000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00657000)
/lib/ld-linux.so.2 (0x004c2000)
libattr.so.1 => /lib/libattr.so.1 (0x0049b000)
libdl.so.2 => /lib/libdl.so.2 (0x00651000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00b78000)

[root@li ~]# mv /lib/libsepol.so.1 /lib/libsepol.so.1 .bak --修改這個庫文件的名字


發現ls ,cp ,mv 等命令都不能用了

解決方法:
圖形模式打開/lib目錄,使用滑鼠右鍵點重命名,把名字改回去就OK了

===================================

mount 掛載

在linux下,所有文件系統要能被訪問都掛載(可以掛遠程和本機另一個系統的)

文件系統:
ext2 第二擴展文件系統
ext3 第三擴展文件系統
ext4 第四擴展文件系統


windows下有的比較常見的有 fat32 ntfs

文件系統是用來管理和組織保存在磁碟上數據的系統軟體.

innode 文件或目錄的門牌號

文件的日期,大小,許可權,位置等等這些信息,這些稱做為元數據 (metadata)

ext2

有下面幾種情況:

1,當你保存文件之前,系統崩潰,這種情況下重啟電腦,更新的內容丟失了,但原來的內容還在
2,當你保存文件之後,系統崩潰,這種情況下重啟電腦,更新的內容也在
3,當你正在保存文件時,系統崩潰,內容半新半舊
4,最差的情況是正在寫入元數據的時候,系統崩潰,有可能會丟失

重啟電腦,系統會掃描這些信息,並會拿副本來恢復,fsck 時間很長


linux 他是一個非同步的方式 pdflush
sync 同步


[root@li ~]# ps -ef |grep pdflush
root 5775 11 0 10:41 ? 00:00:00 [pdflush]
root 5831 11 0 10:45 ? 00:00:00 [pdflush]
root 5855 4481 0 10:47 pts/2 00:00:00 grep pdflush

ext3 在ext2 上加了一個日誌的功能

日誌相當於是記錄你的操作的一個功能,相當於資料庫的redo日誌


/dev/sda11 950M 18M 885M 2% /mnt
--空分區被掛載,也會被使用一定空間,就是用來存放日誌或分區有關的信息


ext3文件系統的三種日誌模式:
journal --最安全,保證所有的都被記錄日誌,但是速度最慢
ordered --折中的模式,也是默認的模式
writeback --速度最快,但只基本保證元數據被記錄


裸設備:--沒有文件系統,更快;只能從邏輯層上(如:oracle資料庫軟體把數據存放在一個裸設備上,從系統層面不能查看數據,但可以通過登錄oracle資料庫,用資料庫語言來查詢)


[root@li ~]# mount -o data=journal /dev/sda11 /mnt/

[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900 0 records in
900 0 records out
943718400 bytes (944 MB) copied, 25.9926 seconds, 36.3 MB/s --最慢


[root@li ~]# mount -o data=ordered /dev/sda11 /mnt/

[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900 0 records in
900 0 records out
943718400 bytes (944 MB) copied, 2.02364 seconds, 466 MB/s


[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900

[root@li ~]# mount -o data=writeback /dev/sda11 /mnt/

[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900 0 records in
900 0 records out
943718400 bytes (944 MB) copied, 1.40828 seconds, 670 MB/s --最快

平滑地從ext2升級到ext3文件系統
tune2fs -j /dev/sda1


reiserfs 性能最好,特別是對於處理大量小文件的情況 suse
xfs SGI公司
jfs IBM公司開發的


nfs
gfs
ocfs 共享式集群文件系統

==========================================

tty 與 pts

tty 文本模式下的終端
pts 圖形下的終端

# echo "hello" > /dev/pts/2

# echo "hello haha" > /dev/tty1


==============================================

用戶管理

操作系統的分類:
單用戶單任務操作系統: DOS
單用戶多任務操作系統: windows 95 windows 98 windows 2000
多用戶多任務操作系統: windows 2003 server windows 2008 server
linux unix


基於多用戶的基礎上,引出的用戶的分類:
管理員 root uid=0
系統帳號 uid 1-499 65534 --不用於登錄,用於跑守護進程,服務進程,便於許可權控制的
普通用戶帳號 uid 500-65535(2.6.xxx的內核支持的uid數量為 2^32-1個)

[root@li ~]# echo $[2**32-1]
4294967295


[root@li ~]# id --查看當前登錄用戶的相關信息


uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

[root@li ~]# id apache
uid=48(apache) gid=48(apache) groups=48(apache)


/etc/passwd --用戶
/etc/shadow --用戶密碼和使用限制規則
/etc/group --組
/etc/gshadow --組密碼

--vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: 用戶名
第二列:密碼 老版本這裡放的就是密碼,為了安全性考慮,密碼放到了/etc/shadow的第二列
x代表/etc/shadow的第二列生效,去掉x就表示此用戶登錄的時候沒有密碼
第三列:uid 用戶識別ID值,系統是通過這個值來確認是哪個用戶
第四列:gid 組識別ID值
第五列:描述項 comment
第六列:家目錄
第七個:bash 當前用戶使用的bash


/bin/bash --可以登錄(注意不同的shell類型會有少許的區別)
/bin/false --不能登錄,不能登錄一些服務如FTP,可以收郵件,只能用來跑守護進程
/bin/nologin --不能登錄系統,但可以登錄一些服務如FTP,也可以收郵件等


--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
與/etc/passwd相對應 (但這裡有九列)
第一列: 用戶名
第二列:密碼 (這裡以*號開頭或!開頭默認是不能登陸的,但可以用su 命令切換)
第三列:上一次修改密碼的時間 linux以1970年1月1日到現在的天數來算的
第四列:修改密碼後幾天內不允許再修改 如果這裡為5,那改過密碼后5天內不能再修改 0代表不限制
第五列:多少天內要求你改 99999代表不限制
第六列:過期前幾天給你一個告警信息
第七列:密碼過期后還給的一個寬限天數


第8列: 這裡可以寫一個過期天數 這裡也是以1970年1月1日到現在的天數來計算的,多用於收費系統
第九列: 保留,留著以後功能擴展


===========================================================

手動去加密碼
[root@li ~]# grub-md5-crypt --使用此命令產生加密字元串
Password:
Retype password:
$1$rVSI30$YG2geS.fjSU4mHiS5P4vW/
[root@li ~]# grub-md5-crypt --兩次密碼都為123,但產生的字元串不一樣,這是正常的
Password:
Retype password:
$1$3YSI30$ZyGCzWM2IEmnIW4q4p1uS/

[root@li ~]# vim /etc/shadow --然後加到/etc/shadow
[root@li ~]# su - a --root切換普通用戶,不用密碼
[a@li ~]$ su - b --普通切換普通,要密碼
Password: --輸入123
[b@li ~]$ --登陸成功

=================================================


計算現在離1970年1月1號的天數
[root@li ~]# echo $[`date %s`/86400]
15154

=====================================================


用戶相關的命令
useradd
usermod
userdel --建議加一個-r參數,刪除用戶的同時刪除相關目錄
passwd

[root@li ~]# userdel a --刪除時沒有加-r參數
[root@li ~]# useradd a --再建立一個a用戶會報錯
Creating mailbox file: File exists
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@li ~]# id a --現在的a用戶id 為505
uid=505(a) gid=505(a) groups=505(a)
[root@li ~]# ll /home/
total 24
drwx------ 4 501 501 4096 Jun 29 13:42 a --原來的a用戶id為501

[root@li ~]# userdel -r a --這次加-r參數,也刪除不了,它不屬於id 505的這個a用戶
userdel: /var/spool/mail/a not owned by a, not removing


userdel: /home/a not owned by a, not removing

解決方法:
[root@li ~]# rm /home/a -rf
[root@li ~]# rm /var/mail/a -rf

使用passwd改密碼,普通用戶只能改自己,並且只能改成複雜的密碼(最少8位,要字母,數字,符號組合)
root用戶可以改所有人,並且可以改成很簡單的密碼


finger user1 --查看用戶信息
chfn user1 --修改用戶信息
chsh user1 --修改用戶登錄shell類型

[root@li ~]# chfn a
Changing finger information for a.
Name []: 張三
Office []: 尚觀
Office Phone []: 8888
Home Phone []: 9999

Finger information changed.


--重啟下面兩個服務,就可以自己對本機發送郵件了
# /etc/init.d/sendmail restart
# /etc/init.d/dovecot restart

[root@li ~]# mail a --給本機a用戶發郵件
Subject: 你好 a --主題
haha
hehe --內容
. --點表示結束
Cc: --抄送這裡沒有寫,直接回車結束

[root@li ~]# finger a
Login: a Name: 張三
Directory: /home/a Shell: /bin/bash
Office: 尚觀, x8888 Home Phone: x9999
Never logged in.
New mail received Wed Jun 29 14:42 2011 (CST) --可以看到郵件
Unread since Wed Jun 29 14:40 2011 (CST) --並且告訴了從什麼時間開始的郵件沒有讀
No Plan.

[root@li ~]# su - a --切換到a用戶
[a@li ~]$ mail --使用此命令查看本用戶收到的郵件
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/a": 1 message 1 new
>N 1 root@li.cluster.com Wed Jun 29 14:42 17/586
& 1 --1表示讀取編號為1的郵件

================================


[root@localhost ~]# su - user1 --完全切換,切換后就是相當於使用user1用戶登錄
[user1@localhost ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/user1/bin


[root@localhost ~]# su user1 --非完全切換,切換后還帶有上一個用戶的屬性
[user1@localhost root]$ echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

--root用戶切換普通用戶不需要密碼, 但是普通用戶切換別的用戶都需要密碼


===============================================
先下載auto_config_yum.sh腳本到你的桌面

[root@li ~]# sh /root/Desktop/auto_config_yum.sh --執行腳本
[root@li ~]# yum install vnc -y --安裝vnc包

[root@li ~]# vncviewer 2.2.2.35:0 --密碼為111111


=============================================


組管理

vim /etc/group
bin:x:1:root,bin,daemon

第一列:組名
第二列:與/etc/passwd第二列一樣
第三列:gid
第四列:哪些用戶屬於這個組

vim /etc/gshadow
bin:::root,bin,daemon


groupadd
groupdel
groupmod
gpasswd


gid 和 groups的區別:

gid是建立文件和目錄時的屬組屬性
groups是表示此用戶在訪問時擁有它們的組許可權


[root@localhost ~]# groupadd uplooking
[root@localhost ~]# useradd -G uplooking up1
[root@localhost ~]# useradd -G uplooking up2
[root@localhost ~]# useradd -G uplooking up3
[root@localhost ~]# id up1
uid=503(up1) gid=504(up1) groups=504(up1),503(uplooking)
[root@localhost ~]# id up2
uid=504(up2) gid=505(up2) groups=505(up2),503(uplooking)
[root@localhost ~]# id up3
uid=505(up3) gid=506(up3) groups=506(up3),503(uplooking)

[root@localhost ~]# useradd -g uplooking up4
[root@localhost ~]# useradd -g uplooking up5
[root@localhost ~]# useradd -g uplooking up6
[root@localhost ~]# id up4
uid=506(up4) gid=503(uplooking) groups=503(uplooking)
[root@localhost ~]# id up5
uid=507(up5) gid=503(uplooking) groups=503(uplooking)
[root@localhost ~]# id up6
uid=508(up6) gid=503(uplooking) groups=503(uplooking)


[root@localhost ~]# su - up1
[up1@localhost ~]$ touch test
[up1@localhost ~]$ ll
total 0
-rw-rw-r-- 1 up1 up1 0 Mar 7 13:43 test


[root@localhost ~]# su - up4
[up4@localhost ~]$ touch test
[up4@localhost ~]$ ll
total 0
-rw-r--r-- 1 up4 uplooking 0 Mar 7 13:43 test


--總結:也就是說gid為哪個組,那麼它默認創建的文件或目錄的屬組為gid的那個組


==========================================================


關於初始組和有效組的討論

[root@localhost ~]# usermod -g uplooking -G up1 up1 --把up1的gid改為uplooking,同時還要屬於up1組
[root@localhost ~]# id up1
uid=503(up1) gid=503(uplooking) groups=503(uplooking),504(up1)


[root@localhost ~]# su - up1
[up1@localhost ~]$ groups
uplooking up1 --前一個組為有效組,就是gid的組,表示創建的文件的屬組為uplooking


[up1@localhost ~]$ newgrp up1 --把有效組切換為up1,也可以說成是組登錄
[up1@localhost ~]$ groups
up1 uplooking --雖然gid仍然為uplooking,但是有效組切換為up1了,那麼創建的文件屬組為up1


--總結:上面可以看到gid只是默認的有效組,如果有效組進行了切換,則創建的文件或目錄的屬組為有效組的那個組


=============================


[root@localhost ~]# gpasswd up2 --組up2組加一個組密碼
Changing the password for group up2
New Password:
Re-enter new password:


[root@localhost ~]# su - up1
[up1@localhost ~]$ groups
uplooking up1
[up1@localhost ~]$ newgrp up2 --登錄一個不屬於的組需要組密碼.屬於那個組的話就不需要組密碼
Password:
[up1@localhost ~]$ groups
up2 uplooking up1 --再創建的文件或目錄的屬組就為up2了

=======================================
pwconv 同步/etc/passwd和/etc/shadow
grpconv
=======================================

[root@li ~]# vim /etc/login.defs --useradd創建用戶時默認讀取的文件

======================================


/etc/shadow 誤刪除了 使用pwconv同步,再修改一下密碼

/etc/passwd 誤刪了 ,自己寫一個,或者拷別的機器,先把root寫上去,進入系統再慢慢處理別的用戶



===============================

環境變數

env --查看環境變數
set --除環境變數還可以查看自定義變數


用戶的環境變數設定文件,存放在每個用戶的家目錄下
.bash_history --用戶的歷史命令存放的地方 用history命令可以查看,它不記錄當前會話所操作的命令,當你登陸時,它會記錄上一次會話所操作的命令
.bash_logout --用戶登出后執行的 可以在這裡加上清除.bash_history的命令,在用戶登出時清掉之前的操作
.bashrc --別名設定的文件
.bash_profile --用戶的環境變數設定的地方


/etc/profile
/etc/bashrc
這兩個文件是全局環境變數的配置文件,裡面的配置是對所有用戶生效的

例1:用戶登出時清掉所有的操作記錄
在用戶家目錄下的.bash_logout里加histroy -c (而不要使用rm -rf .bash_history)

例2,別名的增加
vim /root/.bashrc
加上下面一句
alias mount2='mount 2.2.2.35:/share/soft /mnt'

保存退出后 使用source /root/.bashrc使它生效

例3.實現user1用戶可以使用/sbin/下的所有命令

su - a
[a@li ~]$ vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/sbin --這裡多加一個/sbin的目錄

export PATH


[a@li ~]$ source ~/.bash_profile --./或者source使它生效


[a@li ~]$ ifconfig --可以查看

[a@li ~]$ init 0
init: must be superuser.
[a@li ~]$ shutdown
shutdown: you must be root to do that!
[a@li ~]$ ifconfig eth0 10.1.1.36 netmask 255.255.255.0
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFNETMASK: Permission denied
SIOCSIFBROADCAST: Permission denied

--但是上面的一些操作都是不可以的,它們都由內部被許可權控制了
--那麼如何可以讓普通用戶能關機呢? 就要用到講許可權時用到的特殊許可權位 S位

date 命令
[root@li ~]# date %Y-%m-%d
2011-04-15
[root@li ~]# date %Y/%m/%d
2011/04/15
[root@li ~]# date ' %Y/%m/%d %H:%M:%S'
2011/04/15 16:08:05
[root@li ~]# date ' %Y-%m-%d %H:%M:%S'
2011-04-15 16:08:11


[root@li ~]# date -s 20120101 --修改時間
Sun Jan 1 00:00:00 CST 2012

[root@li ~]# date -s '20110629 16:36:40' --改的時候加入時分秒,中間有空格需要使用引號


練習: 使用date命令顯示昨天的日期,三天前,五天後的日期,2012年0點與1970年0點之間的秒數(man date)

# date -d yesterday
# date -d "-1 days"
# date -d "3 days ago"
# date -d "3 yesterday"

# date -d "5 tomorrow"
# date -d " 5 days"

# date %s -d '20120101'

1.系統自動把任何登錄系統的用戶信息給保存到/tmp/login文件里
要求格式為: 用戶名 2011-06-29 16:40:11
提示:先做下面兩步:
touch /tmp/login
chmod 777 /tmp/login --這是把此文件的許可權改為所有的用戶可寫
用戶名如何顯示? 有一個顯示當前登錄用戶的環境變數 (env去查找)

vim /etc/profile --在此文件一行加上下面一句話

echo "$USER `date '%Y-%m-%d %H:%M:%S'`" >> /tmp/login


2.實現每天root用戶登錄后,自動密碼的修改
比如說今天登錄后,
root的密碼就自動被修改為uplooking20110629(後面的數字為登錄當天的時間)
--提示man passwd 去查找 --stdin
# echo uplooking | passwd --stdin root > /dev/null

# vim /root/.bash_profile --在加上下面一句

echo "uplooking`date %Y%m%d`" | passwd --stdin root >
/dev/null

# source /root/.bash_profile


3,實現每天關機退出root用戶登錄之前,自動把2.2.2.35上的筆記同步到自己機器上的/notes目錄下

# vim /root/.bash_logout

rsync -a 2.2.2.35::notes /notes


4.建立三個用戶
a,b,c
建兩個組group1,group2,組密碼都為123

要求:
1.a用戶創建的文件的默認屬組為group2,同時它屬於group1組
2.不存在a,b這兩個組,但存在c組,不存在group1,group2這兩個用戶
3.b用戶gid為group1,不屬於其它組
4.c用戶gid為c,還同時屬於group1,group2
5.b用戶在自己的家目錄下創建一個test文件,要求test文件屬於group2組


[root@li ~]# groupadd group1
[root@li ~]# groupadd group2
[root@li ~]# gpasswd group1
[root@li ~]# gpasswd group2

[root@li ~]# useradd -g group2 -G group1 a
[root@li ~]# id a
uid=512(a) gid=511(group2) groups=511(group2),510(group1)
[root@li ~]# useradd -g group1 b
[root@li ~]# id b
uid=513(b) gid=510(group1) groups=510(group1)

[root@li ~]# useradd -G group1,group2 c
[root@li ~]# id c
uid=514(c) gid=514(c) groups=514(c),510(group1),511(group2)


[root@li ~]# su - b
[b@li ~]$ pwd
/home/b
[b@li ~]$ groups
group1
[b@li ~]$ newgrp group2
Password:
[b@li ~]$ touch test
[b@li ~]$ ll
total 0
-rw-r--r-- 1 b group2 0 Apr 15 15:07 test

本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843881


[火星人 ] linux03-用戶與組已經有724次圍觀

http://coctec.com/docs/linux/show-post-45742.html