저는 Linux에서 사용자와 그룹을 관리하기 위한 GUI 애플리케이션을 만들고 있습니다!
새 사용자를 생성하는 작업을 완료했지만 새로 생성된 사용자에게 새 비밀번호를 제공하는 부분에서 여전히 정체 상태입니다. 내 애플리케이션이 수행하는 작업은 GUI를 통해 필요한 입력(사용자 이름, 그룹 목록 및 비밀번호)을 얻고 이 정보를 매개변수로 전달하는 스크립트를 실행하는 것뿐입니다. 사용자 계정 xyz가 있다고 가정해 보겠습니다. 해당 계정의 비밀번호를 변경하려면 다음 명령을 실행하면 됩니다.
passwd xyz
새 비밀번호를 묻는 메시지가 표시됩니다. 이제 모든 필수 정보가 명령줄에 전달되므로 스크립트를 사용하여 새 계정을 만들 수 있습니다.
useradd -m -G users -g "groups" -s /bin/bash "UserName"
Qt 애플리케이션을 통해 스크립트를 실행하고 사용자를 생성할 수 있지만 passwd cmd
다른 줄에서는 입력을 요청합니다. 사람들은 이 문제를 어떻게 처리합니까?
답변1
내 생각에 정답은 다음과 같다.명령줄 도구를 사용하지 말고 라이브러리 호출을 사용하세요.. 이렇게 하면 오류를 더 잘 처리하고 명령줄에서 암호를 전달하는 위험을 피할 수 있습니다.
사용할 수 있는 라이브러리 중 하나는 다음과 같습니다.도서관 이용자, 비교적 간단하며 C 및 Python 바인딩이 있습니다.
답변2
루트로서 다음을 사용하여 스크립트를 통해 체계적으로 사용자의 비밀번호를 설정할 수 있습니다.
$ echo -n "$passwd" | passwd "$uname" --stdin
비밀번호 생성
나는 명령줄 도구를 사용하는 것을 좋아합니다.pwgen
비밀번호를 생성합니다.
$ passwd="`pwgen -1cny | sed 's/[\$\!]/%/g'`"
$ pwgen --help
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
Options supported by pwgen:
-c or --capitalize
Include at least one capital letter in the password
-A or --no-capitalize
Don't include capital letters in the password
-n or --numerals
Include at least one number in the password
-0 or --no-numerals
Don't include numbers in the password
-y or --symbols
Include at least one special symbol in the password
-s or --secure
Generate completely random passwords
-B or --ambiguous
Don't include ambiguous characters in the password
-h or --help
Print a help message
-H or --sha1=path/to/file[#seed]
Use sha1 hash of given file as a (not so) random generator
-C
Print the generated passwords in columns
-1
Don't print the generated passwords in columns
-v or --no-vowels
Do not use any vowels so as to avoid accidental nasty words
하지만 그건 불안한 것 아닌가요?
습관. 비밀번호는 STDIN을 통해 전달되므로 passwd
누군가가 프로세스를 스누핑할 수 있더라도 사용자가 루트 프로세스를 볼 수 없는 경우에도 ps
비밀번호 전달은 격리됩니다 .passwd
예
터미널에서 루트로 이 명령을 실행한다고 가정해 보겠습니다.
$ ( sleep 10; echo "supersecret" | passwd "samtest" --stdin ) &
[1] 13989
그런 다음 ps
다른 터미널에서 실행합니다.
$ ps -AOcmd | grep pass
14046 passwd samtest --stdin R pts/11 00:00:00 passwd samtest --stdin
첫 번째 터미널에서 비밀번호를 변경한 후:
[root@greeneggs ~]# Changing password for user samtest.
passwd: all authentication tokens updated successfully.
passwd의 에코는 어떻습니까?
그래도 비밀번호는 공개되지 않습니다. 이를 증명하기 위한 또 다른 테스트가 있습니다. 먼저 보조 터미널에서 이 명령을 실행합니다. 그러면 출력이 수집됩니다 ps
.
$ while [ 1 ]; do ps -eaf2>&1 | grep -E "echo|pass";done | tee ps.txt
그런 다음 비밀번호 설정 명령을 실행합니다.
$ echo "supersecret" | passwd "samtest" --stdin &
[1] 20055
$ Changing password for user samtest.
passwd: all authentication tokens updated successfully.
[1]+ Done echo "supersecret" | passwd "samtest" --stdin
내용을 확인해 보니 ps.txt
비밀번호가 유출되지 않은 것으로 나타났습니다.
$ grep supersecret ps.txt
$
ps
우리가 사용하는 명령을 변경해 ps -eaf
도 누출되지 않습니다.
답변3
passwd --help
내 상자에는 표준 입력에 새 비밀번호를 제공하기 root
위해 실행될 수 있다고 나와 있습니다.--stdin
답변4
chpasswd 명령은 명령줄에서 사용자 이름/암호 쌍 목록을 읽어 기존 사용자 집합을 업데이트합니다. 각 줄의 형식은 다음과 같습니다
user_name:password
이 명령은 여러 계정이 동시에 생성되는 대규모 시스템 환경에서 사용하기 위한 것입니다. 이 명령에 대한 추가 옵션을 알아보려면 다음을 입력하세요.
man chpasswd