成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

Linux系統管理及桌面應用精華 2
2007-10-30   網絡

正確處理Linux里的密碼

在Linux里,有很多API函數是用來處理密碼的,但是這只能解決一半的問題。你不得不使用好的密碼處理辦法。例如,只有在絕對必要的時候才使用純文本密碼這種(安全)策略。
  
  暴露純文本(密碼內容)的唯一機會是在進行身份驗證時詢問用戶密碼的時候。有一些可用的API函數能夠減少這種風險,包括加密,這應該在獲得用戶密碼之后立即進行。
  
  密碼處理的第一條原則是,絕對不要將純文本的密碼寫到磁盤上——即使是你會立即刪掉的臨時文件。一旦數據到了磁盤上,你在使用之后就很難保證數據沒有丟失。
  
  雖然這個原則看起來似乎很簡單,但是你必須要記住:Linux使用的是虛擬內存。如果你加載了交換分區,內存(里的內容)會在任何時候被寫到磁盤上。為了防止密碼緩沖區被寫到交換分區上,你可以使用mlock API調用:
  
  const intsz = 25;
  char *buf = malloc(sz);
  mlock(buf, sz);
  memset(buf, 0, sz);
  
  為了確保緩沖區真的被鎖定了,你必須至少向每個內存頁寫入一個值。
  
  另一個重要的原則是,決不要將輸入的密碼反饋到終端上。你可以編寫自己的函數或者使用getpass函數,它像下面這樣工作:
  
  const char prompt[] = "Password: ";
  char *pword = NULL;
  pword = getpass(prompt);
  
  有時候你無法使用getpass。在這樣的情況下,你將需要編寫自己的getpass函數。下面就是一個例子:
  
  #include <termios.h>
  #include <stdio.h>
  
  ssize_t
  my_getpass (char **lineptr, size_t *n, FILE *stream)
  {
  structtermios old, new;
  intnread;
  
  /* Turn echoing off and fail if we can't. */
  if (tcgetattr (fileno (stream), &old) != 0)
  return -1;
  new = old;
  new.c_lflag &= ~ECHO;
  if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
  return -1;
  
  /* Read the password. */
  nread = getline (lineptr, n, stream);
  
  /* Restore terminal. */
  (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
  
  return nread;
  }
  return nread;
  }
  
  很顯然,傳遞到函數里的緩沖區應該首先被鎖定。
  
  可插拔驗證模塊(PAM)
  
  PAM是一個模塊化的系統,它將驗證、密碼管理、會話管理,以及帳號管理抽象出來。它授權被編寫用來同PAM一起工作的應用程序來使用各種模塊,并允許這些模塊被卸載或者被別的模塊替換,而不需要重新編寫應用程序。

熱詞搜索:

上一篇:基于Linux的路由器和防火墻配置
下一篇:Linux系統管理及桌面應用精華

分享到: 收藏
主站蜘蛛池模板: 视频污污| 扭扭棒卡皮巴拉教程| 热情电影| 古铜| 电影英雄| 《摧花狂魔》电影| 王雪华| 色戒在线观看视频| 庞勇| cctv1回放| 黄河颂思维导图| 张国荣霸王别姬| 狗叫声吸引狗| 施华| 市川美织| av线网| 男人不可以穷演员表| 吴添豪| 电影《正青春》| 饶太郎| 搜狐网站官网| 杨功个人资料介绍| 口述与子性细节过程| 女脱衣服| 温性的水果有哪些| 少爷爱上保镖泰剧双男主| 一闪一闪亮晶晶钢琴谱简谱| 在线黄色免费网站| 诺远| cgtn英语频道在线直播观看| 草刈正雄| 抖音社区| 浙江卫视直播在线观看高清电视台 | 少年王演员表全部| 护花使者歌词| 笑口常开图片| 风云雄霸天下| g83钻孔循环怎么编程| 浙江省全省地图| 监狱女孩电影| 又造句二年级上册|