марионеточное выполнение сценария Python, где os.system (…) команда не работает

Необходимо будет препятствовать тому, чтобы пользователи делали C-a : shell также, и вероятно много других команд. Изучите экран acl команды. Запустите с aclchg $USER -x ? и включите команды, Вы считаете целесообразным.

4
задан 9 September 2012 в 13:33
2 ответа

Нет необходимости использовать bash-скрипт, просто используйте следующую функцию, которую я использую для других вещей, чтобы сгенерировать теневой зашифрованный пароль:

 def shadow(self,password):
  SomeZolt="$6$"+''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(9))+"$"
  return crypt.crypt(password, SomeZolt)

После чего напишите дополнительные функции в ваш скрипт python который откроет файл / etc / shadow и запишет зашифрованный пароль, который вы получите с помощью этой функции для этого пользователя, таким образом сделав строку вроде:

some_user:!!:15579:0:99999:7:::

make выглядеть так:

some_user:$1$JShdquwdjsd38hSJhdqwdkwd:15579:0:99999:7:::

Таким образом some_user будет иметь назначенный пароль.
Кроме того, вы можете установить пользователя непосредственно в операторе марионетки, изменив его на:

user { $username:
  comment => "$email",
  home    => "/home/$username",
  shell   => "/bin/bash",
  uid     => $uid,
  gid     => $gid,
  password => "SomeAlreadyEncryptedPassword",
}   

Вы можете использовать указанную функцию, чтобы получить зашифрованный пароль и затем вставить его в оператор.

3
ответ дан 3 December 2019 в 03:32

Спасибо за ваш ответ, я последовал вашему совету и закодировал def для генерации хэша пароля и поместил его в файл / etc / shadow.

Вот сценарий, который я написал, если кого-то может заинтересовать:

class Unix_Account:

 def __init__(self, user):
    self.user      = user
    self.password  = ''.join(
       random.choice(
          string.ascii_uppercase + string.ascii_lowercase + string.digits
       ) for x in range(password_length)
    )
    self.salt      = '$6$'+''.join(
       random.choice(string.ascii_uppercase + string.digits
    ) for x in range(9))+'$'
    self.line      = self.user+':'+crypt.crypt(self.password, self.salt)+':0:0:99999:7:::'

 def change_password(self):
    self.result = re.sub(self.user+".*", self.line, file('/etc/shadow', 'r').read())
    file('/etc/shadow', 'w').write(self.result)

Затем другой класс отправляет пароль пользователю.

Дата истечения срока действия пароля установлена ​​на 0, так что пользователь вынужден изменить его при первом подключении.

Соединение установлено. по SSH необходимо использовать соответствующий ключ для установки пароля. Пароль используется для команды sudo.

Еще раз спасибо!

1
ответ дан 3 December 2019 в 03:32

Теги

Похожие вопросы