GUI 애플리케이션을 통해 사용자 비밀번호 변경

GUI 애플리케이션을 통해 사용자 비밀번호 변경

저는 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

관련 정보